GDB調試的基本使用

轉載於:孫老師在csdn

什麼是GDB

GDB, 又稱GNU調試器,是用來幫助調試我們程序的工具。
GDB可以幹以下幾件事:
1. 給程序設置(特定條件下的)斷點
2. 當程序停在斷點處時,我們查看所有變量、寄存器的值
3. 當程序停在斷點處時,我們除了能查看所有變量、寄存器的值以外,還能在不改變源代碼的情況下改變這些值(這個確實屌)

GDB命令總結

在我們學習使用GDB調試程序之前,我們先看看GDB有哪些命令。

命令 功能
r run, 直接調到斷點處,沒有設置斷點的話直接運行程序
b fun 設置一個斷點breakpoint在函數”fun”的最開始
b N 在當前運行源文件的第N行設置斷點
b file.c:N 在當前源文件file.c的第N行設置斷點
d N 刪掉delete第N行的斷點
info break 顯示所有斷點信息
c 繼續(continue)運行程序,一直到下一個斷點或程序結束
f 運行直到當前函數(function)結束
s 按step調試1行,會進入函數體
s N 按step調試接下來的N行
n 調試1行,與按s命令不同的是此處不進入函數體
p var 輸出(print)變量”var”的值
set var=val 設置變量”var”的值
bt 打印調用堆棧(stack trace)
q 退出gdb

GDB使用說明

GDB有如下兩種使用方式
1. 調試會崩潰、有邏輯錯誤的程序
2. 調試程序崩潰時自動生成的coredump

下面說明如何GDB調試

  1. 編譯並構建程序,加上調試選項-g,e.g. gcc -g main.cpp -o test.out
  2. 用GDB來運行程序,gdb test.out
  3. 使用GDB命令來分析、調試程序
  4. 退出GDB

下面將舉例說明GDB調試

源代碼

//main.c
#include <stdio.h>
int main()
{ 
    int balance=100;
    int target=1000;
    float rate = 0.1;
    int year = 0;
    do
    {
        float interest = balance * rate;
        balance = balance + interest;
        year++;
    } while ( balance >= target );
    printf("%d No. of years to achieve target balance.\n", year);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

一下爲詳細調試步驟
步驟1:編譯並構建程序,加上調試選項-g

gcc -g main.c -o test.out

步驟2:用GDB來運行程序

gdb test.out

步驟3:在main函數入口處設置一個斷點

b main

步驟4:運行程序

run

步驟5:使用step調試到13行

s

步驟6:查看balance, rate, interest的值

p balance
p rate
p interest

步驟7:使用step調試到15行
步驟8:查看balance, rate, interest的值(發現沒有循環,表明while條件出錯,應該是balance < target)

參考文章

GDB: The GNU Project Debugger
Debugging with GDB
GDB Tutorial

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章