GDB无法读取它生成的核心文件

问题描述 投票:0回答:1

我正在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在重装核心转储时找不到函数名称。有提示吗?

gdb coredump arm64
1个回答
0
投票

就像操作系统创建核心文件时一样,原始程序可执行文件不包含在核心文件本身中,而包含调试信息(或允许GDB查找调试信息的正是该可执行文件。)>

这是什么意思,如果您想使用调试信息进行调试,则需要同时提供可执行文件和核心文件,因此类似:

gdb my_program.exe -c core.pid
© www.soinside.com 2019 - 2024. All rights reserved.