啓動GDB後,首先就是要設置斷點,程序中斷後才能調試。在gdb中,斷點一般有三種形式:函數
斷點(BreakPoint):操作系統
在代碼的指定位置中斷,這個是咱們用得最多的一種。設置斷點的命令是break,它一般有以下方式:線程
能夠經過info breakpoints [n]命令查看當前斷點信息。此外,還有以下幾個配套的經常使用命令:調試
觀察點(WatchPoint):進程
在變量讀、寫或變化時中斷,這類方式經常使用來定位bug。事件
能夠經過info watchpoints [n]命令查看當前觀察點信息it
捕捉點(CatchPoint):io
捕捉點用來補捉程序運行時的一些事件。如:載入共享庫(動態連接庫)、C++的異常等。一般也是用來定位bug。event
捕捉點的命令格式是:catch <event>,event能夠是下面的內容function
另外,還有一個tcatch <event>,功能相似,不過他只設置一次捕捉點,當程序停住之後,應點被自動刪除。
捕捉點信息的查看方式和代碼斷點的命令是同樣的,這裏就很少介紹了。
在特定線程中中斷
你能夠定義你的斷點是否在全部的線程上,或是在某個特定的線程。GDB很容易幫你完成這一工做。
linespec指定了斷點設置在的源程序的行號。threadno指定了線程的ID,注意,這個ID是GDB分配的,你能夠經過"info threads"命令來查看正在運行程序中的線程信息。若是你不指定thread <threadno>則表示你的斷點設在全部線程上面。你還能夠爲某線程指定斷點條件。如:
(gdb) break frik.c:13 thread 28 if bartab > lim
當你的程序被GDB停住時,全部的運行線程都會被停住。這方便你你查看運行程序的整體狀況。而在你恢復程序運行時,全部的線程也會被恢復運行。那怕是主進程在被單步調試時。
恢復程序運行和單步調試
在gdb中,和調試步進相關的命令主要有以下幾條:
PS:這些命令大部分能夠簡寫爲第一個字母,在平常使用過程當中,每每只會輸入第一個字符便可執行該命令,我標紅的便是一般的使用方式。這幾條命令使用很是頻繁,而且能夠帶一些附加參數以實現高級功能,須要熟練掌握。