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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM