需要帮助尝试调试奇怪的分段错误

inf*_*ler 6 c++ solaris

背景

在转向更新版本的CC编译器时,会出现在以前工作的模块中的段错误.

到目前为止的观察

  1. 从核心文件中我可以了解segfault的起源功能.当我观察到这个功能时,我找不到任何可疑的东西.

  2. 第一个主要问题是segfault仅在"发布"(优化打开)中进行编译时才会重现,并且不会在"调试"中重现.此外,段错误不会在g ++上重现.

  3. 现在我开始使用打印,并且在将代码中的某些行添加cout/ printf(二进制搜索段错误行/打印指针的值)时出现了更大的问题,段错误没有重现.此外,我在代码中的某一行添加了一个cout来维护段错误,这可能意味着段错在该行之前发生.在该行之后评论行使得段错误消失.

对我来说,这会尖叫内存损坏(特别是堆栈),但我不知道如何在不查看生成的程序集的情况下推进此操作.

有任何想法吗?提前致谢.

我正在开发SunOS_5.10_Studio_12_5.12_64,CC版"Sun C++ 5.12 SunOS_sparc 2011/11/16"

回复评论的更多细节

  1. 代码是单线程的.
  2. valgrind在Solaris上不可用,因此它不相关.

per*_*eal 2

您应该使用内存调试器/分析器,例如valgrind。它会很快告诉您腐败的位置。在 Solaris 上,您可以尝试libumem