如果 gdb 调试发现 optimized out,这个表示被编译器优化了,这个优化跟编译选项有关,gcc 有个 -O0 -O1 -O2 等编译选项,越高等级能看到的信息越少
一些发现
根据我的实验,这个编译器优化是一个动态优化,就是我同样的代码,但是我输入的参数不一样,优化就不一样(注意堆栈的 main 函数参数)
#0 0x00007ffff70255f7 in raise () from /lib64/libc.so.6
#1 0x00007ffff7026ce8 in abort () from /lib64/libc.so.6
#2 0x00007ffff7928a55 in __gnu_cxx::__verbose_terminate_handler ()
at ../../../../gcc-4.8.5/libstdc++-v3/libsupc++/vterminate.cc:95
#3 0x00007ffff7926bf6 in __cxxabiv1::__terminate (handler=<optimized out>)
at ../../../../gcc-4.8.5/libstdc++-v3/libsupc++/eh_terminate.cc:38
#4 0x00007ffff7926c23 in std::terminate () at ../../../../gcc-4.8.5/libstdc++-v3/libsupc++/eh_terminate.cc:48
#5 0x00007ffff7926e42 in __cxxabiv1::__cxa_throw (obj=0x6030c0, tinfo=0x601de0 <_ZTIPKc@@CXXABI_1.3>, dest=0x0)
at ../../../../gcc-4.8.5/libstdc++-v3/libsupc++/eh_throw.cc:87
#6 0x0000000000400eaf in test2 (i=-1) at a.cpp:9
#7 test1 (i=0) at a.cpp:26
#8
GDB调试中的optimizedout现象:编译优化与动态调试策略

文章探讨了在GDB调试中遇到optimizedout现象的原因,即代码被编译器优化导致的部分信息丢失。作者提供了通过调整编译选项、动态分析参数和利用gdb技巧(如强制转换和局部变量检查)来获取优化后隐藏信息的方法。
最低0.47元/天 解锁文章
1819

被折叠的 条评论
为什么被折叠?



