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



我正在尝试使用 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 frun,或者istartbreak fcontinue

在Linux上,你应该看看rr,它可以让你"回到"崩溃之前 - 它非常好。

相关内容

  • 没有找到相关文章

最新更新