gpt4 book ai didi

c++ - 为什么我的调试器有时会崩溃并做出与我的代码不一致的事情?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:36 24 4
gpt4 key购买 nike

当我在我的 C++ 代码上使用我的调试器时(在我的特定情况下,是 QT Creator 和 GDB 一起激发了我的灵感),有时甚至在调用 make clean 后跟 make 调试器似乎吓坏了。

有时它会好像和另一段代码的行号排在一起,会跳来跳去。有时会偏离一行,有时会完全偏离,它会不规律地跳来跳去。

其他时候,它会因为进入我没有要求它进入的事情而吓坏了,比如在跨过一个函数调用时,它可能会进入作为它一部分的字符串初始化例程。

当我遇到段错误时,有时它能够完美地告诉我它在哪里发生,而有时它甚至无法显示问号,说明哪些函数从哪里调用了代码,而我所看到的只是汇编,即使重复运行完全相同的代码。

我似乎无法找出导致这些失败的模式,有时我的调试器表现得非常好。

这些调试器故障背后的理论原因是什么,我可以采取哪些具体步骤来防止它们?

最佳答案

有3个很常见的原因

  • 您正在调试优化代码。这很少奏效——优化代码可以重新排序/内联/预计算/等等。到目前为止,根本没有机会将其映射回源代码。

  • 无论出于何种原因,您都没有调试与当前源代码匹配的二进制文件。

  • 您已经在某处调用了未定义的行为 - 如果您的代码做了任何事情,它已经弄乱了调试器保持其正常运行所需的脚手架。当您遇到段错误并且无法获得正常的堆栈跟踪时,通常会发生这种情况,您已经覆盖/混淆了调试器完成其工作所需的信息(例如堆栈指针)。

可能还有数百个 - 我个人遇到的东西是:调试多线程代码;取决于 gcc/gdb 版本和其他各种东西——有相当多的调试器错误。

关于c++ - 为什么我的调试器有时会崩溃并做出与我的代码不一致的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3417880/

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