gdb除錯小結
1、檢視堆疊
gstack <pid>
2、掛載到正在執行的程序
gdb attach <pid>
3、除錯core檔案
gdb <app> <app.core>
gdb -c <app.core> <app>
4、設定產生core
檢視當前core設定:
a) ulimit -a
b) cat /proc/sys/kernel/core_pattern
開啟core並修改其位置:
a) ulimit -c unlimited
b) echo "/home/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
c) echo "1" > /proc/sys/kernel/core_uses_pid
其中第3個帶pid,第2個帶程式名、pid、時間戳。
注意:該方法是臨時修改,系統重啟後失效。永久修改可以在/etc/sysctl.conf裡面按語法規則追加。
5、常用gdb命令
a) 檢視堆疊(backtrace)
bt
t a a bt
第2個對所有執行緒列印堆疊(thread apply all backtrace)
b) 進入堆疊第3層(frame)
f 3
c) 檢視原始碼片段(list)
list
d) 檢視斷點(info)
info break
e) 設定斷點(break)
b funcA
b 1038
b file.c:funcA
b file.c:1038
b 1038 if i==99
f) 列印變數(print)
p retValue
g) 執行至斷點(run)
r
h) 繼續執行到下個斷點(continue)
c
i) 單步進入函式(step)
s
j) 單步執行(next)
n
k) 跳出函式(finish)
finish
l) 監視變數值變化(watch)
watch p
m) 幫助與退出(quit)
help
q
6、編譯帶除錯資訊的二進位制
gcc -g app a.c b.c
7、生成符號表
objcopy --only-keep-debug app app.symbols
8、用gdb拉起程序
gdb --args app p1 p2 p3
gdb -s app.symbols -e app