返回信息流gdb调试c++:断点设置在执行文件的第一行!
背景:C++代码中,文件的执行开始并不是函数main,而是全局变量的构造函数。
我想知道,怎么设置断点,让gdb直接断在第一个全局变量的构造函数处。这样,可以从最开始进行跟踪。
如果gdb不能直接这么设断点,有没有什么间接或者更好的方法呢?
先说linux平台下的吧,windows下的也可以!
谢谢!
这是一条镜像帖。来源:北邮人论坛 / cpp / #38506同步于 2010/4/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
gdb调试c++:断点设置在执行文件的第一行!
qinwang
2010/4/24镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
满篇的感叹号!
bp在ctor!
【 在 qinwang (qinwang) 的大作中提到: 】
: gdb调试c++:断点设置在执行文件的第一行!
: 背景:C++代码中,文件的执行开始并不是函数main,而是全局变量的构造函数。
: 我想知道,怎么设置断点,让gdb直接断在第一个全局变量的构造函数处。这样,可以从最开始进行跟踪。
: ...................
【 在 FadeToBlack 的大作中提到: 】
: 满篇的感叹号!
: bp在ctor!
: 【 在 qinwang (qinwang) 的大作中提到: 】
: ...................
不好用。。。
查一下你的编译器的crt给安插的入口函数是啥,在那里下断点。
vc的话是一个貌似叫crtMainStartup之类的东西,里面会初始化IO,调用全局对象的构造函数。
【 在 qinwang 的大作中提到: 】
: 不好用。。。
class A
{
public:
A()
{
m = 1;
}
private:
int m;
};
A a;
int main()
{
return 0;
}
gcc a.cpp -o a -g
gdb a
b 6
Breakpoint 1, A (this=0x8049758) at a.cpp:6
6 m = 1;
(gdb)
最近在看一个开源的代码,代码量有点大,没有注释,没有文档,你这种方法行不通,因为肉眼很难看见是那个全局变量最先执行的。
BTW:你这个例子太简单了。。。
【 在 jokerlee (Jackal The Dire) 的大作中提到: 】
: class A
: {
: public:
: ...................
说一下你的编译环境
【 在 qinwang (qinwang) 的大作中提到: 】
: 最近在看一个开源的代码,代码量有点大,没有注释,没有文档,你这种方法行不通,因为肉眼很难看见是那个全局变量最先执行的。
: BTW:你这个例子太简单了。。。
Linux 2.6.9-78.ELsmp #1 SMP Wed Jul 9 15:39:47 EDT 2008 i686 i686 i386 GNU/Linux
gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)
【 在 coolwc (小包) 的大作中提到: 】
: 说一下你的编译环境