GDB入門教程


什么是調試?

所謂調試(Debug),就是讓代碼一步一步慢慢執行,跟蹤程序的運行過程。比如,可以讓程序停在某個地方,查看當前所有變量的值,或者內存中的數據;也可以讓程序一次只執行一條或者幾條語句,看看程序到底執行了哪些代碼。

在調試的過程中,我們可以監控程序的每一個細節,包括變量的值、函數的調用過程、內存中數據、寄存器、線程的調度等,從而發現隱藏的錯誤或者低效的代碼。

調試需要借助專業的輔助軟件——調試器(Debugger)。現在主流C/C++調試器有下面幾種:

1) Remote Debugger

Remote Debugger 是 VC/VS 自帶的調試器,與整個IDE無縫銜接,使用非常方便,初學者建議使用該調試器,本教程也以 VS2010 為例講解調試技巧。

2) WinDbg

大名鼎鼎的 Windows 下的調試器,它的功能甚至超越了 Remote Debugger,它還有一個命令行版本(cdb.exe),但是這個命令行版本的調試器指令比較復雜,不建議初學者使用。

3) LLDB

XCode 自帶的調試器,Mac OS X 下開發必備調試器。

4) GDB

Linux 下使用最多的一款調試器,也有 Windows 的移植版。

GDB 入門教程

下面給出一個具有buging.c的程序:

#include <stdio.h>
int getSum(int n) {
        int sum=0,i;
        for (i=1;i<=n;i++)
                sum+=i;
        return sum;
}
int main(){
        int res=getSum(100);
        printf("1+2+...+100=%d\n",res);
}

如果要調試程序,則在進行gcc編譯的時候要加上-g參數,gcc -g -o bugging bugging.c

1. 進入gdb

gdb bugging
gdb bugging -silent

選項-silent用於屏蔽 GDB 的前導信息,否則它會在屏幕上打印一堆免責條款。

啟動 GDB 后,它輸出的信息表明已經讀入了 mian.out 的符號表。接下來,GDB 會顯示自己的提示符(gbd),提示並等待你輸入調試命令。

2. gdb -b 選項:設置斷點

設置斷點的命令是b或者break, 可以根據行號、函數名、地址來設置斷點位置。

b main
b 10
b * 0x4004f4

3. gdb -r 選項:執行程序

一旦設置了斷點,下一步就是用r或者run命令執行被調試的程序,執行后會自動在第一個斷點處停下來:

可以用於 c/continue 繼續。

4. gdb -p 選項:打印變量的值

(gdb) p i
$1 = 0
(gdb) p sum
$2 = 140737488347344

可見,gdb還將值存起來並編號了,因此也可以用這個編號訪問:

(gdb) p $1
$3 = 0

5. gdb -n 選項:單步調試

調試命令n或者next用於繼續執行源文件中的下一行。

6. gdb -l 選項:列出源文件

可以通過不帶參數(默認展示10行)、行號、函數名

(gdb) list 2
(gdb) list main
(gdb) list

7. 查看匯編

# 檢查匯編 會給出對應的代碼的匯編
disas 

# 查看寄存器內容
info registers

# 打印指定寄存器
print $rsp

# 每步執行
stepi

# 檢查寄存器或某個地址
x/4wd $rsp

8. gdb -q 選項:退出調試

 

 

參考鏈接:

1. C語言中文網-GDB調試教程:1小時玩轉Linux gdb命令

2. CSDN_yqtaowhu-GDB簡明教程

3. 不周山-【厚讀CSAPP】Bomb lab


免責聲明!

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



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