從入門到精通:Linux GDB調試命令

一、GDB命令簡介

GDB是GNU Project Debugger的縮寫,是一種功能強大的源代碼調試器。它可以通過許多命令交互式地調試程序。下面介紹一些基本的GDB命令,並附上代碼示例。

二、GDB命令使用

1. 設置斷點

使用GDB調試程序的第一步通常是設置斷點,以便在適當的位置暫停程序。可使用如下兩個命令設置斷點:

b  // 設置斷點
r  // 運行程序

示例代碼:

#include 
int main(){
  int a=1,b=2,c;
  c=a+b;
  printf("c=%d\n",c);
  return 0;
}

使用上述代碼進行調試時,執行b命令後輸入參數main,執行r命令運行程序,當程序遇到breakpoint後停止執行。可以使用info命令查看斷點信息,使用delete命令刪除斷點。

2. 查看程序狀態

通過使用GDB,我們可以查看正在運行程序的狀態,以便了解程序運行時發生了什麼。下面是一些常用的命令:

  • info 命令:查看程序的狀態
  • print 命令:查看變量的值
  • backtrace命令:查看函數調用鏈

示例代碼:

#include 
int main(){
  int a=1,b=2,c;
  c=a+b;
  printf("c=%d\n",c);
  return 0;
}

使用上述代碼進行調試時,執行r命令後可以使用print a命令查看變量a的值,可以使用info命令查看程序狀態,使用backtrace命令查看函數調用鏈。

3. 進行單步調試

單步調試是GDB的一項基本功能。它允許你一次一條地執行代碼並在執行途中檢查狀態。下面是一些可以使用的命令:

  • step 命令:執行當前行,並進入函數、循環或條件語句
  • next 命令:執行當前行,但是不進入函數、循環或條件語句
  • finish命令:執行當前函數並返回調用它的函數

示例代碼:

#include 
int sub(int a,int b){
    int c;
    c=a-b;
    return c;
}
int main(){
  int a=1,b=2,c;
  c=sub(a,b);
  printf("c=%d\n",c);
  return 0;
}

當使用上述代碼進行調試時,使用step命令可以進入函數sub,使用next命令可以退出函數,使用finish可以將程序運行到函數結尾處。

三、其他GDB命令

1. 調試崩潰程序

當程序發生崩潰時,調試起來會更加困難。但是,GDB可以幫助你確定問題發生的地方。我們可以使用如下命令來幫助我們進行調試:

  • bt命令:查看函數調用鏈,幫助確定在哪個函數中發生了崩潰
  • info registers 命令:查看寄存器中的值,幫助了解程序的狀態
  • x/10i $eip命令:查看程序中指令的彙編語言代碼

示例代碼:

#include 
int main(){
  int *p=NULL;
  *p=0;
  return 0;
}

當使用上述代碼進行調試時,使用run命令啟動程序,在程序崩潰後使用bt命令可以查看函數調用鏈,使用info registers命令可以查看寄存器的值,使用x/10i $eip可以查看崩潰時程序中的指令。

2. 跟蹤變量值

GDB可以設置條件斷點,以便在變量值發生變化時暫停程序。下面是一個示例程序及其演示:

#include 
int main(){
  int a=0,b=0,c=0;
  while(1){
      a++;
      if(a>5){
        b++;
        if(b>3){
          c++;
        }
      }
      printf("a=%d,b=%d,c=%d\n",a,b,c);
  }
}

使用如下代碼可以設置條件斷點:

b main.c:9 if a==5

這會在變量a的值等於5的時候停止程序,然後可以通過使用print命令來查看變量的值。

3. 模擬輸入

使用GDB,我們可以模擬輸入以便測試一些特定的情況。下面是一個示例程序及其演示:

#include 
int main(){
  int a;
  printf("Please input your age:");
  scanf("%d",&a);
  if(a<18){
    printf("You are under 18.\n");
  }
  else{
    printf("You are over 18.\n");
  }
  return 0;
}

使用如下代碼可以使用GDB模擬輸入:

set args < input.txt
run

以上代碼會將文件input.txt中的內容讀入程序中,並將其作為輸入。

四、總結

GDB是一個非常強大的源代碼調試器,它提供了許多功能幫助程序員定位代碼錯誤。有了GDB的幫助,調試程序變得更加簡單,並且大大提高了調試效率。

原創文章,作者:UAPNE,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/332389.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
UAPNE的頭像UAPNE
上一篇 2025-01-21 17:30
下一篇 2025-01-24 18:46

相關推薦

  • Python wordcloud入門指南

    如何在Python中使用wordcloud庫生成文字雲? 一、安裝和導入wordcloud庫 在使用wordcloud前,需要保證庫已經安裝並導入: !pip install wo…

    編程 2025-04-29
  • Python小波分解入門指南

    本文將介紹Python小波分解的概念、基本原理和實現方法,幫助初學者掌握相關技能。 一、小波變換概述 小波分解是一種廣泛應用於數字信號處理和圖像處理的方法,可以將信號分解成多個具有…

    編程 2025-04-29
  • Python豎線圖:從入門到精通

    Python豎線圖,即Python的繪圖工具matplotlib中的一種圖形類型,具有直觀、易於理解的特點,適用於各種數據分析和可視化場景。本文從初學者角度出發,介紹Python豎…

    編程 2025-04-29
  • Python命令大全及說明

    Python是一種高級編程語言,由Guido van Rossum於1989年底發明。它具有良好的語法結構和面向對象的編程思想,具有簡潔、易讀、易學的特點,是初學者以及專業開發人員…

    編程 2025-04-29
  • Git config命令用法介紹:用正確的郵箱保障開發工作

    本文將詳細介紹如何使用git config命令配置Git的全局和本地用戶信息,特別是如何正確使用用戶郵箱,保障Git操作的正常進行。 一、git config命令介紹 Git中的每…

    編程 2025-04-29
  • Python SSH 遠程執行命令

    Python SSH 遠程執行命令是指在一個服務器上執行遠程另一個服務器上命令。如果你需要在本地機器上執行命令,或者在遠程機器上執行本地命令,你都可以使用 SSH。在 Python…

    編程 2025-04-29
  • Python爬取數據指南-從入門到精通

    Python爬蟲是指用Python編寫程序,自動化地獲取網絡上的信息,並進行處理、分析和存儲。以下是Python爬取數據的指南,從入門到精通。 一、獲取網頁數據 Python爬蟲的…

    編程 2025-04-29
  • Python導出微信群聊天記錄:從入門到實踐

    微信群聊是我們日常生活中與家人、朋友聊天交流的重要平台。但是,當備份和查看微信群聊的聊天記錄時,我們常常會遇到各種問題。這時,我們可以使用Python對微信群聊天記錄進行導出、備份…

    編程 2025-04-28
  • Python自學多久能入門?

    Python是一門極具優勢的編程語言,無論在人工智能、數據分析、Web開發等領域都有廣泛的應用,所以越來越多的人開始學習Python。但是對於初學者來說,Python自學多久能入門…

    編程 2025-04-28
  • Python熵權法入門指南

    本文將為你介紹Python熵權法的基礎知識以及如何在實際應用中使用熵權法,讓你能夠更好地理解該算法並將其運用到實際工作中。 一、什麼是Python熵權法? Python熵權法是一種…

    編程 2025-04-28

發表回復

登錄後才能評論