c++ - 如何在 C++ 中查看 <optimized out> 变量的值?

标签 c++ gdb g++

我正在使用 gdb 调试 C++ 程序。

我有这个代码:

int x = floor(sqrt(3));

我想查看 x 的值。但是,gdb 声称 x 是“”。如何查看 x 的值?我应该更改我的编译器标志吗?

最佳答案

在高优化级别上,编译器可以消除中间值,正如您在此处看到的。有多种选择:

  • 您可以降低优化级别,使调试器更容易跟踪事物。 -O0 肯定可以工作(但会慢很多),-O1 也可以正常工作。
  • 您可以添加一些显式打印语句来记录输出值。
  • 您通常也可以强制编译器通过将其设置为 volatile 来保留此特定值(但请记住在完成后将其取消设置为 volatile!)。但是请注意,由于控制流在优化代码中也会发生变化,即使您可以看到变量的值,当您查看有问题的变量。

关于c++ - 如何在 C++ 中查看 <optimized out> 变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9123676/

相关文章:

c++ - 防止在 printf C C++ 中打印符号

c - 声明的变量堆栈

c++ - g++ 内联调用 always_inline "int _rdrand16_step()"失败

c++ - 如何替换版本 g++5 的 bvector header

c++ - 如何在 C 中包装返回智能指针的 C++ 函数?

c++ - 使/欺骗 Visual C++ 正确地缩进宏结构

c - 为什么 gdb 将 sqrt(3) 评估为 0?

更改 gdb 中的默认主文件

c++ - 如何让 g++ 需要一个标准的 `main` ?

函数内部的c++引用函数