在主变量之前调试对全局变量的赋值

时间:2019-08-07 08:22:23

标签: c++ gdb global-variables main

我正在尝试使用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之前进行一个调试表达式求值

1 个答案:

答案 0 :(得分:0)

  

如何在main之前进行一个调试表达式求值?

main没有什么特别之处。要对此进行调试,可以使用break frun,也可以使用istartbreak fcontinue

在Linux上,您应该看一下rr,它可以让您“回到过去”直到崩溃之前-这非常好。