<Optimized out > 在 gdb 中 ubuntu

<Optimized out > in gdb in ubuntu

在 ubuntu 中使用 gdb 进行调试时,在断点后我尝试打印一些东西。它显示 <value optimized out > 。在 make 文件中,我将 O2 更改为 O0,即使这样也会出现同样的错误。如何消除此错误并打印优化后的输出值?

可怕的 "optimized out" 消息意味着编译器决定它不能告诉调试器变量所在的位置。它可能完全消失了,或者它可能太复杂而无法以某种方式表示(也许是为了编译器代码内部的完整性)。

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

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

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

最后一个选择是尝试使相关变量在您感兴趣的时间点生效。例如,您可以获取它的地址并将其传递给其他函数,注意不要让编译器优化该函数。