Ubuntu 16.04下GDB調試


  在linux中還有一個更受大家歡迎的調試工具:GDB。GDB是一個由GNU開源組織發布的、UNIX/LINUX操作系統下的、基於命令行的、功能強大的程序調試工具。可以用來調試C,C++程序。

GDB功能強大,調試命令也有很多,但是對於普通程序調試中經常使用的命令並不多,如下表所示:

  常用的指令:

  

 

 

例子程序如下所示:

#include <stdio.h>

int getSum(int num1,int num2);

int main(int argc, char *argv[])
{
    int num1 = 20;
    int num2 = 30;
    int sum = 0;

    num1 = num1 - 10;

    sum = getSum(num1,num2);

    printf("The sum is %d\n", sum);

    return 1;

}

int getSum(int num1,int num2)
{
    
    printf("The numbers are %d and %d\n", num1,num2);

    return (num1 + num2);
}
View Code

第一步:

對源程序進行編譯,加上-g選項,使其可以進行調試。其結果是生成可執行文件test_gdb,並且可以對其進行gdb調試(對於該命令的詳細解釋,可以查看gcc命令)

 

第二步:

進入gdb調試:

 

如上圖最后一行所示,代表進入gdb調試,等待用戶命令輸入。

 

第三步:

加載進行調試的可執行文件,方便進行調試,以及源程序的顯示。命令如下:

 

顯示加載成功。

 

第四步:

(1)如果在設置斷點之前,輸入r

 

程序正常運行,打印輸出結果,並正常退出。

(1)在運行之前,設置斷點,為了確定設置斷點的位置(行號)可以使用list(l)命令,顯示出程序的內容,從而方便的設置斷點

 

(2)設置斷點

第一個斷點設置在main函數的入口處,第二,三個斷點為普通斷點,第四個斷點設置在函數調用的入口處,第5個斷點為條件斷點。

 

(3)開始調試運行

輸入r開始運行,在第一個斷點處(即main函數入口)停止運行。

 

此時打印輸出num1的值,顯示的並不是20,而是一個隨機值,因為此時還沒有完成初始化操作,如下所示:

 

輸入n執行下一步,此時再次打印輸出num1,即可完成初始化。

輸入c,執行到第二個斷點處停止運行。如下圖所示

 

當程序執行到getSum函數的調用處時,執行s,進入到getSum函數內部,繼續調試執行

 

一直進行單步調試,直到函數結束運行,退出函數的調用

 

在getSum函數結束之前以及結束之后分別打印輸出sum值:

 

很明顯,函數getSum完成計算num1與num2的和之后並對sum賦值。

最后程序結束運行.

  每日一句:善日者強,善時者霸 --荀子

  參考文檔:https://blog.csdn.net/longshen1990/article/details/47778269


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM