Ubuntu 16.04下GDB調試

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

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

  經常使用的指令:函數

  

 

 

例子程序以下所示:工具

#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

第一步:spa

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

 

第二步:.net

進入gdb調試:命令行

 

如上圖最後一行所示,表明進入gdb調試,等待用戶命令輸入。3d

 

第三步:調試

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

 

顯示加載成功。

 

第四步:

(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

相關文章
相關標籤/搜索