我正在尝试使用 gdb 调试 CPP
应用程序,该应用程序在分配给全局变量的表达式求值期间在到达 main 之前崩溃>。这是一个演示我的意思的最小示例:
#include <stdlib.h>
int f()
{
int i=7;
if (rand() > 30) { return i / (i*i-14*i+49); }
else { return 6 / (i*i-14*i+49); }
}
int a = f();
int main(int argc, char **argv)
{
return 0;
}
它包含一个非法的零除,这将触发算术异常。我像往常一样编译它
$ g++ -ggdb main.cpp -o main
然后尝试像这样调试它:
$ gdb ./main
(gdb) break main
(gdb) run
Program received signal SIGFPE, Arithmetic exception.
0x0000555555554689 in f () at main.cpp:5
5 if (rand() > 30) { return i / (i*i-14*i+49); }
我的问题是:如何调试发生在 main 之前的表达式求值?
最佳答案
How can one debug expression evaluations that occur before main?
nothing main
没有什么特别之处。要调试它,您可以使用 break f
和 run
,或者 istart
、break f
、继续
。
在 Linux 上,你应该看看 rr ,这将允许您“回到过去”到崩溃之前——这非常好。
关于c++ - 在 main 之前调试对全局变量的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57389958/