gdb調試工具的使用


GDB是一個由GNU開源組織發布的、UNIX/LINUX操作系統下的、基於命令行的、功能強大的程序調試工具。

GDB中的命令固然很多,但我們只需掌握其中十個左右的命令,就大致可以完成日常的基本的程序調試工作。

1.file <文件名> :

加載被調試的可執行程序文件。
因為一般都在被調試程序所在目錄下執行GDB,因而文本名不需要帶路徑

命令:(gdb) file gdb_sample

2. r :

Run的簡寫,運行被調試的程序。
如果此前沒有下過斷點,則執行完整個程序;如果有斷點,則程序暫停在第一個可用斷點處

命令:(gdb) r

3.

b <行號>
b <函數名稱>
b *<函數名稱>
b *<代碼地址>
d [編號]

b: Breakpoint的簡寫,設置斷點。兩可以使用“行號”“函數名稱”“執行地址”等方式指定斷點位置。
其中在函數名稱前面加“*”符號表示將斷點設置在“由編譯器生成的prolog代碼處”。如果不了解匯編,可以不予理會此用法。
d: Delete breakpoint的簡寫,刪除指定編號的某個斷點,或刪除所有斷點。斷點編號從1開始遞增。

命令:

(gdb) b 8
(gdb) b main
(gdb) b *main
(gdb) b *0x804835c
(gdb) d

4. s,n

s: 執行一行源程序代碼,如果此行代碼中有函數調用,則進入該函數;
n: 執行一行源程序代碼,此行代碼中的函數調用也一並執行。
s 相當於其它調試器中的“Step Into (單步跟蹤進入)”;
n 相當於其它調試器中的“Step Over (單步跟蹤)”。
這兩個命令必須在有源代碼調試信息的情況下才可以使用(GCC編譯時使用“-g”參數)。

命令:

(gdb) s
(gdb) n

5.si ,ni

si命令類似於s命令,ni命令類似於n命令。所不同的是,這兩個命令(si/ni)所針對的是匯編指令,而s/n針對的是源代碼。

命令:

(gdb) si
(gdb) ni

6.p <變量名稱>

Print的簡寫,顯示指定變量(臨時變量或全局變量)的值。

命令:

(gdb) p i
(gdb) p nGlobalVar

7.display ...

undisplay <編號>

display,設置程序中斷后欲顯示的數據及其格式。
例如,如果希望每次程序中斷后可以看到即將被執行的下一條匯編指令,可以使用命令
“display /i $pc”
其中 $pc 代表當前匯編指令,/i 表示以十六進行顯示。當需要關心匯編代碼時,此命令相當有用。
undispaly,取消先前的display設置,編號從1開始遞增。

8.i

Info的簡寫,用於顯示各類信息,詳情請查閱“help i”

命令:

(gdb) i r

9. q 

Quit的簡寫,退出GDB調試環境。

命令:

(gdb) q

10.help 【命令名稱】

GDB幫助命令,提供對GDB名種命令的解釋說明。
如果指定了“命令名稱”參數,則顯示該命令的詳細說明;如果沒有指定參數,則分類顯示所有GDB命令,供用戶進一步瀏覽和查詢。

命令:

(gdb) help display

總結:實習階段用到的命令

使用gdb進行調試

........... gdb ./BBAPIScbpMain

在這個文件路徑下打斷點

b /home/......./..cc

打印last_symbol的值以便觀察

p last_symbol

跟蹤調試路徑

bt(backtrace)

根據bt命令之后的程序棧中,找到自己想要追蹤的幀號

f 13

繼續打印自己想要觀察的參數

p instr

查看觀察的參數上一次的調用情況

up

 參考:https://blog.csdn.net/finish_dream/article/details/51804780 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM