没有调试符号的程序崩溃,运行正常(在任何情况下都没有优化或任何东西)

时间:2012-10-12 11:24:02

标签: c++ debugging visual-c++ crash heisenbug

我遇到了一个非常令人困惑的崩溃,并且无法在我的程序中跟踪它。

我不知道它的来源在哪里,因为每当我尝试链接/debug标志以便使用调试符号进行调试时,崩溃就会消失!

这似乎与优化无关(我用/Od编译来禁用编译器优化,而我使用链接时代码生成)并且独立于调试信息本身(我正在编译/Zi)。出于某种原因,当在没有/debug标志的情况下调用链接器时,一切都表现不同。

可能导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:4)

事实证明,链接器 合并static const int字段

显然,如果您有多个具有相同类型和值的static const个字段,链接器将合并它们,但前提是您没有链接调试符号。

我正在使用这些字段的地址来区分它们,结果发现它们对链接器看起来都是一样的,因此代码的其余部分也是如此。

我是怎么想出来的? {strong>很多的print语句(小时)让我意识到错误的代码正在被执行,直到我终于意识到原因。