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

时间:2012-07-25 15:46:16

标签: c++ solaris

背景

在迁移到更新版本的CC编译器时,会出现在以前工作的模块中的段错误。

到目前为止的观察

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

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

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

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

    有什么想法吗?提前谢谢。

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

    回应评论的更多细节

    1. 代码是单线程的。
    2. valgrind在Solaris上不可用,因此无关紧要。

1 个答案:

答案 0 :(得分:2)

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