在ubuntu中使用gdb调试时,在断点后我尝试打印一些东西。显示< 最佳化的值 >。在生成文件中,我将O2更改为O0,即使发生同样的错误。如何消除此错误并打印出优化输出值?
可怕的“优化掉”消息意味着编译器决定它不能告诉调试器变量所在的位置。它可能完全消失了,或者它可能太复杂而无法以某种方式表示(可能是为了在编译器代码中保持理智)。
您可以使用一些技巧来避免此消息。
首先,确保-fvar-tracking已启用。如果您使用 DWARF,它应该是优化时的默认设置(旁注:永远不要使用 stabs),但确保它不会有什么坏处。你可能也想要-fvar-tracking-assignments。这些标志告诉 GCC 更加努力地为变量生成调试信息。
如果失败,并且您仍然需要一个特定的变量,您可以尝试以较少的优化进行编译。 -O0应该管用。我在帖子中看到你说它不起作用,但根据我在 gdb 上的长期工作经验,这总是被证明是某种开发人员错误——你忘记重建正确的文件,你使用了错误的库,类似的东西。您也可以尝试-Og,它尝试仅启用不会影响调试的优化。
最后一种选择是尝试使相关变量在您感兴趣的点上生效。例如,您可以获取它的地址并将其传递给某个其他函数,注意不要让编译器优化该函数。
| 归档时间: |
|
| 查看次数: |
2413 次 |
| 最近记录: |