GDB是GNU開源組織發佈的一個強大的UNIX下的程序調試工具。或許,各位比較喜歡那種圖形界面方式的,像VC、BCB等IDE的調試,但若是你是在UNIX平臺下作軟件,你會發現GDB這個調試工具備比VC、BCB的圖形化調試器更強大的功能。所謂「寸有所長,尺有所短」就是這個道理。
通常來講,GDB主要幫忙你完成下面四個方面的功能:
●啓動你的程序,能夠按照你的自定義的要求爲所欲爲的運行程序。
●可以讓被調試的程序在你所指定的調置的斷點處停住。(斷點能夠是條件表達式)
●當程序被停住時,能夠檢查此時你的程序中所發生的事。
●動態的改變你程序的執行環境。
調試指令:
gdb+a.out
l :從main函數開始開始
l + 行號
l + 函數名
b + 行號:設斷點
b + 函數名
i b:查看斷點信息
r:執行(有斷點則在第一個斷點處停下來)
n:單步向下執行
s:單步執行,且能夠進入函數
print +內容:打印內容
whatis +內容:查看該內容的類型
d +編號:刪除編號處(不是行號)的斷點。
b +行號 if i==9:設置條件斷點
finish:執行到當前函數返回處(退出函數)
bt:打印棧幀關係
●啓動你的程序,能夠按照你的自定義的要求爲所欲爲的運行程序。
●可以讓被調試的程序在你所指定的調置的斷點處停住。(斷點能夠是條件表達式)
●當程序被停住時,能夠檢查此時你的程序中所發生的事。
●動態的改變你程序的執行環境。
調試指令:
gdb+a.out
l :從main函數開始開始
l + 行號
l + 函數名
b + 行號:設斷點
b + 函數名
i b:查看斷點信息
r:執行(有斷點則在第一個斷點處停下來)
n:單步向下執行
s:單步執行,且能夠進入函數
print +內容:打印內容
whatis +內容:查看該內容的類型
d +編號:刪除編號處(不是行號)的斷點。
b +行號 if i==9:設置條件斷點
finish:執行到當前函數返回處(退出函數)
bt:打印棧幀關係
首先直接列出問題及其解決方法:設置a.cpp:1234這樣的斷點後(斷點位於.so文件中),gdb知道停在哪一個函數,並可以停下來,可是沒法顯示源文件名及行號,也沒法看到源碼。明顯是gdb有問題或者是調試信息有問題,我試遍了-g , -gstabs , -ggdb , -gstabs+參數,最終,-gstabs+參數能夠和個人gdb完美配合,輸出了我想要的東西,可以在debug的時候正確的看到函數名,行號,並能正確的看到源代碼。這段話是在我解決問題以後添加在原文章以前的。供快速參考。好了,如今來看一個通常性的問題:有時候在用gdb調試程序的時候,發現gdb找不到源碼。用list命令無效。記住: gdb的調試信息中並不包含源碼,只是包含了怎樣去尋找源碼,可是由於某種緣由,好比你的源碼轉移了位置或者別的緣由。你須要告訴gdb到哪裏去尋找源碼。這個經過directory命令來實現。 要查看當前gdb尋找源碼的路徑:show directories添加一個新的路徑到查找路徑:dir dirname添加多個時,個dirname用: 分開。詳細見 : http://ftp.gnu.org/old-gnu/Manuals/gdb-5.1.1/html_node/gdb_48.html 另外:有時候發現調試信息不正確,或者沒有調試信息,而gcc在編譯的時候使用的參數爲-g ,這時,能夠個參數-g 該爲-gstabs 就能夠了。 我如今碰到的就是這種狀況,具體緣由還不是很清楚。當利用-gstabs編譯之後,程序在停下來的時候,會顯示函數堆棧,每一個棧會顯示源文件以及行數,可是源代碼仍是列不出來,緣由是directory尚未設好 。後來發現-gstabs編譯後,有些源碼的位置被弄錯了。繼續嘗試-gstabs+ , 最終纔看到指望的效果。 須要後續的去了解下這幾個參數以前的區別以及爲何要這麼用。 --------------------- 做者:sunxiaopengsun 來源:CSDN 原文:https://blog.csdn.net/sunxiaopengsun/article/details/79445300 版權聲明:本文爲博主原創文章,轉載請附上博文連接! --------------------- 做者:龍躍十二 來源:CSDN 原文:https://blog.csdn.net/qq_38646470/article/details/79901401 版權聲明:本文爲博主原創文章,轉載請附上博文連接!