1. 程式人生 > >Ubuntu 16.04下GDB調試

Ubuntu 16.04下GDB調試

enter opened 執行 har 退出 term 使用 lose 再次

  在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

Ubuntu 16.04下GDB調試