程序在没有调试符号的情况下崩溃,运行良好(两种情况下都没有优化或任何内容)
Program crashes without debug symbols, runs fine with them (no optimizations or anything in either case)
我遇到了一个非常令人困惑的崩溃,并且在我的程序中无法追踪它。
我不知道它的来源在哪里,因为每当我尝试与 /debug
标志链接以使用调试符号进行调试时,崩溃就会消失!
这似乎与优化无关(我使用 /Od
编译以禁用编译器优化,并且我没有使用链接时代码生成),也独立于调试信息本身(我正在使用 /Zi
进行编译)。出于某种原因,当在没有 /debug
标志的情况下调用链接器时,所有行为都不同。
可能是什么原因造成的?
事实证明,罪魁祸首是链接器合并了static const int
字段。
显然,如果您有多个相同类型和值的static const
字段,链接器将合并它们,但前提是您不链接调试符号。
我使用这些字段的地址来区分它们,事实证明,它们在链接器中看起来都一样,因此对代码的其余部分也是如此。
我是怎么想出来的?
大量的print
语句(小时)使我意识到正在执行错误的代码,直到我最终意识到原因。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 在这种情况下,编译器会进行优化吗?
- 当 95% 情况下的值为 0 或 1 时,对非常大的数组进行随机访问的任何优化
- 在没有返回值优化的情况下将两个对象加在一起时,将创建多少个临时对象
- 默认情况下在CMAKE中进行优化
- 在代码优化过程中,C++11编译器是否会在可能的情况下将局部变量转换为右值
- 在这种情况下,为什么QMAKE添加-O1和-O2优化标志
- C 控制台应用程序;在牙科诊所情况下,时间优化了队列
- 如何消除只在启用优化的情况下出现的错误
- 程序在没有调试符号的情况下崩溃,运行良好(两种情况下都没有优化或任何内容)
- Visual Studio 2013 在存在 /OPT:ICF 的情况下是否进行了正确优化?
- 如何在没有调试符号和优化的情况下创建 cmake 构建配置
- 有没有办法告诉 clang 在没有其他优化的情况下生成 TBAA 元数据
- 编译器是否在返回成员变量的情况下执行返回值优化
- 在这种情况下,我如何优化一对的结构
- 为什么Visual Studio在这种情况下不执行返回值优化(RVO)
- 如何在VC++2015全程序优化的情况下正确地从dll中公开接口
- 为什么volatile变量即使在非常简单的情况下也没有优化
- 如何在不完全重新加载每帧每个像素的情况下更改图像的 alpha 值/ 优化