当我在我的C++代码上使用我的调试器(在我的特定情况下,它是QT Creator以及GDB启发了这一点)时,有时即使在调用make clean
之后make
调试器似乎也吓坏了.
有时它似乎与另一段代码的行号对齐,并会跳转.有时这是一条线,有时这完全是关闭的,它会不规律地跳转.
其他时候,它会因为踩到我没有要求它进入的事情而变得惊慌失措,就像踩过函数调用一样,它可能会进入作为其一部分的字符串初始化例程.
当我遇到seg故障时,有时它能够告诉我它在哪里完美发生,有时它甚至不能显示哪些函数称为代码的问号,从哪里开始,我所看到的就是汇编,即使在运行时也是如此重复相同的代码.
我似乎无法找出导致这些失败的模式,有时我的调试器表现得非常好.
这些调试器背后的理论原因是什么,以及我可以采取哪些具体步骤来防止它们?
nos*_*nos 11
有三个非常常见的原因
您正在调试优化代码.这很少有效 - 优化的代码可以重新排序/内联/预先计算/等.到目前为止,没有任何机会将其映射回源代码.
无论出于何种原因,您都没有调试与当前源代码匹配的二进制文件.
你已经在某处调用了未定义的行为 - 如果你的代码做了什么,它已经搞乱了调试器需要保持其理智的脚手架.当你得到一个段错误并且你无法获得理智的堆栈跟踪时,通常会发生这种情况,你已经覆盖/搞乱了调试器需要完成其工作的信息(例如堆栈指针).
可能还有数百个 - 我个人遇到的问题是:调试多线程代码; 取决于gcc/gdb版本和各种其他东西 - 调试器错误很少.
归档时间: |
|
查看次数: |
1693 次 |
最近记录: |