天天看點

gdb調試講解,快速入門

使用gdb步驟

啟動程式的方法

  1. gdb + 運作程式(一般在目前目錄下,如果不是,要指定路徑)
  2. gdb + 運作程式 + core檔案。通過這個方法可以加載異常出錯時的堆棧資訊
  3. gdb + 運作程式 + 程序ID。通過這種方法可以對你正在運作的程式進行調試。

如:

$ gdb cppapplication_2.exe

設定運作時參數,有兩種方法

  1. 在gdb + 運作程式 + 運作參數
  2. 啟動了gdb後,運作set args + 運作參數

設定斷點,方法

  1. b(break) + 檔案名:行數
  2. b + 檔案名:函數 (類内部的函數不能用這種方法)
  3. b + 類::函數

如:

(gdb) b main.cpp:foo

Breakpoint 1 at 0x401392: file main.cpp, line 16.

(gdb) b main.cpp:36

Breakpoint 2 at 0x4013b6: file main.cpp, line 36.

(gdb) b A::printA

Breakpoint 3 at 0x401c2a: file main.cpp, line 27.

(gdb) info break

Num     Type           Disp Enb Address    What

1       breakpoint     keep y   0x00401392 in foo(int) at main.cpp:16

2       breakpoint     keep y   0x004013b6 in main(int, char**) at main.cpp:36

3       breakpoint     keep y   0x00401c2a in A::printA() at main.cpp:27

(gdb)

gdb調試常用參數

  1. r(run)            :    開始運作程式;
  2. c(continue)  :    繼續運作一直到斷點停止
  3. b(break)       :   設定程式斷點;
  4. p(print)         :    列印出變量值;如 p var,會把var變量的值輸出
  5. s(step)         :    單步跟蹤,會進入函數内部
  6. n(next)         :    單步跟蹤,不進入函數
  7. finish           :     跳出函數調試,并列印傳回時的資訊
  8. u(until)        :     跳出循環體
  9. q(quit)         :     退出gdb
  10. l(list)            :     顯示目前行後面的源程式
  11. bt (backtrace)   :     檢視堆棧資訊
  12. info              :      檢視各類gdb資訊以及環境資訊,比如:info break 可以檢視斷點資訊
  13. clear            :       清除全部已定義的斷點
  14. delete         :       删除指點的斷點号,後面接斷點号.如:

Breakpoint 4 at 0x401c36: file main.cpp, line 28.

(gdb) delete 4

(gdb) info break

No breakpoints or watchpoints.

(gdb)

我下面是我本次使用的例子

#include <stdio.h>

using namespace std;

void foo(int sum)
{
    printf("sum 2: %d", sum);
    return ;
}

class A
{
public:
    A(){}
    ~A(){}
   void printA()
    {
        printf("printf A!!");
    }
};

/*
 * 
 */
int main(int argc, char** argv) {
    
    int sum = 0;
    for (int i= 0; i< 100; ++i)
    {
        sum += i;
    }
    
    printf("sum :%d", sum);
    foo(sum);
    
    A test;
    test.printA();
    
    return 0;
}
           

繼續閱讀