GNU調試器(GNU Debugger,簡稱GDB)是一個可用於C、C++等多種編程語言的調試器,它可以使程序員在程序崩潰或者出現其他錯誤時查找問題並修復它們。GDB可以幫助調試員在不進行代碼更改的情況下重現和診斷軟體中的錯誤。
一、啟動GDB
使用以下命令啟動GDB:
$ gdb [options...] [executable-file [core-file or PID]]
其中executable-file是要調試的可執行文件的名稱,PID是正在運行的進程ID,core-file是一個程序崩潰時保存下來的核心文件。
二、設置斷點
斷點的作用是通知程序在某個位置停止執行,此時用戶可以有選擇地查看程序狀態或者調用它所編寫的代碼。有以下幾種設置斷點的方式:
1. 在指定行處設置斷點
通過使用「break」命令,可以設置需要停止執行的代碼位置。以下是在第10行設置斷點的示例:
(gdb) break 10
2. 在函數入口處設置斷點
當需要找出某個函數中的問題時,可以使用命令「break function_name」,在函數的入口處設置斷點。
(gdb) break function_name
3. 在某個文件中所有函數的入口處設置斷點
如果需要在程序的某個文件中設置多個斷點,可以使用「break file_name:函數名」命令。以下是在example.cpp文件中所有函數的入口處設置斷點的示例:
(gdb) break example.cpp:*
三、運行程序
設置好斷點之後,可以通過運行程序以測試它運行的情況。可以使用命令「run」來運行程序:
(gdb) run
如果程序需要輸入參數才能正常運行,使用「run 參數」即可傳遞參數。
四、查看程序狀態
在運行程序時,可以使用以下命令查看程序狀態:
1. 查看變數值
可以使用「print」命令查看某個變數的值。以下是列印變數x的值的示例:
(gdb) print x
2. 查看堆棧
可以使用「backtrace」命令查看程序當前的調用堆棧:
(gdb) backtrace
3. 查看寄存器值
可以使用「info registers」命令查看當前寄存器的值:
(gdb) info registers
4. 查看內存中的值
可以使用「x」命令查看內存中的值。以下是列印地址0x100的值的示例:
(gdb) x 0x100
五、單步執行程序
在設置好斷點後,可以使用以下命令單步執行程序:
1. 單步執行
可以使用「step」命令單步執行程序,當在函數內部時,step會進入函數執行內部代碼。
(gdb) step
2. 跳過函數
可以使用「next」命令跳過當前函數的執行並繼續執行後續代碼。這對於快速調試程序時非常有用。
(gdb) next
3. 退出函數
可以使用「finish」命令退出當前函數並繼續執行後續代碼。
(gdb) finish
六、改變程序狀態
在GDB中,還可以使用以下命令改變程序的狀態:
1. 設置變數值
可以使用「set」命令改變某個變數的值。以下是設置變數x的值為10的示例:
(gdb) set x = 10
2. 還原變數值
在改變變數的值後,可以使用「unset」命令還原變數的值。
(gdb) unset x
3. 中止程序
可以使用「kill」命令中止程序的執行。
(gdb) kill
4. 修改寄存器值
可以使用「set $寄存器名=值」命令修改寄存器的值。以下是將棧指針寄存器設置為0x100的示例:
(gdb) set $sp = 0x100
七、總結
在程序開發中,調試是一個很重要的過程。GDB作為一個優秀的調試器,提供了許多有用的命令來幫助程序員調試程序。本文介紹了GDB中的一些核心命令,希望本文對於有需要的讀者有所幫助。
原創文章,作者:PDOUP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/334228.html