GDB 无法读取它生成的核心文件
Posted
技术标签:
【中文标题】GDB 无法读取它生成的核心文件【英文标题】:GDB is not able to read the core file it produced 【发布时间】:2020-03-30 08:04:14 【问题描述】:我正在调试在 Yocto/ARM64 (iMX8QM) 上运行的大型应用程序的 SIGSEGV 错误。
如果我在 GDB 中运行应用程序,我可以获得回溯:
Thread 1 "HmiAppCentral" received signal SIGSEGV, Segmentation fault.
0x0000000000b0a0d0 in kanzi::Node3D::~Node3D() ()
(gdb) bt
#0 0x0000000000b0a0d0 in kanzi::Node3D::~Node3D() ()
#1 0x0000000000cd4e44 in kanzi::Model3D::~Model3D() ()
#2 0x0000000000b09c38 in kanzi::Node3D::removeChild(unsigned long) ()
[...]
然后我导出核心转储,退出 GDB 并重新启动它:
(gdb) generate-core-file
warning: target file /proc/2279/cmdline contained unexpected null characters
[...]
gdb -c core.2279
那么 GDB 就不能再打印回溯了:
(gdb) bt full
#0 0x0000000000b0a0d0 in ?? ()
No symbol table info available.
#1 0x0000000000000001 in ?? ()
No symbol table info available.
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
第一帧的地址是正确的 (0x0000000000b0a0d0),但是 GDB 在重新加载核心转储时找不到函数名。有什么提示吗?
【问题讨论】:
【参考方案1】:就像操作系统创建一个核心文件时一样,核心文件本身并不包含原始程序可执行文件,而是这个可执行文件包含调试信息(或允许 GDB 找到调试信息)。
这意味着,如果您想使用调试信息进行调试,那么您需要同时提供可执行文件和核心文件,例如:
gdb my_program.exe -c core.pid
【讨论】:
以上是关于GDB 无法读取它生成的核心文件的主要内容,如果未能解决你的问题,请参考以下文章
尝试将 /proc/kallsyms 添加到 gdb 以进行 vmlinux 调试:`/proc/kallsyms':无法读取符号:文件格式无法识别