gdb除錯技巧
前言
我們知道,在linux環境下除錯**是不輕鬆的,至少很多ide整合開發環境下的除錯工具都比linux下的除錯要好用。但是linux也有像gdb這樣的工具,幫助我們進行相對方便的除錯。
使用-g選項允許gdb除錯
我們在linux環境下編譯**時,預設生成的可執行檔案是沒有辦法使用 gdb 進行除錯的,
但是我們在編譯選項裡輸入 -g選項,就可以使用gdb進行除錯了
print/p ==>除錯中 檢視變數的值
break/b + n ==> 給某個位置的**打斷點,引數可以是行號也可以是乙個函式
info b ==> 檢視整個**的斷點資訊
run/r ==> 開始執行
continue/c ==> 繼續執行
quit/q ==>退出gdb
next/n ==>單步執行(逐過程)
step/s ==>單步執行(逐語句)
⭐bt/backtrace ==> 檢視函式呼叫棧幀(基本是除錯過程中必須敲的)
⭐frame/f + n ==>切換到某個棧幀
ulimit -a:檢視檔案大小
ulimit -c unlimited ==》將core檔案的大小調整為不做限制
gdb +(剛才的可執行程式)+ core.pid ==》
快捷鍵技巧:
ctrl + r ==> 快速查詢上次敲的命令 可以加快除錯速度
入門的這些除錯過程都是讓gdb啟動乙個程式(這種除錯方法以後工作中幾乎不會用到)
真實的用法:
1.使用gdb除錯 coredump 檔案。(也稱 事後除錯)
coredump(核心轉儲檔案)就是車禍現場(**),程式崩潰那一瞬間的臨終遺言:
儲存了程式崩潰的那一瞬間,程式執行到哪了,執行狀況怎麼樣的一些資訊。
吐核:就是吐出了核心轉儲檔案(coredump)
2.使用 gdb attach(附加)上乙個程式
todo(程序相關的內容之後)
列印日誌 比偵錯程式會更管用
其他工具
cgdb(在gdb外面套了乙個殼子):
比gdb好用一丟丟,但是還是比不上ide.
GDB除錯技巧
在公司工作了一段時間,發現 b s結構的 除錯很麻煩,經常用的手段是通過 printf 打一串訊息來進行跟蹤,然後估計問題出在 通過逐步新增 printf 語句,獲得越來越多的資訊最終確定問題的根源。我感覺這樣比較麻煩,如果能把 gdb的單步除錯功能用上就好了。工作之餘,做了一定的嘗試,希望對跟我一...
GDB除錯技巧
談到gdb,不能不對他的強大功能所折服,在我所用過的所有偵錯程式中,這實在是乙個強大的除錯工具,今天就說說gdb的簡單用法。gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc bcb等ide的除錯,但如果你是在 unix平台下做軟體,你會發現...
gdb除錯技巧
1 以結構體形式訪問某個記憶體 print type addr 其中type是結構體型別,addr是記憶體的位址 2 顯示符號表 info symbol info symbol symbol addr symbol addr為對應的位址 print 符號名 3 檢視型別的原型定義 有時候在除錯大型程...