我正在使用gdb调试C ++程序。
我有此代码:
int x = floor(sqrt(3));
并且我想查看x的值。但是,gdb声称x为“ << optimized_out>”。如何查看x的值?我应该更改编译器标志吗?
在高优化级别上,编译器可以消除中间值,如您在此处看到的。有很多选项:
-O0
肯定可以工作(但是会慢很多),-O1
也可以工作。如果您不能或不想禁用优化,则可以尝试将变量声明为volatile
创建您自己的'全局变量',并将优化后的输出变量打印到该全局变量中。完成调试后,请确保删除您创建的这些全局变量!
使用反向调试时,请尝试向后退一步,使其更接近变量的定义点