一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Linux|Centos|Ubuntu|系統進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統 - Linux - Linux調試工具GDB使用簡易教程

Linux調試工具GDB使用簡易教程

2020-08-28 17:19yqtaowhu Linux

這篇文章主要介紹了Linux調試工具GDB使用簡易教程,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

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

聲明:本博客內容是由本人經過實驗樓教程整理得來。

GDB的相關概念

 

GDB, 是 The GNU Project Debugger 的縮寫, 是 Linux 下功能全面的調試工具。GDB 支持斷點、單步執行、打印變量、觀察變量、查看寄存器、查看堆棧等調試手段。在 Linux 環境軟件開發中,GDB 是主要的調試工具,用來調試 C 和 C++ 程序。

GDB的相關操作

 

下面給出一個具有buging.c的程序:

?
1
2
3
4
5
6
7
8
9
10
11
12
[yqtao@localhost 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);
}

如果要調試程序,則在進行gcc編譯的時候要加上-g參數

gcc -g -o bugging bugging.c

進入gdb:

gdb buging

部分gdb命令:

Linux調試工具GDB使用簡易教程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 查看源碼
// 查看第幾行附近
// 可簡寫成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函數附近的源碼
(gdb) list main
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);
11   }
 
 
// 設置斷點
// break +n在第幾行設斷點
(gdb) break 8
Breakpoint 1 at 0x4004fa: file buging.c, line 8.
// break +函數名 ,在函數名處設斷點
(gdb) break getSum
Breakpoint 2 at 0x4004cb: file buging.c, line 3.
 
//查看斷點信息
(gdb) info breakpoints
Num   Type      Disp Enb Address      What
1    breakpoint   keep y  0x00000000004004fa in main at buging.c:8
2    breakpoint   keep y  0x00000000004004cb in getSum at buging.c:3

斷點信息中每一項的信息:

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

?
1
2
3
4
5
6
7
// 刪除斷點
// delete +n 或 d +n
// 如果不加數字則刪除全部的斷點
(gdb) d 2
(gdb) info breakpoints
Num   Type      Disp Enb Address      What
1    breakpoint   keep y  0x00000000004004fa in main at buging.c:8

關閉和啟用斷點:

有時候,我們會遇到這種情況:有些斷點可能暫時不用但又不想刪除,那么可以disable.

?
1
2
disable +n //關閉斷點
enable +n  //啟動斷點

GDB單步調試

 

以本文開頭的buging.c文件為例,進行單步調試。

?
1
2
3
4
5
6
7
8
// 進入gdb
[yqtao@localhost linux]$ gdb buging
// 在main()函數處設斷點
(gdb) info breakpoints
// 運行程序
(gdb) run
Breakpoint 1, main () at buging.c:9
9        int res=getSum(100);

注意:我們要進入函數要是用step(s),而單步執行next(n),next是不進入函數內部的,要區分兩者的關系。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(gdb) step
getSum (n=100) at buging.c:4
4        for (i=1;i<=n;i++)
// 查看代碼
(gdb) l
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    }
8    int main(){
9        int res=getSum(100);
10       printf("1+2+...+100=%d\n",res);
// 下一步
(gdb) s
5            sum+=i;
// 打印sum的值
// 看到sum是為賦初值的
(gdb) p sum
$1 = 4195633
// info locals
//打印當前斷點處所在函數的所有局部變量的值,不包括函數參數。
(gdb) info locals
sum = 4195635
i = 3

其余的一些命令:

finish

執行程序到當前函數結束

continue

執行程序到下個斷點

until

until N,執行程序到源代碼的某一行

總結

 

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

原文鏈接:http://blog.csdn.net/taoyanqi8932/article/details/53385022

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲视频在线免费看 | 91麻豆网址| 单身男女韩剧在线看 | 成人免费影院 | 韩国三级 720p | 日韩精品国产自在欧美 | 26uuu成人人网图片 | 调教小龙女 | 成人a级特黄毛片 | 91庥豆果冻天美精东蜜桃传媒 | 免费看国产一级片 | 韩国美女被的免费视频 | 日本一区二区三区久久 | 亚洲AV无码国产精品色午夜情 | bl文全肉高h湿被灌尿 | 北岛玲亚洲一区在线观看 | www.俺去| 猫扑俩性 | 日本一区二区三区在线 视频 | 五月婷婷在线观看 | 精品国产日韩亚洲一区在线 | 2021年国内自拍| yy6080午夜国产免费福利 | 亚洲精品第一国产综合高清 | 情缘1完整版在线观看 | 99精品网站 | 亚洲卡一卡2卡三卡4卡无卡三 | 国产成人精品一区 | 香蕉视频在线观看网站 | 国产精品国语自产拍在线观看 | 四虎成人影院网址 | 狠狠色 | 成人观看免费大片在线观看 | 教室里的激情电影 | 国产一区二区在线看 | 喜欢老头吃我奶躁我的动图 | 国产精品久久99 | 亚洲va在线va天堂va偷拍 | 欧美视频网址 | 国产精品一级视频 | 99久久精品国产免看国产一区 |