gdb中的<value optimized =“”out =“”>是一个问题吗?</value>

时间:2010-02-16 15:02:30

标签: c++ gcc gdb

我有一个只在-O2优化中崩溃的应用程序(使用gcc 4.2.4编译)。当我单步执行代码并到达崩溃并尝试检查值的位置时,我在gdb中得到“值优化”。

我在网上看到这意味着该值存储在寄存器中。我想知道我的崩溃是否与某些信息放在寄存器中这一事实有关?有没有办法打印寄存器中的内容以查看它是否已损坏?有没有办法保持优化但不使用寄存器?

谢谢!

5 个答案:

答案 0 :(得分:11)

99%的可能是您的代码中的错误,1%可能是编译器代码生成错误。因此,花费相当多的时间在代码中寻找潜在的错误,但要注意你只是可能找到了代码生成错误(在这种情况下,你需要仔细研究编译器生成的代码)看看问题是什么。)

答案 1 :(得分:5)

在gdb中尝试info registers

您可以使用-O0禁用优化,但有些东西可疑,我建议您进一步调查并最终发布代码。

答案 2 :(得分:2)

如果您可以在程序流程中检测到错误,您可以自己进行一些打印,如果它与内存泄漏和内存损坏有关,那么valgrind可能是比gdb更好的朋友。

答案 3 :(得分:0)

这不是问题,在更新版本的gcc中进行积极优化更是一个问题。

请参阅:A Plan to Fix Local Variable Debug Information in GCC

答案 4 :(得分:0)

要注意的一件事是指针别名,编译器可以在其中做出不符合的假设,例如,传递给函数的指针不指向该函数也使用的全局变量。 但您可以使用编译器选项等来控制它。