c++ - 在 main 之前调试对全局变量的赋值

标签 c++ gdb global-variables program-entry-point

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

在 Linux 上,你应该看看 rr ,这将允许您“回到过去”到崩溃之前——这非常好。

关于c++ - 在 main 之前调试对全局变量的赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57389958/

相关文章:

c++ - 如何将一系列计算值发送到数组中?

c++ - QtCreator 调试器不显示 std::string 的值

linux - 如何更改默认的 Eclipse 控制台?

eclipse - 如何告诉 gdb/eclipse 不要在信号 xyz 上停止

c++ - 防止链接器删除全局变量

c++ - 通过引用传递参数到底是什么?

c++ - 强制模板函数参数是特定类型的迭代器

iphone - 全局变量调用仅在第一次有效

C++:不能修改全局变量

c++ - 返回一个 shared_ptr