如何查看 在C ++中的变量的值?

问题描述 投票:35回答:4

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

我有此代码:

int x = floor(sqrt(3));

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

c++ gdb g++
4个回答
40
投票

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

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

15
投票

如果您不能或不想禁用优化,则可以尝试将变量声明为volatile


0
投票

创建您自己的'全局变量',并将优化后的输出变量打印到该全局变量中。完成调试后,请确保删除您创建的这些全局变量!


0
投票

使用反向调试时,请尝试向后退一步,使其更接近变量的定义点

© www.soinside.com 2019 - 2024. All rights reserved.