Linux GDB調試命令詳解

一、GDB概述

GDB是一種功能強大的調試工具,它可以讓程序員在程序執行時候監測程序的狀態,這對於程序員找出程序運行中的錯誤是非常有用的。

下面讓我們來學習一些關於Linux GDB調試命令的使用。

二、程序調試

首先,讓我們來編寫一個簡單的C語言程序,例如:

#include <stdio.h>

int main() {
    int a = 1;
    int b = 2;

    printf("a: %d, b: %d\n", a, b);

    int sum = a + b;

    printf("sum: %d\n", sum);

    return 0;
}

保存以上代碼為”test.c”文件。使用GCC編譯器編譯程序:

gcc -g -o test test.c

其中,”-g”選項告訴GCC編譯器生成調試信息。

接下來,讓我們啟動GDB:

gdb ./test

使用”run”命令來運行程序:

(gdb) run

你會看到如下輸出:

Starting program: /home/user/test 

a: 1, b: 2
sum: 3

Program exited normally.

然後輸入「quit」命令退出GDB。

三、斷點調試

GDB最常用的調試命令就是斷點命令,使用斷點我們可以在程序的任何地方暫停程序的執行,並檢查程序的狀態。

讓我們在剛才的C語言程序中添加一個斷點:

#include <stdio.h>

int main() {
    int a = 1;
    int b = 2;

    printf("a: %d, b: %d\n", a, b);

    int sum = a + b;

    printf("sum: %d\n", sum);

    return 0;
}

在第七行後添加斷點:

#include <stdio.h>

int main() {
    int a = 1;
    int b = 2;

    printf("a: %d, b: %d\n", a, b);

    int sum = a + b;

    printf("sum: %d\n", sum);

    return 0;
}

保存並編譯程序,啟動GDB,並輸入如下命令設置斷點:

break test.c:9

使用”run”命令啟動程序並進入GDB調試模式:

(gdb) run

程序啟動後,會在第9行暫停執行:

Starting program: /home/user/test 

Breakpoint 1, main () at test.c:9
9           int sum = a + b;
(gdb)

使用”next”命令單步執行程序,你會看到變數sum的值更新:

10          printf("sum: %d\n", sum);
(gdb) next
sum: 3
11      
(gdb)

使用”print”命令來查看變數的值:

(gdb) print sum
$1 = 3

使用”quit”命令退出GDB。

四、查看源代碼

在GDB中可以通過”list”命令來查看源代碼:

(gdb) list
1   #include <stdio.h>
2   
3   int main() {
4       int a = 1;
5       int b = 2;
6   
7       printf("a: %d, b: %d\n", a, b);
8   
9       int sum = a + b;
10  
11      printf("sum: %d\n", sum);
12  
13      return 0;
14  }

你可以在輸出窗口中看到源代碼的行數以及注釋。

五、查看棧信息

使用”backtrace”命令可以查看當前函數的調用棧:

#include <stdio.h>

void func() {
    int c = 3;

    printf("c: %d\n", c);
}

int main() {
    int a = 1;
    int b = 2;

    printf("a: %d, b: %d\n", a, b);

    func();

    int sum = a + b;

    printf("sum: %d\n", sum);

    return 0;
}

編譯並啟動GDB:

gcc -g -o test test.c
gdb ./test

然後使用”run”命令啟動程序:

(gdb) run

使用”backtrace”命令可以查看當前的函數調用棧:

(gdb) backtrace
#0  func () at test.c:5
#1  0x000055555555518d in main () at test.c:14

“#0″表示當前函數的編號,棧中的最後一個函數調用是最後編號的。”func()”函數調用了”main()”函數。

六、查看變數的值

使用”print”命令可以查看變數的值:

(gdb) print sum
$1 = 3
(gdb)

如果變數是數組類型,則可以使用”parray”命令查看數組的內容:

#include <stdio.h>

int main() {
    int arr[] = {1,2,3,4,5};

    for(int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

編譯並啟動GDB:

gcc -g -o test test.c
gdb ./test

使用”run”命令啟動程序:

(gdb) run

在程序暫停時使用”parray”命令查看數組的內容:

(gdb) parray arr
$1 = {1, 2, 3, 4, 5}

以上就是關於Linux GDB調試命令的詳細介紹。希望這篇文章對你有所幫助。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/239007.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:14
下一篇 2024-12-12 12:14

相關推薦

  • 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
  • 剖析命令執行函數

    在編程開發過程中,命令執行函數是非常常見的一個概念。它是指接受一個命令字元串,並將其解析執行,返回相應的結果或錯誤信息的函數。本文將從多個方面對命令執行函數進行詳細的闡述,包括其定…

    編程 2025-04-28
  • 如何使用Python執行Shell命令並獲取執行過程信息

    本文將介紹如何使用Python執行Shell命令並獲取執行過程信息。我們將從以下幾個方面進行闡述: 一、執行Shell命令 Python內置的subprocess模塊可以方便地執行…

    編程 2025-04-28
  • Python中獲取用戶輸入命令的方法解析

    本文將從多個角度,分別介紹Python中獲取用戶輸入命令的方法,希望能夠對初學者有所幫助。 一、使用input()函數獲取用戶輸入命令 input()是Python中用於獲取用戶輸…

    編程 2025-04-27
  • Python3 執行 cmd 命令用法介紹

    本文將詳細講解如何使用Python3執行cmd命令,包括使用subprocess模塊、os模塊、Popen方法、system方法等多個方面的實現方法。 一、使用subprocess…

    編程 2025-04-27
  • 全面解析Python直接命令更新

    本文將從多個方面對Python直接命令更新進行詳細闡述,包括更新命令的基本用法、更新過程中可能遇到的問題及其解決方法等等。 一、更新命令基本用法 Python直接命令更新是一種非常…

    編程 2025-04-27
  • 如何在Linux中添加用戶並修改配置文件

    本文將從多個方面詳細介紹在Linux系統下如何添加新用戶並修改配置文件 一、添加新用戶 在Linux系統下創建新用戶非常簡單,只需使用adduser命令即可。使用以下命令添加新用戶…

    編程 2025-04-27
  • Python啟動命令用法介紹

    Python是一門解釋型語言,與許多編譯型語言不同,它不需要編譯成機器碼,而是通過解釋器一行一行讀取程序,逐句翻譯成目標代碼然後運行。因此,對於Python程序員來說,學會如何正確…

    編程 2025-04-27

發表回復

登錄後才能評論