gdb调试core时能用i locals看栈变量、函数行(即不出现No symbol table info available)的必要条件: 1. 编译时有-g参数; 2.so库未被strip脱衣服

当使用gdb调试core文件时,如果出现无法查看栈变量和函数行信息,通常是由于缺少调试符号(-g参数)或SO库被strip剥离。确保编译时添加-g选项,并避免使用strip命令,以便在gdb中使用i locals和i args查看详细信息。通过file命令可以检查SO库是否被strip处理过。
摘要由CSDN通过智能技术生成

       我们已经很熟悉用gdb来调试core了, 对于一个完整的core(需要有对应的so), 调试core很简单, 但最近遇到这样一个问题:

       用gdb调试过, 能查到core在哪个函数里面, 但是, 无法知道core在哪一行, 用i locals, i args查询显示No symbol table info available, 也就是没法显示对应的栈变量, 这是什么原因呢? 原因有二(我亲自玩过并验证过奋斗):

      1.  编译的时候, 没有调试符号信息, 如-g参数

      2.  编译出so库之后, 被strip命令脱了衣服(关于strip命令, 我们已经在之前的博文中讲过了, 故不再赘述)


      所以, gdb调试core时能用i locals看栈变量、函数行(即不出现No symbol table info available)的必要条件

      1. 编译时有-g参数; 

      2. so库没有被strip脱衣服


      最近遇到gdb调试core时能看到栈变量、函数行(也就是不出现No symbol table info available)的问题, 恰好是因为so库被strip命令脱衣服了。  

(gdb) i locals
No sym
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值