資源描述:
《gdb調(diào)試簡(jiǎn)易教程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、GDB調(diào)試方法與技巧劉鵬昊GDB簡(jiǎn)介:調(diào)試器(例如GDB)能讓你觀察一個(gè)程序在執(zhí)行時(shí)的內(nèi)部活動(dòng),或者程序出錯(cuò)時(shí)發(fā)生了什么GDB主要能為你做四件事情:運(yùn)行你的程序,設(shè)置所有的能影響程序運(yùn)行的東西保證你的程序在指定的條件下停止當(dāng)你程序停止時(shí),讓你檢查發(fā)生了什么改變你的程序。那樣你可以試著修正某個(gè)bug引起的問(wèn)題,然后繼續(xù)查找另一個(gè)bug啟動(dòng):最通常的命令就是使用一個(gè)參數(shù):$(m68k-linux-)gdb<可執(zhí)行文檔名>你還可以同時(shí)為你的執(zhí)行文件指定一個(gè)core文件:$gdb<可執(zhí)行文件名>core你也可以為你要執(zhí)行的文件指定一個(gè)進(jìn)程
2、號(hào):$gdb<可執(zhí)行文件名><進(jìn)程號(hào)>常用啟動(dòng)參數(shù):-symbols<文件名>(-s<文件名>)從<文件名>中讀去符號(hào)-x<文件名>執(zhí)行g(shù)db命令,在<文件名>指定的文件中存放著一序列的gdb命令,就象一個(gè)批處理-directory(-d)<路徑>指定路徑。把<路徑>加入到搜索源文件的路徑中常用啟動(dòng)參數(shù):-quiet(-q)安靜模式,不輸出介紹和版權(quán)信息-x<文件名>執(zhí)行g(shù)db命令,在<文件名>指定的文件中存放著一序列的gdb命令,就象一個(gè)批處理-directory(-d)<路徑>指定路徑。把<路徑>加入到搜索源文件的路徑中結(jié)束:
3、quit直接退出gdbdetach放棄連接Shell命令:shell啟動(dòng)一個(gè)shell執(zhí)行,不用退出GDB就可以執(zhí)行一個(gè)shell命令make[make-args]使用[make-args]進(jìn)行make相當(dāng)于`shellmakemake-args'GDB命令命令輸入技巧:可以把一個(gè)gdb命令縮寫成開頭幾個(gè)字母,如果這沒(méi)有二意性你可以直接回車來(lái)運(yùn)行。如果有不止一個(gè)選擇的話,你還可以使用TAB鍵讓gdb給你完成接下來(lái)的鍵入,或向你顯示可選擇的命令使用helphelp[clas
4、s]顯示某一類命令的列表$helpstatusStatusinquiries.Listofcommands:show--Genericcommandforshowingthingsset??????????with"set"info--GenericcommandforprintingstatusGDB命令(使用help)help[COMMAND]列出某個(gè)命令的使用方法complete列出所有以ARGS開頭的命令‘info’(可以縮寫為‘i’)用來(lái)顯示你程序的狀態(tài)。比如,你可以使用infoargs列出你程序所接
5、受的命令行參數(shù)。使用inforegisters列出寄存器的狀態(tài)。‘show’與‘info’相反,‘show’命令用來(lái)顯示gdb自身的狀態(tài)例如showversion顯示版本號(hào),showcopying顯示版權(quán)信息GDB下運(yùn)行程序程序編譯:當(dāng)你在gdb下運(yùn)行程序時(shí),你必須先為gdb準(zhǔn)備好帶有調(diào)試信息的可執(zhí)行文檔。為了高效的調(diào)試一個(gè)程序,你需要使用編譯器來(lái)產(chǎn)生附帶調(diào)試信息的可執(zhí)行代碼這些調(diào)試信息存儲(chǔ)在目標(biāo)文件中;描述了變量數(shù)據(jù)類型和函數(shù)聲明,在源文件代碼行和執(zhí)行代碼之間建立聯(lián)系。為產(chǎn)生調(diào)試信息,當(dāng)你使用編譯器時(shí)指定'-g'選項(xiàng),就可以為
6、你的程序產(chǎn)生帶有調(diào)試信息的可執(zhí)行代碼GDB下運(yùn)行程序Run命令:用于啟動(dòng)你的程序,使用命令前必須先指定你程序的名字(用gdb的命令行參數(shù))或使用‘file’命令,來(lái)指定文件名工作路徑:每次用‘run’命令來(lái)運(yùn)行程序時(shí),程序?qū)⒗^承g(shù)db的當(dāng)前工作目錄。而gdb的工作目錄是從它的父進(jìn)程繼承而來(lái)的(一般是shell)。但你可以自己使用‘cd’命令指定工作目錄。gdb的工作目錄就是它去尋找某些文件或信息的途徑。`cdDIRECTORY'把gdb的工作目錄設(shè)為DIRECTORY`pwd'打印輸出當(dāng)前目錄GDB下運(yùn)行程序調(diào)試一個(gè)已經(jīng)運(yùn)行的程序
7、:attach這個(gè)命令把一個(gè)已經(jīng)運(yùn)行的進(jìn)程(在gdb外啟動(dòng))連接入gdb,以便調(diào)試。PROCESS-ID是進(jìn)程號(hào)。當(dāng)然要使用‘a(chǎn)ttach’命令的話,你的操作系統(tǒng)環(huán)境必須支持進(jìn)程。另外你還要有向此進(jìn)程發(fā)信號(hào)的權(quán)力。交叉調(diào)試環(huán)境:目標(biāo)板:gdbserver:port–attach調(diào)試端:targetremoteip:port停止調(diào)試:detachGDB下運(yùn)行程序調(diào)試一個(gè)多線程的程序:GDB會(huì)自動(dòng)提示新線程創(chuàng)建thread各線程間進(jìn)行切換infothreads查看已經(jīng)
8、存在的線程無(wú)論gdb何時(shí)中斷了你的程序(因?yàn)橐粋€(gè)斷點(diǎn)或是一個(gè)信號(hào)),它自動(dòng)選擇信號(hào)或斷點(diǎn)發(fā)生的線程為當(dāng)前線程。gdb將用一個(gè)格式為'[SwitchingtoSYSTAG]'的消息來(lái)向你報(bào)告。GDB下運(yùn)行程序調(diào)試多進(jìn)程:GDB對(duì)調(diào)試使用'fork'系