【发布时间】:2011-06-05 10:31:05
【问题描述】:
我有一个多线程 C 程序,它始终在程序的特定点生成分段错误。当我用 gdb 运行它时,没有显示错误。你能想到为什么只有在不使用调试器时才会发生故障的原因吗?不能用它来发现问题,真是烦人!
【问题讨论】:
-
这种错误被称为"Heisenbug",可能有很多原因。
-
错误是否与窗口管理和/或User32.dll有关?
-
我遇到了这样的问题,我的程序只在 GDB 中崩溃了。问题是当我运行我的程序时,一个未初始化的类成员变量的值仍然为 0,但是当我在 GDB 中运行它时,它有一些巨大的值,当我将它用作数组索引时会出现段错误。
-
与 Windows 无关 - 我使用的是 Linux 2.6.32-24-generic #43-Ubuntu。
-
您是否尝试过安排核心转储?在调试器外部启动程序之前运行
ulimit -c unlimited,然后在转储内核之后运行gdb myprogram core。然后 gdb 将能够对您的段错误进行事后分析。
标签: c debugging gdb segmentation-fault