最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年01月23日 11:06:21   作者:yqtaowhu  
這篇文章主要介紹了Linux調(diào)試工具GDB使用簡易教程,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本文所述主要是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)操作

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

[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);
}

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

gcc -g -o bugging bugging.c

進(jìn)入gdb:

gdb buging

部分gdb命令:

// 查看源碼
// 查看第幾行附近
// 可簡寫成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 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   }


// 設(shè)置斷點(diǎn)
// break +n在第幾行設(shè)斷點(diǎn)
(gdb) break 8
Breakpoint 1 at 0x4004fa: file buging.c, line 8.
// break +函數(shù)名 ,在函數(shù)名處設(shè)斷點(diǎn)
(gdb) break getSum
Breakpoint 2 at 0x4004cb: file buging.c, line 3.

//查看斷點(diǎn)信息
(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

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

1.Num 列代表斷點(diǎn)編號,該編號可以作為 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      What
1    breakpoint   keep y  0x00000000004004fa in main at buging.c:8

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

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

disable +n //關(guān)閉斷點(diǎn)
enable +n  //啟動斷點(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) run
Breakpoint 1, main () at buging.c:9
9        int res=getSum(100);

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

(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
//打印當(dāng)前斷點(diǎn)處所在函數(shù)的所有局部變量的值,不包括函數(shù)參數(shù)。
(gdb) info locals
sum = 4195635
i = 3

其余的一些命令:

finish

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

continue

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

until

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

總結(jié)

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

相關(guān)文章

  • jps查看進(jìn)程無法顯示的問題及解決

    jps查看進(jìn)程無法顯示的問題及解決

    文章描述了使用jps命令查看進(jìn)程無法顯示的問題,并提供了解決方案,解決方法包括切換到tmp目錄,使用ll命令查看子目錄,找到并修改權(quán)限為755的"hsperfdata_[用戶名]"和"hsperfdata_root"目錄
    2025-01-01
  • 詳解Linux文件中的數(shù)據(jù)是如何被寫進(jìn)磁盤

    詳解Linux文件中的數(shù)據(jù)是如何被寫進(jìn)磁盤

    Linux 中,我們的每一個進(jìn)程,打開的每一個文件都要有自己的 struct inode 對象和自己的文件頁緩沖區(qū)(就是所謂的內(nèi)核緩沖區(qū)),本文我們給大家介紹了Linux文件中的數(shù)據(jù)是如何被寫進(jìn)磁盤,需要的朋友可以參考下
    2024-05-05
  • linux CentOS 系統(tǒng)php和mysql命令加入到環(huán)境變量中

    linux CentOS 系統(tǒng)php和mysql命令加入到環(huán)境變量中

    這篇文章主要介紹了linux CentOS 系統(tǒng)php和mysql命令加入到環(huán)境變量中的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Linux輸入子系統(tǒng)框架原理解析

    Linux輸入子系統(tǒng)框架原理解析

    這篇文章主要介紹了Linux輸入子系統(tǒng)框架原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Linux跨服務(wù)器文件傳輸?shù)牟僮鞑襟E

    Linux跨服務(wù)器文件傳輸?shù)牟僮鞑襟E

    scp命令是Secure Copy的縮寫,可以在不同的Linux服務(wù)器之間安全地復(fù)制文件,這篇文章主要介紹了Linux跨服務(wù)器文件傳輸?shù)牟僮鞑襟E,需要的朋友可以參考下
    2024-07-07
  • Apache ab并發(fā)負(fù)載壓力測試實(shí)現(xiàn)方法

    Apache ab并發(fā)負(fù)載壓力測試實(shí)現(xiàn)方法

    Apache的ab命令模擬多線程并發(fā)請求,測試服務(wù)器負(fù)載壓力,也可以測試nginx、lighthttp、IIS等其它Web服務(wù)器的壓力
    2019-09-09
  • Linux磁盤分區(qū)實(shí)戰(zhàn)案例(必看篇)

    Linux磁盤分區(qū)實(shí)戰(zhàn)案例(必看篇)

    下面小編就為大家?guī)硪黄狶inux磁盤分區(qū)實(shí)戰(zhàn)案例(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • Linux利用CURL發(fā)送POST請求的示例詳解

    Linux利用CURL發(fā)送POST請求的示例詳解

    在現(xiàn)代的網(wǎng)絡(luò)通信中,HTTP 協(xié)議扮演著至關(guān)重要的角色,其中,POST請求是HTTP協(xié)議中的一種方法,用于向服務(wù)器提交數(shù)據(jù)進(jìn)行處理,在 Linux 系統(tǒng)中,curl命令是一個強(qiáng)大的工具,它允許用戶發(fā)送各種類型的HTTP請求,包括POST請求,本文給大家介紹了Linux利用CURL發(fā)送POST請求
    2024-11-11
  • Apache限制IP并發(fā)數(shù)和流量控制的方法

    Apache限制IP并發(fā)數(shù)和流量控制的方法

    這篇文章主要介紹了Apache限制IP并發(fā)數(shù)和流量控制的方法,需要的朋友可以參考下
    2014-12-12
  • linux中xargs命令的各種使用技巧

    linux中xargs命令的各種使用技巧

    xargs是給命令傳遞參數(shù)的一個過濾器,也是組合多個命令的一個工具。下面這篇文章主要給大家介紹了關(guān)于linux中xargs命令用法的相關(guān)資料,需要的朋友可以參考借鑒,下面來跟著小編一起看看吧。
    2017-05-05

最新評論

监利县| 张家港市| 阳山县| 上思县| 井陉县| 连州市| 水富县| 二连浩特市| 兴隆县| 图们市| 内江市| 龙江县| 简阳市| 高邑县| 武汉市| 珠海市| 木里| 武胜县| 宜丰县| 阳原县| 怀集县| 海晏县| 驻马店市| 二连浩特市| 赤水市| 宝鸡市| 顺义区| 公安县| 清新县| 罗山县| 乌恰县| 伊金霍洛旗| 海丰县| 白朗县| 宜川县| 喀喇| 教育| 潜江市| 岑溪市| 连城县| 林周县|