1

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

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

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

这可能是什么原因造成的?

4

1 回答 1

4

事实证明,罪魁祸首是链接器合并了static const int字段

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

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

我是怎么想出来的?
大量print语句(小时)使我意识到正在执行错误的代码,直到我终于意识到原因。

于 2012-10-12T11:24:01.690 回答