GDB除錯(快速入門篇)

2021-09-14 05:22:44 字數 2364 閱讀 2968

在linux平台下使用log+gdb+core,一般能應付絕大多數除錯程式的場景;

使用者文件查閱:

編譯程式時**上-g選項,關閉優化機制和建立符號表以便偵錯程式除錯:gcc/g++ -g

你能用gdb對c/c++程式做什麼?

(1)啟動程式;

(2)使程式在指定條件下停止;

(3)當程式停止時,檢查發生了什麼;

(4)更改程式中的內容,以便可以糾正乙個錯誤並繼續了解了另乙個錯誤

本文主要教會你使用以上四點!

使用gdb啟動程式的最簡單方法是使用乙個引數:

gdb 程式名

使用gdb除錯core檔案的方法是:

gdb 程式名 core

使用gdb除錯正在執行的程式的方法是:

gdb 程式名 程序id

退出gdb請輸入:

quit或者q

使程式開始執行的命令是:

run或者r

使程式單步執行的命令是:

next或者n

使程式繼續執行的命令是:

continue或者c

break locataion或者b locataion

在包含主函式原始檔的38行打乙個斷點:

break 38

在進入test函式時打斷點

break test

在table.cpp原始檔的32行打乙個斷點

break table.cpp:32

假設我們知道函式指標的位址為0x5859c0,則可以在0x5859c0上打乙個斷點

break *0x5859c0

假設你需要在某個條件時啟用斷點,在table.cpp原始檔的32行,當i=32時打乙個斷點

break table.cpp:32 if i == 32

假設你的程式是多執行緒執行,你可能會需要在指定執行緒打斷點

首先檢視當前程式的執行緒資訊:

info threads

然後在斷點命令後新增執行緒id 

break locataion thread threadid

info breakpoints

你可以通過命令刪除gdb的斷點,breakpoints 是斷點號

delete breakpoints

當程式停下時,你需要知道當前發生了什麼,可以使用命令檢視當前棧資訊,了解程式執行到**;

breacktrace或者bt

也許你想看看當前這個位置之後源**,則可以執行命令:

list

也許你想看看當前這個位置之前源**,則可以執行命令:

list -

print variate 或者 p variate

在除錯程式過程中,你可能需要修改某些變數的值,則可以執行命令,variate是變數名,value是修改後的值

print variate = value

在除錯程式過程中,你可能需要傳送訊號給當前程式,則可以執行命令,signalvalue是訊號量,一般為1~15

signal signalvalue

在除錯程式過程中,你可能需要強制結束當前程式執行的函式,則可以執行命令,

return

在除錯程式過程中,你可能需要強制呼叫函式,則可以執行命令,function是函式名

call function 或者 print function

好了!學會使用上面這些命令,基本gdb入門了,下面將拓展一些實用的知識。

您可能希望將gdb命令的輸出儲存到檔案中。有幾個命令可以控制gdb的日誌記錄。

啟用日誌記錄:

set logging on

禁用日誌記錄:

set logging off

更改當前日誌檔案的名稱。預設日誌檔案是gdb.txt。

set logging file file

gdb除錯講解,快速入門

使用gdb步驟 啟動程式的方法 gdb 執行程式 一般在當前目錄下,如果不是,要指定路徑 gdb 執行程式 core檔案。通過這個方法可以載入異常出錯時的堆疊資訊 gdb 執行程式 程序id。通過這種方法可以對你正在執行的程式進行除錯。如 設定執行時引數,有兩種方法 在gdb 執行程式 執行引數 啟...

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的圖形化偵錯程式更強大的功能。所謂 寸有所長,尺有所短 就是這...