gpt4 book ai didi

c++ - 需要帮助尝试调试奇怪的段错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:08 24 4
gpt4 key购买 nike

背景

在迁移到较新版本的 CC 编译器时,一个段错误出现在曾经工作的模块中。

到目前为止的观察

  1. 从核心文件中,我可以了解段错误起源于哪个函数。当我观察这个功能时,我没有发现任何可疑之处。

  2. 第一个主要问题是段错误仅在“发布”(启用优化)中编译时重现,而在“调试”时不重现。此外,段错误不会在 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 上不可用,因此不相关。

最佳答案

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

关于c++ - 需要帮助尝试调试奇怪的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11653619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com