我们已经很熟悉用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