gdb 进阶使用记录(主要是关于 optimized out)

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

如果 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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值