coredump debug

📅 2026/7/8 4:00:32
coredump debug
本文是针对嵌入式QNX系统中遇到进程异常退出并生成coredump文件后如何debug排查问题做简单的描述。根据以下步骤进行排查。环境背景嵌入式板子QNX系统 debug系统是ubuntu22.4两系统通过ssh通讯。QNX 用户名:root IP192.168.1.1core文件夹路径/coredump 进程名process_name core文件名process_name.core Ubuntu22.4 路径:Ubuntu 系统中的core文件夹 gbd:qnx gbd:aarch64-nto-qnx8.0.0-gdbstep1从板端QNX copy core 文件到 Ubuntu, 在Ubuntu终端输入core$ scp root192.168.1.1:/coredump/process_name.core./copy 对应版本的可执行文件core$ scp root192.168.1.1:/path/to/process_name./copy 对应版本的动态库(如果程序依赖动态库也需要将板端对应版本的 .so 拷贝到 Ubuntu。)core$ scp root192.168.1.1:/lib/* ./lib/使用 file 确认架构和 debug 信息core$ file process_name//如显示:ELF 64-bit LSB pie executable, ARM aarch64, dynamically linked, with debug_info, not stripped/* 架构是 ARM64 / AArch64 程序带 debug 信息 程序未被 strip */core$ file process_name.core//如显示ELF 64-bit LSB core file, ARM aarch64/*说明 core 文件有效并且架构匹配*/使用 gbd:aarch64-nto-qnx8.0.0-gdb 打开 corecore$ aarch64-nto-qnx8.0.0-gdb./process_name./process_name.core//执行成功会出现:(gbd)设置动态库 solib-search-path 或 sysrootcore$ set solib-search-path./lib//or/*//如果拷贝了完整 rootfs可以使用*/core$ set sysroot./rootfs//orcore$ set solib-search-path./libs:./rootfs/lib:./rootfs/usr/lib然后检查动态库是否加载成功info sharedlibrary/* Yes 表示符号加载成功 No 表示没有加载符号 Yes (*) 可能表示只有动态符号没有完整 debug info*/执行 info threads 查看线程core$ info threads/* Id Target Id F*ame 1 tid 1 MsgSend()*2 tid 2 MsgSend() 3 * tid 3 MsgReceive() ... * tid 9 SignalKill() */带*的线程通常是当前线程也很可能是异常线程执行 thread apply all bt 查看所有线程调用栈core$ thread apply all bt//orcore$ thread apply all bt fu*l//该命令可以查看每个线程 coredump 时停在哪个函数找到异常线程//一般执行完thread apply all bt 指令后会将所有thread 显示出现 在其中找出关键字.//如:signalkill/abort/fatal等//查看异常线程在终端输入:bt full