linux gdb的詳細用法 運行與斷點(一)

gdb是調試程序,跟蹤問題的一個非常好的手段,下面將詳細的進行介紹它的具體用法

下面以gdb_test.c程序爲例介紹

#include <stdio.h>

int func()
{
    int p = 0;
    int q = 0;
    for(p = 0; p < 5; p++)
    {
        q++;
        printf("p = %d\n", p);
        printf("q = %d\n", q);
    }
    return 0;
}

int main()
{
    int i = 1;
    i = i + 1;
    printf("func= %s, line= %d, i= %d\n", __func__, __LINE__, i);
    func();
    i++;
    printf("func= %s, line= %d, i= %d\n", __func__, __LINE__, i);
    return 0;
}


1, 首先介紹怎麼用gdb運行程序

用gdb編譯程序時,首先在編譯程序時加-g。

以上面的程序爲例進行編譯

gcc gdb_test.c -o gdb_test -g

有兩種運行用法,一是在編譯成功後輸入gdb + 編譯後的文件名



二是在命令行中先輸入gdb,按回車,再輸入file + 編譯後的文件


這兩種方法選擇其中一個就可以。

然後輸入run命令就可以將程序運行起來了,簡寫 r


2 在程序中打斷點

使用break進行打斷點 ,簡寫爲b

可以對某一行進行打斷點 例:對程序的第三行進行打斷點 b 3

如果是多個文件,可以對某個文件的某一行打斷點, 例:對gdb_test.c的第三行打斷點 b gdb_test.c:3 

可以對某個函數進行打斷點 例:對本程序中func()函數打斷點 b func

同理也可以對多個文件中的某一個文件的函數打斷點,例: b gdb_test.c:func

例如對程序的第20行進行打斷點 b 20


打完斷點後,後顯示一行內容,分別是第幾個斷點,在哪個文件中,第多少行

打完斷點後進行運行程序,輸入r命令

程序運行到第20行會自動停止,此時程序運行到了第19行,第20行還沒有運行到。

我們可以先用p命令,打印一下程序中i的值,下面的博客會講到p的用法


此時i的值爲2.

如果想讓程序繼續運行,我們可以使用 c 命令


如果想退出程序,可以使用 q 命令。


如果我們想刪除某個斷點,有兩種方法:

1 delete 命令 簡寫d

delete break 刪除所有的斷點

delete break n 刪除某個斷點 n爲斷點號

2 clear 命令

clear 行號    刪除設在某一行的斷點


這兩種刪除斷點的用法就在於一個是依據斷點號刪除,一個是依據行號刪除


disable break n  禁用某個斷點 n爲斷點號

enable break n 使能某個斷點 n爲斷點號


在第19行和第20行分別設置斷點,然後運行程序。

程序在19行停住後,接下來進行對第20行的斷點禁用

然後繼續運行程序,你會看到在第20行沒有停下來。所以說明禁用第20行的斷點已經生效了。


查看斷點信息:info b  查看所有斷點信息

info b n  查看第n個斷點的信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章