Linux PC應用程式gdb調試: 1、查看core文件參數 yinkui@yinkui-desktop:~/File_unzip/cp_module$ ulimit -a core file size (blocks, -c) 0 //產生core文件數目,不會產生core文件 data seg ...
Linux PC應用程式gdb調試:
1、查看core文件參數
yinkui@yinkui-desktop:~/File_unzip/cp_module$ ulimit -a
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31042
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192 //應用程式棧大小
cpu time (seconds, -t) unlimited
max user processes (-u) 31042
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
2、設置產生core文件大小
ulimit -c unlimited(不限制core文件的大小)
(預設不會現實PID信息,可通過以下命令修改此文件: echo "1" > /proc/sys/kernel/core_uses_pid , 這樣每次程式掛了之後會生成類似 core.8909(8909是當時的進程號), 效果就是後續生成的core文件不會覆蓋之前生成的core文件。)
3、產生段錯誤之後,查看進程信息
gcc -g test.c -o test (設置gdb調試)
ls -l core.*
4、使用gdb調試core文件之前操作 查看core文件信息:file core
5、使用gdb調試core文件 gdb --core=core.PID
(gdb)bt(第一次不會出現堆棧信息)
(gdb)bt(backtrace信息出現)
(可直接使用命令:ulimit -a; ulimit -c unlimited;ulimit -a;echo "1" > /proc/sys/kernel/core_uses_pid)
Linux arm應用程式arm-XXXX-gdb調試:
1、查看core文件參數
yinkui@yinkui-desktop:~/File_unzip/cp_module$ ulimit -a
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31042
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 31042
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
2、設置產生core文件大小
ulimit -c unlimited(不限制core文件的大小)
(預設不會現實PID信息,可通過以下命令修改此文件: echo "1" > /proc/sys/kernel/core_uses_pid , 這樣每次程式掛了之後會生成類似 core.8909(8909是當時的進程號), 效果就是後續生成的core文件不會覆蓋之前生成的core文件。)
3、編譯程式選項
加入gdb可調試選項 arm-linux-XXX -g test.c -o test
4、構建GDB+GDB server nfs調試方法
(1)確保arm開發板與主機支持nfs功能,設置開發板和主機在同一網段,並設置共用目錄(如/mnt/nfs)。 (2)將編譯器對應該的gdbserver和test(可執行文件)拷貝到共用目錄(/mnt/nfs),修改應用程式和 gdbserver許可權為777.
(3)通過telnet或者minicom登陸到開發板,掛在nfs文件系統:mount -t nfs 主機IP:/mnt/nfs(共用目錄) /home/root/modbus_rtu_slave(開發板目錄) -o nolock
(4)進入共用目錄 運行gdbserver建立遠程調試server(格式為: ./gdbserver 主機IP:建立連接的埠號 可執行文件【其中埠號一般1024以上沒有占用即可】,如下) ./gdbserver 10.10.51.47:5000 test
(5)在主機目錄下運行可執行程式:
arm-linux-gdb test
---》target remote 10.10.51.33:5000 (進入gdb調試後運行命令,連接gdbserver)
註釋: set solib-absolute-prefix與set solib-search-path命令分別用於設置GDB共用庫查找路徑首碼與共用庫查找路徑,以阻止GDB查找宿主機上的庫。若不指定這些路徑,遠程調試過程中GDB載入了宿主機的庫,會出現諸如“warning: GDB can't find the start of the function at 0x******”與“Cannot find bounds of current function”等錯誤提示。 文章主要主要來自參考、總結和實踐。