标准的 debian / ubuntu 打 deb 包,通过将可执行文件的符号表通过剥离成独立的 dbg 包,称为 debug package。引用官方对 debug package 的描述:
Debug packages contain debug symbols and usually are named
-dbg. They are useful if program crashes and you want to generate stack trace which contains information about functions where it crashed.
因此如果你的系统使用标准 debian / ubuntu 编译、打包,则一般情况下编译结果会生成一个
如果运行这个包里的可执行文件时 crash 生成 core dump,则 gdb 看不到符号表信息。解决方法:
- 找到与
_version.deb 同时间编译的 -dbg_version.deb,注意,如果是经常自己编译,version 可能是一样的,没有改,需要人工确认两个包是同一次编译生成的。 - 安装
-dbg_version.deb 到目标系统 - gdb your_core_file your_elf 调试 core file,bt full 即可看到对应的符号表。
安装 orchagent dbg 包前,提示 no debugging symbols found
:
1 | root@sonic:~/core# gdb orchagent -dbg orchagent.1516015456.30.core |
安装 orchagent dbg 包后:
1 | root@sonic:~/core# gdb orchagent orchagent.1516015456.30.core |
新版本(debhelper/9.20151219 or newer in Debian)的 debhelper 已经把