gdb常用調試命令以及多線程堆棧的查看
GDB是GNU開源組織發布的一個強大的UNIX下的程序調試工具。或許,各位比較喜歡那種圖形界面方式的,像VC、BCB等IDE的調試,但如果你是在UNIX平臺下做軟件,你會發現GDB這個調試工具有比VC、BCB的圖形化調試器更強大的功能。所謂“寸有所長,尺有所短”就是這個道理。
一般來說GDB主要調試的是C/C++的程序。要調試C/C++的程序,首先在編譯時,我們必須要把調試信息加到可執行文件中。使用編譯器(cc/gcc/g++)的 -g 參數可以做到這一點。如:
> cc -g hello.c -o hello
> g++ -g hello.cpp -o hello
gdb +程序名 運行(gdb main)
使用 "--tui" 參數,可以在終端窗口上部顯示一個源代碼查看窗。
gdb --tui main
list(l) 查看最近10行源碼
list fun 查看fun函數源碼
list file:fun 查看file文件中的fun函數源碼
list num1 num2 查看num1~num2行的源碼
break 行號
break fun 在函數處設置斷點
break file:行號
break file:fun
break if <condition> 條件成立時程序停住
info break (i b)查看斷點
watch expr 當expr的值發生改變時,程序停住
delete n 刪除斷點
run/r 啟動程序
continue(c) 運行至下一個斷點
step(s) 單步跟蹤,進入函數
next(n) 單步跟蹤,不進入函數
finish 運行程序,直到當前函數完成返回,并打印函數返回時的堆棧地址和返回值及參數信息
until 運行程序直到程序退出循環體
print i (p i) 查看變量的值
ptype 查看變量類型
print array 查看數組
print *array@len 查看動態內存
print x=5 改變運行時的數據
print &array 查看數組的地址
回車代表上一個命令
core文件
在程序崩潰時,一般會生成一個文件叫core文件。core文件記錄的是程序崩潰時的內存映像,并加入調試信息。core文件生成的過程叫做core dump
設置生成core文件
ulimit -c 查看core-dump狀態
ulimit -c 數字
ulimit -c unlimited
gdb利用core文件調試
gdb 文件名 core文件
Backtrace(bt) 查看堆棧
多線程調試
info threads 顯示當前可調試的所有線程
thread ID 切換當前調試的線程為指定ID的線程
attach process-id 在gdb狀態下,開始調試一個正在運行的進程
thread apply all command 所有線程執行command
下面給大家一個好玩的多線程程序,答案就在某個線程的堆棧中,先不要看下面的答案,自己試著用gdb玩一下哈(Linux 64bit)。
http://download.csdn.net/detail/nk_test/9452236
答案在下面圖中,先不要看。。
The answer is orangutan.
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成