背景
在迁移到更新版本的 CC 编译器时,一个段错误出现在一个可以正常工作的模块中。
迄今为止的观察
从核心文件中,我可以了解段错误起源于什么功能。当我观察该功能时,我找不到任何可疑之处。
第一个主要问题是段错误仅在“发布”(打开优化)编译时重现,而在“调试”时没有重现。此外,段错误不会在 g++ 上重现。
现在我开始使用打印,并且出现了一个更大的问题 - 当添加
cout
/printf
(二进制搜索段错误行/打印指针的值)到代码中的某些行时,段错误没有重现。此外,我在维护段错误的代码的某一行中添加了一个 cout,这可能意味着段错误发生在该行之前。该行之后的注释行使段错误消失。
对我来说,这尖叫着内存损坏(特别是堆栈),但我不知道如何在不查看生成的程序集的情况下推进这一点。
有任何想法吗?提前致谢。
我正在研究 SunOS_5.10_Studio_12_5.12_64,CC 版本“Sun C++ 5.12 SunOS_sparc 2011/11/16”
回复评论的更多细节
- 代码是单线程的。
- valgrind 在 Solaris 上不可用,因此不相关。