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