Linux下C編程基礎(chǔ)之:gdb調(diào)試器
3.4gdb調(diào)試器
調(diào)試是所有程序員都會(huì)面臨的問(wèn)題。如何提高程序員的調(diào)試效率,更好、更快地定位程序中的問(wèn)題從而加快程序開(kāi)發(fā)的進(jìn)度,是大家都很關(guān)注的問(wèn)題。就如讀者熟知的Windows下的一些調(diào)試工具,如VisualStudio自帶的設(shè)置斷點(diǎn)、單步跟蹤等,都受到了廣大用戶的贊賞。那么,在Linux下有什么很好的調(diào)試工具呢?
gdb調(diào)試器是一款GNU開(kāi)發(fā)組織并發(fā)布的UNIX/Linux下的程序調(diào)試工具。雖然,它沒(méi)有圖形化的友好界面,但是它強(qiáng)大的功能也足以與微軟的VisualStudio等工具媲美。下面就請(qǐng)跟隨筆者一步步學(xué)習(xí)gdb調(diào)試器。
3.4.1gdb使用流程
這里給出了一個(gè)短小的程序,由此帶領(lǐng)讀者熟悉gdb的使用流程。建議讀者能夠動(dòng)手實(shí)際操作一下。
首先,打開(kāi)Linux下的編輯器vi或者emacs,編輯如下代碼(由于為了更好地熟悉gdb的操作,筆者在此使用vi編輯,希望讀者能夠參見(jiàn)3.3節(jié)中對(duì)vi的介紹,并熟練使用vi)。
/*test.c*/
#includestdio.h>
intsum(intm);
intmain()
{
inti,n=0;
sum(50);
for(i=1;i=50;i++)
{
n+=i;
}
printf(Thesumof1-50is%dn,n);
}
intsum(intm)
{
inti,n=0;
for(i=1;i=m;i++)
{
n+=i;
printf(Thesumof1-mis%dn,n);
}
}
在保存退出后首先使用gcc對(duì)test.c進(jìn)行編譯,注意一定要加上選項(xiàng)“-g”,這樣編譯出的可執(zhí)行代碼中才包含調(diào)試信息,否則之后gdb無(wú)法載入該可執(zhí)行文件。
[root@localhostgdb]#gcc-gtest.c-otest
雖然這段程序沒(méi)有錯(cuò)誤,但調(diào)試完全正確的程序可以更加了解gdb的使用流程。接下來(lái)就啟動(dòng)gdb進(jìn)行調(diào)試。注意,gdb進(jìn)行調(diào)試的是可執(zhí)行文件,而不是如“.c”的源代碼,因此,需要先通過(guò)gcc編譯生成可執(zhí)行文件才能用gdb進(jìn)行調(diào)試。
[root@localhostgdb]#gdbtest
GNUgdbRedHatLinux(6.3.0.0-1.21rh)
Copyright2004FreeSoftwareFoundation,Inc.
GDBisfreesoftware,coveredbytheGNUGeneralPublicLicense,andyouare
welcometochangeitand/ordistributecopiesofitundercertainconditions.
Typeshowcopyingtoseetheconditions.
ThereisabsolutelynowarrantyforGDB.Typeshowwarrantyfordetails.
ThisGDBwasconfiguredasi386-redhat-linux-gnu...Usinghostlibthread_dblibrary/lib/libthread_db.so.1.
(gdb)
可以看出,在gdb的啟動(dòng)畫(huà)面中指出了gdb的版本號(hào)、使用的庫(kù)文件等信息,接下來(lái)就進(jìn)入了由“(gdb)”開(kāi)頭的命令行界面了。
(1)查看文件。
在gdb中鍵入“l”(list)就可以查看所載入的文件,如下所示。
注意 | 在gdb的命令中都可使用縮略形式的命令,如“l”代表“list”,“b”代表“breakpoint”,“p”代表“print”等,讀者也可使用“help”命令查看幫助信息。 |
(gdb)l
1#includestdio.h>
2intsum(intm);
3intmain()
4{
5inti,n=0;
6sum(50);
7for(i=1;i=50;i++)
8{
9 n+=i;
10}
(gdb)l
11printf(Thesumof1~50is%dn,n);
12
13}
14intsum(intm)
15{
16inti,n=0;
17for(i=1;i=m;i++)
18{
19n+=i;
20}
21printf(Thesumof1~mis=%dn,n);
20}
可以看出,gdb列出的源代碼中明確地給出了對(duì)應(yīng)的行號(hào),這樣就可以大大地方便代碼的定位。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
評(píng)論