在ubuntu中使用gdb进行调试时,在断点之后我尝试打印一些东西。它显示< 值优化> 。在make文件中,我已将O2更改为O0,即使这样也会发生相同的错误。如何摆脱这个错误并打印优化的输出值?
答案 0 :(得分:2)
可怕的"优化的" message表示编译器决定它不能告诉调试器变量所在的位置。它可能完全消失,或者它可能过于复杂而无法以某种方式表示(可能是为了编译器代码中的健全性)。
您可以使用一些技巧来避免此消息。
首先,确保已启用-fvar-tracking
。如果您正在使用DWARF,那么它应该是默认值(旁注:永远不要使用stabs),但确保它不会受到伤害。您可能也需要-fvar-tracking-assignments
。这些标志告诉GCC更加努力地为变量生成调试信息。
如果失败,并且您仍然需要特定变量,则可以尝试使用较少的优化进行编译。 -O0
应该有效。我在帖子中看到你说它不起作用,但是在我使用gdb的长期经验中,这总是会出现某种开发人员错误 - 你忘了重建正确的文件,你使用了错误的库,类似的东西。您还可以尝试-Og
,它会尝试仅启用不会对调试造成影响的优化。
最后一个选择是尝试在你对它感兴趣的时候生成有问题的变量。例如,您可以获取其地址并将其传递给其他函数,注意不要让编译器优化该函数。