GDB(設定斷點)

2021-08-15 01:33:21 字數 1043 閱讀 1598

啟動gdb後,首先就是要設定斷點,程式中斷後才能除錯。在gdb中,斷點通常有三種形式:

斷點(breakpoint):

在**的指定位置中斷,這個是我們用得最多的一種。設定斷點的命令是break,它通常有如下方式:

可以通過info breakpoints [n]命令檢視當前斷點資訊。此外,還有如下幾個配套的常用命令:

觀察點(watchpoint):

在變數讀、寫或變化時中斷,這類方式常用來定位bug。

可以通過info watchpoints[n]

命令檢視當前觀察點資訊

捕捉點(catchpoint):

捕捉點用來補捉程式執行時的一些事件。如:載入共享庫(動態鏈結庫)、c++的異常等。通常也是用來定位bug。

捕捉點的命令格式是:catch 

,event可以是下面的內容

另外,還有乙個tcatch ,功能類似,不過他只設定一次捕捉點,當程式停住以後,應點被自動刪除。

捕捉點資訊的檢視方式和**斷點的命令是一樣的,這裡就不多介紹了。

在特定執行緒中中斷

你可以定義你的斷點是否在所有的執行緒上,或是在某個特定的執行緒。gdb很容易幫你完成這一工作。

linespec指定了斷點設定在的源程式的行號。threadno指定了執行緒的id,注意,這個id是gdb分配的,你可以通過"info threads"命令來檢視正在執行程式中的執行緒資訊。如果你不指定thread 則表示你的斷點設在所有執行緒上面。你還可以為某執行緒指定斷點條件。如:

(gdb) break frik.c:13 thread 28 if bartab > lim

當你的程式被gdb停住時,所有的執行執行緒都會被停住。這方便你你檢視執行程式的總體情況。而在你恢復程式執行時,所有的執行緒也會被恢復執行。那怕是主程序在被單步除錯時。

恢復程式執行和單步除錯

在gdb中,和除錯步進相關的命令主要有如下幾條:

ps:這些命令大部分可以簡寫為第乙個字母,在日常使用過程中,往往只會輸入第乙個字元即可執行該命令,我標紅的即是通常的使用方式。這幾條命令使用非常頻繁,並且可以帶一些附加引數以實現高階功能,需要熟練掌握。

GDB 斷點設定

啟動gdb後,首先就是要設定斷點,程式中斷後才能除錯。在gdb中,斷點通常有三種形式 斷點 breakpoint 在 的指定位置中斷,這個是我們用得最多的一種。設定斷點的命令是break,它通常有如下方式 可以通過info breakpoints n 命令檢視當前斷點資訊。此外,還有如下幾個配套的常...

gdb 斷點設定(二)watch

2 watch watch l location expr thread threadnum mask maskvalue l 與 mask沒有仔細研究,thread threadnum 是在多執行緒的程式中限定只有被執行緒號是threadnum的執行緒修改值後進入斷點。經常用到的如下命令 watc...

Linux程式設計基礎 GDB(設定斷點)

啟動gdb後,首先就是要設定斷點,程式中斷後才能除錯。在gdb中,斷點通常有三種形式 斷點 breakpoint 在 的指定位置中斷,這個是我們用得最多的一種。設定斷點的命令是break,它通常有如下方式 可以通過info breakpoints n 命令檢視當前斷點資訊。此外,還有如下幾個配套的常...