<优化了 ubuntu 中 gdb 中的>

<Optimized out > in gdb in ubuntu

本文关键字:gdb gt 中的 lt 优化 ubuntu      更新时间:2023-10-16

在ubuntu中调试gdb时,在一个断点之后,我试图打印一些东西。这是<value optimized out >。在make文件中,我已将-O2更改为-O0,即使发生同样的错误。如何摆脱这个错误,打印优化的输出值?

可怕的"optimized out"消息意味着编译器决定它不能告诉调试器变量在哪里。它可以完全消失,或者它可能只是太复杂而无法以某种方式表示(可能是为了在编译器代码中保持理智)。

您可以使用一些技巧来避免此消息。

首先,确保启用了-fvar-tracking。如果您使用的是DWARF,那么它应该是优化时的默认值(旁注:永远不要使用stab),但确保一下也无妨。你可能也需要-fvar-tracking-assignments。这些标志告诉GCC更努力地为变量生成调试信息。

如果失败了,并且您仍然需要一个特定的变量,您可以尝试较少优化的编译。-O0应该可以工作。我在帖子中看到你说它不起作用,但在我长期的gdb工作经验中,这总是被证明是某种开发人员错误——你忘记重建正确的文件,你使用了错误的库,类似的东西。您也可以尝试-Og,它尝试只启用不会影响调试的优化。

最后一个选项是尝试使所讨论的变量在您感兴趣的点上存在。例如,您可以获取它的地址并将其传递给其他函数,注意不要让编译器将该函数优化掉。