1. 程式人生 > >linux下gdb偵錯程式使用學習-01

linux下gdb偵錯程式使用學習-01

目錄

gdb入門-啟動與幫助命令檢視

  1. gdb單獨啟動,檢視gdb的相關選項

    直接通過shell命令視窗執行如下命令

這裡寫圖片描述
進入gdb除錯介面【純文字介面】
2. gdb幫助說明
進入gdb後執行命令【help】即可看到gdb的相關命令,gdb是通過對命令列進行分類(class)來羅列
這裡寫圖片描述
通過上面的圖示,可以看到gdb把所有的幫助命令分為如下幾類
- aliases:命令別名 ,檢視幫助【help aliaes】
這裡寫圖片描述
對gdb部分命令定義的一個簡單的別名設定,與linux的命令【aliases】一樣
常用命令【where】:顯示當前執行執行緒的函式呼叫堆疊中當前棧。

  • breakpoints:中斷點設定【help breakpoints】
    這裡寫圖片描述
    中斷設定命令,是gdb除錯過程中的核心命令,可以控制可執行程式執行過程中的中斷處理,包括設定中斷點、監視點和撲捉點等,同時也可以設定它們的清除、刪除、可用或者是不可用。
    命令很多需要自己慢慢學習,逐漸熟悉,部分常用命令後期會進行詳細演示說明

  • data:可執行程式引數設定和執行時資料顯示等
    主要對gdb的執行時全域性環境進行設定【set核心命令】,匯入、匯出相關的PE檔案資訊,顯示當前PE檔案的相關資訊

  • files:對除錯檔案相關屬性進行設定
    主要通過gdb對除錯的載入程式進行相關的檔案引數設定:譬如該改變工作目錄、設定載入的core檔案、設定可查詢目錄等。

  • internals:內建gdb命令
    該分類的gdb命令一般在除錯中使用比較少

  • running:設定程式執行時相關屬性特徵
    通過gdb設定載入程式執行時的一些特徵,可以通過載入程式除錯其它可執行程式(PS),也可以設定程式跳轉執行,提前結束等

  • stack:檢視載入程式棧資訊
    在gdb除錯程式過程中,執行中斷時,檢視相關執行程序或者執行緒的函式呼叫棧資訊,在多執行緒中除錯時很重要。

  • status:狀態檢視
    gdb核心命令集合,主要是查詢gdb和當前載入程式的執行狀態,查詢相關的資訊、棧、執行緒資訊等

  • support:gdb支援的工具命令

  • tracepoints:跟蹤程式執行

gdb除錯/載入其他可執行

  1. gdb在初始啟動的時候可以載入程式,通過如下命令:gdb PE 【core】/【-c core】載入PE檔案,同時載入core檔案,通過core檔案來分析PE執行情況載入core檔案
  2. gdb啟動成功後 載入程式:命令file PE【可以通過gdb的help命令:help file來檢視相關的文件說明】
  3. gdb啟動,除錯當前正在執行程式具體操作流程
    • 通過ps命令查詢除錯的程序程式
    • 通過-p選項附加到程序
    • 也可以在gdb啟動後通過【attach命令附加到程序,通過detach斷開連線】

退出gdb除錯

  • 在執行【quit/q】操作命令
  • 附加到程序中的gdb除錯過程,需要通過【ctrl+c】先退回到gdb環境中,再執行【quit/q或者是Ctrl+D】操作命令均可
  • 先執行【ctrl+c】,中斷gdb除錯,然後【detach】分離開來,執行【q或者是Ctrl+D】退出

GDB啟動引數說明

GDB作用一個除錯工具同時也作為一個解析器(所有執行的除錯命令都是在該解析器中執行),在啟動的過程中有很多可選引數可以進行選擇,這樣就決定了其功能的強大性。
1. GDB在啟動過程中的具體設定如下:【gdb -h | more】
通過以上顯示可以看出,gdb的啟動引數實質是可以分為三部分。
2. GDB啟動引數具體說明
(1)–args 設定除錯程式的相關引數
(2)主要引數列舉說明:
一、-symbol或者是-s filename
載入符號檔案

二、-exec或者是-e filename
載入可執行檔案,但是沒有載入符號表,這個時候將無法進行除錯

三、-se載入可執行檔案
既載入符號表也載入相關的其他資訊

四、-core或者是-c
-c file載入該core檔案作為相關的core dump檔案
-c number
-pid number
-p number 連線number號的程序,如果沒有該程序則載入相關的core檔案

五、-command
-command file
-x file
從相關的file檔案中執行相關的gdb命令

六、-directory 目錄
-d 目錄
增加這個目錄到gdb中作為檢視原始檔的目錄
這個命令在gdb內部也是可以設定的,對於除錯多個檔案中的函式呼叫等需要進行相關的設定
特別是在除錯dll的時候

七、-quiet
-silent或者是-q
在啟動gdb的時候不顯示相關的version資訊

八、-cd directory
設定gdb的工作目錄為引數中的工作目錄

九、–argc
設定gdb除錯的pe的執行檔案的引數
也可以在啟動gdb後,利用r命令來載入引數

十、-statistics
記錄gdb執行這次pe的時間和佔用記憶體空間的大小

十一、shell command
在gdb中執行shell命令

十二、quit或者q
退出gdb