<优化了 ubuntu 中 gdb 中的>
<Optimized out > in gdb in ubuntu
在ubuntu中调试gdb时,在一个断点之后,我试图打印一些东西。这是<value optimized out >
。在make文件中,我已将-O2
更改为-O0
,即使发生同样的错误。如何摆脱这个错误,打印优化的输出值?
可怕的"optimized out"消息意味着编译器决定它不能告诉调试器变量在哪里。它可以完全消失,或者它可能只是太复杂而无法以某种方式表示(可能是为了在编译器代码中保持理智)。
您可以使用一些技巧来避免此消息。
首先,确保启用了-fvar-tracking
。如果您使用的是DWARF,那么它应该是优化时的默认值(旁注:永远不要使用stab),但确保一下也无妨。你可能也需要-fvar-tracking-assignments
。这些标志告诉GCC更努力地为变量生成调试信息。
如果失败了,并且您仍然需要一个特定的变量,您可以尝试较少优化的编译。-O0
应该可以工作。我在帖子中看到你说它不起作用,但在我长期的gdb工作经验中,这总是被证明是某种开发人员错误——你忘记重建正确的文件,你使用了错误的库,类似的东西。您也可以尝试-Og
,它尝试只启用不会影响调试的优化。
最后一个选项是尝试使所讨论的变量在您感兴趣的点上存在。例如,您可以获取它的地址并将其传递给其他函数,注意不要让编译器将该函数优化掉。
相关文章:
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- 如何找出GDB的SIGTRAP核心转储的根本原因
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数
- EASTL矢量<向量<int>>连续的
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 使用vscode调试时,GDB意外退出
- 如何防止 CUDA-GDB 中的<优化输出>值
- fopen 在 gdb 中返回 NULL
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 结构字段名称与 GDB 中的 STL 数组冲突
- 如何在带有 gdb GUI 前端的 ARM gdbserver 的 PC 上执行远程 gdb 会话?
- GDB 断点在 Mac 上是不准确的
- 如何解释GDB中回溯的模板函数签名?
- 如果以下行不包含决策或分支,GDB 无法单步跳过函数
- 这是 ubuntu 16.04 中的 gdb 错误吗?
- 如何为从 Python 调用C++启动 GDB?
- 如何打印源文件中与 GDB 中的程序流关联的所有行号
- 堆叠协程 + gdb = "previous frame inner to this frame (corrupt stack)?"
- 带有 GDB 调试器的 VS 代码内存视图
- 附加到 gdb 会中断并且不会继续该过程