這里介紹如何用Coredump文件查找崩潰的位置,使用的工具是gdb。另外一種調(diào)試Coredump問題的方便的辦法,是使用backtrace()等相關函數(shù)。
1. 生成Debug版本軟件包
使用選項CMAKE_BUILD_TYPE編譯工程生成程序和庫。
$ cmake -DCMAKE_BUILD_TYPE=Debug .
用cpack工具生成軟件包mypkg.tar.gz。
$ cpack -c CPackConfig.cmake
2. 設置Linux生成Core
core文件的名稱格式是core - <程序名> - <pid>。
$ ulimit -c unlimited
$ echo core-%e-%p > /proc/sys/kernel/core_pattern
3. 生成Core文件
- 在目標板上解開mypkg發(fā)布包:
/opt/mypkg/bin
/opt/mypkg/lib
- 運行軟件包,得到core文件,并復制回宿主機。如:
/home/ronzheng/core.myapp.1234
5. 調(diào)試
- 在宿主機中解開mypkg.tar.gz,解開的位置應該包含目標板上位置的全路徑,這里是/opt/mypkg。
/home/ronzheng/opt/mypkg
- 加載app和core。
$ arm-linux-gnueabi-gdb /home/ronzheng/opt/mypkg/bin/myapp /home/ronzheng/core.myapp.1234
- 加載動態(tài)庫的符號
設置sysroot:
(gdb) set sysroot /home/ronzheng
查看動態(tài)庫是否加載成功。
(gdb) info sharedlibrary
- 查看coredump的位置
(gdb) bt
相關鏈接
GDB 常用法
GDB 調(diào)試Coredump問題
嵌入式開發(fā)中GDB調(diào)試Coredump問題
嵌入式開發(fā)中GDB串口遠程調(diào)試
用backtrace()調(diào)試coredump問題
Valgrind memcheck 用法
Address Sanitizer 用法