資源描述:
《gdb單步調(diào)試(中)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、一、設(shè)置斷點(BreakPoint)我們用break命令來設(shè)置斷點。正面有幾點設(shè)置斷點的方法:break在進入指定函數(shù)時停住。C++中可以使用class::function或function(type,type)格式來指定函數(shù)名。break在指定行號停住。break+offsetbreak-offset在當前行號的前面或后面的offset行停住。offiset為自然數(shù)。breakfilename:linenum在源文件filename的linenum行處停住。break
2、filename:function在源文件filename的function函數(shù)的入口處停住。break*address在程序運行的內(nèi)存地址處停住。breakbreak命令沒有參數(shù)時,表示在下一條指令處停住。break...if...可以是上述的參數(shù),condition表示條件,在條件成立時停住。比如在循環(huán)境體中,可以設(shè)置breakifi=100,表示當i為100時停住程序。查看斷點時,可使用info命令,如下所示:(注:n表示斷點號)infobreakpoints[n]infobre
3、ak[n]二、設(shè)置觀察點(WatchPoint)觀察點一般來觀察某個表達式(變量也是一種表達式)的值是否有變化了,如果有變化,馬上停住程序。我們有下面的幾種方法來設(shè)置觀察點:watch為表達式(變量)expr設(shè)置一個觀察點。一量表達式值有變化時,馬上停住程序。rwatch當表達式(變量)expr被讀時,停住程序。awatch當表達式(變量)的值被讀或被寫時,停住程序。infowatchpoints列出當前所設(shè)置了的所有觀察點。三、設(shè)置捕捉點(CatchPoint)你可設(shè)置
4、捕捉點來補捉程序運行時的一些事件。如:載入共享庫(動態(tài)鏈接庫)或是C++的異常。設(shè)置捕捉點的格式為:catch當event發(fā)生時,停住程序。event可以是下面的內(nèi)容:1、throw一個C++拋出的異常。(throw為關(guān)鍵字)2、catch一個C++捕捉到的異常。(catch為關(guān)鍵字)3、exec調(diào)用系統(tǒng)調(diào)用exec時。(exec為關(guān)鍵字,目前此功能只在HP-UX下有用)4、fork調(diào)用系統(tǒng)調(diào)用fork時。(fork為關(guān)鍵字,目前此功能只在HP-UX下有用)5、vfork調(diào)用系統(tǒng)調(diào)用vfork
5、時。(vfork為關(guān)鍵字,目前此功能只在HP-UX下有用)6、load或load載入共享庫(動態(tài)鏈接庫)時。(load為關(guān)鍵字,目前此功能只在HP-UX下有用)7、unload或unload卸載共享庫(動態(tài)鏈接庫)時。(unload為關(guān)鍵字,目前此功能只在HP-UX下有用)tcatch只設(shè)置一次捕捉點,當程序停住以后,應(yīng)點被自動刪除。四、維護停止點上面說了如何設(shè)置程序的停止點,GDB中的停止點也就是上述的三類。在GDB中,如果你覺得已定義好的停止點沒有用了,
6、你可以使用delete、clear、disable、enable這幾個命令來進行維護。clear清除所有的已定義的停止點。clearclear清除所有設(shè)置在函數(shù)上的停止點。clearclear清除所有設(shè)置在指定行上的停止點。delete[breakpoints][range...]刪除指定的斷點,breakpoints為斷點號。如果不指定斷點號,則表示刪除所有的斷點。range表示斷點號的范圍(如
7、:3-7)。其簡寫命令為d。比刪除更好的一種方法是disable停止點,disable了的停止點,GDB不會刪除,當你還需要時,enable即可,就好像回收站一樣。disable[breakpoints][range...]disable所指定的停止點,breakpoints為停止點號。如果什么都不指定,表示disable所有的停止點。簡寫命令是dis.enable[breakpoints][range...]enable所指定的停止點,breakpoints為停止點號。enable[breakpoints
8、]oncerange...enable所指定的停止點一次,當程序停止后,該停止點馬上被GDB自動disable。enable[breakpoints]deleterange...enable所指定的停止點一次,當程序停止后,該停止點馬上被GDB自動刪除。五、停止條件維護前面在說到設(shè)置斷點時,我們提到過可以設(shè)置一個條件,當條件成立時,程序自動停止,這是一個非常強大的功能,這里,我想專門說說這個條件的相關(guān)維護命令。一