程序在没有调试符号的情况下崩溃,运行良好(两种情况下都没有优化或任何内容)

Program crashes without debug symbols, runs fine with them (no optimizations or anything in either case)

本文关键字:情况下 优化 两种 任何内 运行 符号 调试 崩溃 程序      更新时间:2023-10-16

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

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

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

可能是什么原因造成的?

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

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

我使用这些字段的地址来区分它们,事实证明,它们在链接器中看起来都一样,因此对代码的其余部分也是如此。

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

相关文章: