使用gdb步驟
啟動程式的方法
gdb + 執行程式(一般在當前目錄下,如果不是,要指定路徑)設定執行時引數,有兩種方法gdb + 執行程式 + core檔案。通過這個方法可以載入異常出錯時的堆疊資訊
gdb + 執行程式 + 程序id。通過這種方法可以對你正在執行的程式進行除錯。
如:
在gdb + 執行程式 + 執行引數設定斷點,方法啟動了gdb後,執行set args + 執行引數
b(break) + 檔名:行數gdb除錯常用引數b + 檔名:函式 (類內部的函式不能用這種方法)
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)
r(run) : 開始執行程式;c(continue) : 繼續執行一直到斷點停止
b(break) : 設定程式斷點;
p(print) : 列印出變數值;如 p var,會把var變數的值輸出
s(step) : 單步跟蹤,會進入函式內部
n(next) : 單步跟蹤,不進入函式
finish : 跳出函式除錯,並列印返回時的資訊
u(until) : 跳出迴圈體
q(quit) : 退出gdb
l(list) : 顯示當前行後面的源程式
bt (backtrace) : 檢視堆疊資訊
info : 檢視各類gdb資訊以及環境資訊,比如:info break 可以檢視斷點資訊
clear : 清除全部已定義的斷點
delete : 刪除指點的斷點號,後面接斷點號.如:
breakpoint 4 at 0x401c36: file main.cpp, line 28.
(gdb) delete 4
(gdb) info break
no breakpoints or watchpoints.
(gdb)
我下面是我本次使用的例子
#include using namespace std;
void foo(int sum)
class a
~a(){}
void printa()
};/*
* */
int main(int argc, char** argv)
printf("sum :%d", sum);
foo(sum);
a test;
test.printa();
return 0;
}
GDB除錯(快速入門篇)
在linux平台下使用log gdb core,一般能應付絕大多數除錯程式的場景 使用者文件查閱 編譯程式時 上 g選項,關閉優化機制和建立符號表以便偵錯程式除錯 gcc g g 你能用gdb對c c 程式做什麼?1 啟動程式 2 使程式在指定條件下停止 3 當程式停止時,檢查發生了什麼 4 更改程...
GDB除錯入門
除錯符號 g 是在編譯的時候產生,而非鏈結的時候產生 所以 編譯成.o檔案時候,需要帶這個選項.1.執行命令 gdb 可執行檔案 如果不是 g選項編譯出來的,會直接告訴你,不能除錯 2.通過list標出檔案 多個原始檔可以是 list a.cpp 10 表示列出原始檔a.cpp的第十行 不指定行號,...
GDB除錯入門
用gdb除錯程式 gdb概述 gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc bcb等ide的除錯,但如果你是在unix平台下做軟體,你會發現gdb這個除錯工具有比vc bcb的圖形化偵錯程式更強大的功能。所謂 寸有所長,尺有所短 就是這...