我正在尝试使用gdb调试在分配给全局变量的表达式的评估期间崩溃的CPP
应用程序。这是一个演示我的意思的最小示例:
#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之前进行一个调试表达式求值?
答案 0 :(得分:0)
如何在main之前进行一个调试表达式求值?
main
没有什么特别之处。要对此进行调试,可以使用break f
和run
,也可以使用istart
,break f
,continue
。
在Linux上,您应该看一下rr,它可以让您“回到过去”直到崩溃之前-这非常好。