GDB 中應該知道的幾個調試方法

一、多線程調試

多線程調試可能是問得最多的。其實,重要就是下面幾個命令:

  1. 編譯程序員是否加上了 - g 參數以包含 debug 信息。

  2. 路徑是否設置正確了。使用 GDB 的 directory 命令來設置源文件的目錄。

四、條件斷點

條件斷點是語法是:break  [where] if [condition],這種斷點真是非常管用。尤其是在一個循環或遞歸中,或是要監視某個變量。注意,這個設置是在 GDB 中的,只不過每經過那個斷點時 GDB 會幫你檢查一下條件是否滿足。

五、命令行參數

有時候,我們需要調試的程序需要有命令行參數,很多朋友都不知道怎麼設置調試的程序的命令行參數。其實,有兩種方法:

  1. gdb 命令行的 –args 參數

  2. gdb 環境中 set args 命令。

六、gdb 的變量

有時候,在調試程序時,我們不單單只是查看運行時的變量,我們還可以直接設置程序中的變量,以模擬一些很難在測試中出現的情況,比較一些出錯,或是 switch 的分支語句。使用 set 命令可以修改程序中的變量。

另外,你知道 gdb 中也可以有變量嗎?就像 shell 一樣,gdb 中的變量以 $ 開頭,比如你想打印一個數組中的個個元素,你可以這樣:

(gdb) set **$i** = 0

(gdb) p a[**$i**++]

...  # 然後就一路回車下去了

當然,這裏只是給一個示例,表示程序的變量和 gdb 的變量是可以交互的。

七、x 命令

也許,你很喜歡用 p 命令。所以,當你不知道變量名的時候,你可能會手足無措,因爲 p 命令總是需要一個變量名的。x 命令是用來查看內存的,在 gdb 中 “help x” 你可以查看其幫助。

八、command 命令

有一些朋友問我如何自動化調試。這裏向大家介紹 command 命令,簡單的理解一下,其就是把一組 gdb 的命令打包,有點像字處理軟件的 “宏”。下面是一個示例:

(gdb) **break** func

Breakpoint 1 at 0x3475678: file test.c, line 12.

(gdb) command 1

Type commands **for** when breakpoint 1 is hit, one per line.

End with a line saying just "end".

\>print arg1

\>print arg2

\>print arg3

\>end

(gdb)

當我們的斷點到達時,自動執行 command 中的三個命令,把 func 的三個參數值打出來。

版權聲明:本文來源網絡,免費傳達知識,版權歸原作者所有。如涉及作品版權問題,請聯繫我進行刪除。原文:https://coolshell.cn/articles/3643.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/KXSV0AjVHNBOTgcIE17XbQ