我正在尝试使用 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 之前发生的表达式计算?
如何调试发生在 main 之前的表达式计算?
main
没有什么特别的.要调试它,您可以使用break f
和run
,或者istart
、break f
、continue
。
在Linux上,你应该看看rr,它可以让你"回到"崩溃之前 - 它非常好。