国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Linux服務(wù)器 > 正文

Linux調(diào)試工具GDB使用簡易教程

2024-09-05 23:04:33
字體:
供稿:網(wǎng)友

本文所述主要是Linux調(diào)試工具GDB的使用教程,具體如下。

聲明:本博客內(nèi)容是由本人經(jīng)過實(shí)驗(yàn)樓教程整理得來。

GDB的相關(guān)概念

GDB, 是 The GNU Project Debugger 的縮寫, 是 Linux 下功能全面的調(diào)試工具。GDB 支持?jǐn)帱c(diǎn)、單步執(zhí)行、打印變量、觀察變量、查看寄存器、查看堆棧等調(diào)試手段。在 Linux 環(huán)境軟件開發(fā)中,GDB 是主要的調(diào)試工具,用來調(diào)試 C 和 C++ 程序。

GDB的相關(guān)操作

下面給出一個(gè)具有buging.c的程序:

[yqtao@localhost linux/198892.html">linux]$ cat buging.c #include <stdio.h>int getSum(int n) {    int sum=0,i;    for (i=1;i<=n;i++)        sum+=i;    return sum;}int main(){    int res=getSum(100);    printf("1+2+...+100=%d/n",res);}

如果要調(diào)試程序,則在進(jìn)行g(shù)cc編譯的時(shí)候要加上-g參數(shù)

gcc -g -o bugging bugging.c

進(jìn)入gdb:

gdb buging

部分gdb命令:

linux,gdb調(diào)試工具,gdb使用,如何使用gdb,ubuntu,gdb調(diào)試

// 查看源碼// 查看第幾行附近// 可簡寫成l 2(gdb) list 2   1    #include <stdio.h>2    int getSum(int n) {3        int sum=0,i;4        for (i=1;i<=n;i++)5            sum+=i;6        return sum;7    }// 查看main函數(shù)附近的源碼(gdb) list main3        int sum=0,i;4        for (i=1;i<=n;i++)5            sum+=i;6        return sum;7    }8    int main(){9        int res=getSum(100);10       printf("1+2+...+100=%d/n",res);11   }// 設(shè)置斷點(diǎn)// break +n在第幾行設(shè)斷點(diǎn)(gdb) break 8Breakpoint 1 at 0x4004fa: file buging.c, line 8.// break +函數(shù)名 ,在函數(shù)名處設(shè)斷點(diǎn)(gdb) break getSumBreakpoint 2 at 0x4004cb: file buging.c, line 3.//查看斷點(diǎn)信息(gdb) info breakpoints Num   Type      Disp Enb Address      What1    breakpoint   keep y  0x00000000004004fa in main at buging.c:82    breakpoint   keep y  0x00000000004004cb in getSum at buging.c:3

斷點(diǎn)信息中每一項(xiàng)的信息:

1.Num 列代表斷點(diǎn)編號(hào),該編號(hào)可以作為 delete/enalbe/disable 等控制斷點(diǎn)命令的參數(shù)
2.Type 列代表斷點(diǎn)類型,一般為 breakpoint
3.Disp 列代表斷點(diǎn)被命中后,該斷點(diǎn)保留(keep)、刪除(del)還是關(guān)閉(dis)
4.Enb 列代表該斷點(diǎn)是 enable(y) 還是 disable(n)
5.Address 列代表該斷點(diǎn)處虛擬內(nèi)存的地址
6.What 列代表該斷點(diǎn)在源文件中的信息

// 刪除斷點(diǎn)// delete +n 或 d +n// 如果不加數(shù)字則刪除全部的斷點(diǎn)(gdb) d 2(gdb) info breakpoints Num   Type      Disp Enb Address      What1    breakpoint   keep y  0x00000000004004fa in main at buging.c:8

關(guān)閉和啟用斷點(diǎn):

有時(shí)候,我們會(huì)遇到這種情況:有些斷點(diǎn)可能暫時(shí)不用但又不想刪除,那么可以disable.

disable +n //關(guān)閉斷點(diǎn)enable +n  //啟動(dòng)斷點(diǎn)

GDB單步調(diào)試

以本文開頭的buging.c文件為例,進(jìn)行單步調(diào)試。

// 進(jìn)入gdb[yqtao@localhost linux]$ gdb buging// 在main()函數(shù)處設(shè)斷點(diǎn)(gdb) info breakpoints // 運(yùn)行程序(gdb) runBreakpoint 1, main () at buging.c:99        int res=getSum(100);

注意:我們要進(jìn)入函數(shù)要是用step(s),而單步執(zhí)行next(n),next是不進(jìn)入函數(shù)內(nèi)部的,要區(qū)分兩者的關(guān)系。

(gdb) stepgetSum (n=100) at buging.c:44        for (i=1;i<=n;i++)// 查看代碼(gdb) l1    #include <stdio.h>2    int getSum(int n) {3        int sum=0,i;4        for (i=1;i<=n;i++)5            sum+=i;6        return sum;7    }8    int main(){9        int res=getSum(100);10       printf("1+2+...+100=%d/n",res);// 下一步(gdb) s5            sum+=i;// 打印sum的值// 看到sum是為賦初值的(gdb) p sum$1 = 4195633// info locals//打印當(dāng)前斷點(diǎn)處所在函數(shù)的所有局部變量的值,不包括函數(shù)參數(shù)。(gdb) info localssum = 4195635i = 3

其余的一些命令:

finish

執(zhí)行程序到當(dāng)前函數(shù)結(jié)束

continue

執(zhí)行程序到下個(gè)斷點(diǎn)

until

until N,執(zhí)行程序到源代碼的某一行

總結(jié)

以上就是本文關(guān)于Linux調(diào)試工具GDB使用簡易教程的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 彩票| 金昌市| 木兰县| 永清县| 湛江市| 昭平县| 丹阳市| 梅州市| 昌吉市| 达拉特旗| 龙门县| 岑溪市| 都兰县| 石家庄市| 正蓝旗| 山西省| 广元市| 龙江县| 格尔木市| 钟山县| 斗六市| 阳东县| 浦北县| 柳河县| 都兰县| 额尔古纳市| 许昌市| 礼泉县| 紫云| 中卫市| 五峰| 威远县| 五莲县| 宿松县| 黔江区| 辉县市| 蒲城县| 都安| 东阿县| 连州市| 东海县|