資源描述:
《linux應(yīng)用程序開發(fā)指南之21-18.pdf》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、下載第四部分調(diào)試工具第18章程序調(diào)試將glib函數(shù)庫(kù)、Gtk+構(gòu)件庫(kù)、Gnome庫(kù)和GCC編譯器結(jié)合起來(lái)可以用來(lái)開發(fā)非常復(fù)雜的應(yīng)用程序,足以滿足絕大多數(shù)的商業(yè)應(yīng)用。但是這些還不足以成為一個(gè)完整的開發(fā)平臺(tái)。還需要一個(gè)高效的調(diào)試器,特別是對(duì)較大型的應(yīng)用程序,這一點(diǎn)更為重要。Linux包含了一個(gè)叫g(shù)db的GNU調(diào)試程序。gdb可以用來(lái)調(diào)試使C、C++以及Modula-2語(yǔ)言開發(fā)的程序;根據(jù)gdb維護(hù)者的計(jì)劃,今后還將支持Fortran語(yǔ)言。gdb是一個(gè)強(qiáng)勁的調(diào)試器,提供了非常復(fù)雜的調(diào)試功能。它不僅能夠用來(lái)調(diào)試GUI應(yīng)用程序,還可以用來(lái)調(diào)試非GUI的程序、守護(hù)程序,甚至還可以
2、將gdb與正在運(yùn)行的進(jìn)程連接起來(lái)進(jìn)行調(diào)試??梢杂胓db在程序運(yùn)行時(shí)觀察程序的內(nèi)部結(jié)構(gòu)和內(nèi)存的使用情況。gdb是基于字符的調(diào)試器;同時(shí),還有一個(gè)圖形界面的gdb版本,稱為xxgdb。實(shí)際上,xxgdb是將gdb做了一個(gè)封裝,并提供了一個(gè)圖形接口,內(nèi)部使用的還是gdb。gdb是GNU項(xiàng)目的一部分,它是基于GPL許可協(xié)議的。也就是說(shuō),只要遵從GPL協(xié)議,就可以自由使用、修改、發(fā)布,且不需要為之付費(fèi)。下面是gdb和xxgdb所提供的一些功能:¥監(jiān)視程序中變量的值。¥設(shè)置斷點(diǎn)以使程序在指定的代碼行上停止執(zhí)行。¥讓程序在指定條件下停止下來(lái),檢查程序的運(yùn)行情況、表達(dá)式或變量的變化。
3、¥可以逐行執(zhí)行程序代碼。¥運(yùn)行中改變程序代碼,可以直接體驗(yàn)修正bug后的效果。這里我們先介紹gdb,然后再介紹xxgdb。18.1用gdb調(diào)試應(yīng)用程序18.1.1為調(diào)試程序做準(zhǔn)備一般大多數(shù)Linux的發(fā)布版本都包含了gdb。安裝時(shí)若選擇“全部安裝”或“安裝為開發(fā)工作站”,就會(huì)安裝gdb程序。在shell提示符下輸入以下命令:whichgdb如果安裝了gdb,將會(huì)返回gdb的安裝路徑,一般是/usr/bin/gdb,否則會(huì)什么也不顯示??梢栽贚inux發(fā)布版本的光盤上找到gdb的安裝文件,一般是gdb-4.18.rpm或者gdb-4.18.tar.gz。安裝方法和普通的
4、應(yīng)用程序的安裝方法一樣,這里就不做介紹了。要用gdb調(diào)試應(yīng)用程序,當(dāng)然首先得有應(yīng)用程序。所以,要保證編寫的應(yīng)用程序沒(méi)有語(yǔ)法錯(cuò)誤,并且已經(jīng)調(diào)試通過(guò)。同時(shí),為了使gdb正常工作,必須使程序在編譯時(shí)包含調(diào)試信息。284使用第四部分調(diào)試工具下載調(diào)試信息包含了程序里的每個(gè)變量的類型和在可執(zhí)行文件里的地址映射以及源代碼的行號(hào)。gdb利用這些信息使源代碼和機(jī)器碼相關(guān)聯(lián)。在編譯時(shí)用-g選項(xiàng)打開調(diào)試選項(xiàng)。18.1.2獲得gdb幫助在命令行上輸入gdb并按回車鍵就可以運(yùn)行g(shù)db了,如果一切正常的話,將啟動(dòng)gdb,可以在屏幕上看到類似的內(nèi)容:GNUgdb4.18Copyright1998F
5、reeSoftwareFoundation,Inc.GDBisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouarewelcometochangeitand/ordistributecopiesofitundercertainconditions.Type"showcopying"toseetheconditions.ThereisabsolutelynowarrantyforGDB.Type"showwarranty"fordetails.ThisGDBwasconfiguredas"i586-pc-li
6、nux-gnu".(gdb)啟動(dòng)gdb后,可以在命令行上指定很多的選項(xiàng)。輸入:help你可以獲得gdb的幫助信息。如果想要了解某個(gè)具體命令(比如break)的幫助信息,在gdb提示符下輸入下面的命令:helpbreak屏幕上會(huì)顯示關(guān)于break的幫助信息。從返回的信息得知,break是用于設(shè)置斷點(diǎn)的命令。另一個(gè)獲得gdb幫助的方法是瀏覽gdb的手冊(cè)頁(yè)。在LinuxShell提示符下輸入:mangdb可以看到gdb的手冊(cè)頁(yè)。18.1.3gdb常用命令還可以用下面的方式來(lái)運(yùn)行g(shù)db:gdbfilename其中,filename是要調(diào)試的可執(zhí)行文件。用這種方式運(yùn)行g(shù)db時(shí)可
7、以直接指定想要調(diào)試的程序。這和啟動(dòng)gdb后執(zhí)行filefilename命令效果完全一樣。你也可以用gdb去檢查一個(gè)因程序異常終止而產(chǎn)生的core文件,或者與一個(gè)正在運(yùn)行的程序相連。gdb支持很多的命令,還可以實(shí)現(xiàn)不同的功能。這些命令包含從簡(jiǎn)單的文件裝入到允許檢查所調(diào)用的堆棧內(nèi)容的復(fù)雜命令。下表列出了在使用gdb進(jìn)行調(diào)試時(shí)會(huì)用到的一些命令。想了解gdb的詳細(xì)使用情況請(qǐng)參考gdb的手冊(cè)頁(yè)。file命令:裝入想要調(diào)試的可執(zhí)行文件。例如:filemyapp裝入名為myapp的應(yīng)用程序。要注意,必須指定要裝入程序的完全路徑,或者用cd命令將工作目錄轉(zhuǎn)換到mya