1、修改變數值:set var var_name=num;(最佳)
print var_name=num;
2、跳轉執行
gdb提供了亂序執行的功能。
jump linespec
linespec可以是檔案的行號,也可以是+num這偏移的形式。
jump addr;
jump不會改變當前程式棧中的內容,所以,當乙個函式調到另乙個函式時,當函式執行完返回進行出棧操作時,必然會發生錯誤。
3、產生訊號量
signal
可以產生乙個訊號給程式。
linux的系統訊號通常在1到15,所以singal的取值也在1~15。
4、強制函式返回
5、強制呼叫函式
call
表示式中可以是函式,以達到強制呼叫函式的目的,顯示函式的返回值,void不顯示。
print 也可以與call 不同的時。會把返回值存入歷史資料中。
GDB 使用 (七)改變程式的執行
改變程式的執行 一旦使用gdb掛上被除錯程式,當程式執行起來後,你可以根據自己的除錯思路來動態地在gdb中更改當前被除錯程式的執行線路或是其變數的值,這個強大的功能能夠讓你更好的除錯你的程式,比如,你可以在程式的一次執行中走遍程式的所有分支。一 修改變數值 修改被除錯程式執行時的變數值,在gdb中很...
GDB除錯之改變程式執行流程
最近學習了函式呼叫及返回的流程後,突發奇想能不能直接使用gdb修改棧空間,達到呼叫函式 返回主函式 變為呼叫函式 插入自定義函式 返回主函式的效果,感覺很有意思,遂進行以下實驗 肥腸簡單的 如下 int add2 int a,int b int add int a,int b int main in...
gdb除錯當前執行的程式
為什麼使用gdb除錯正在執行的程式?因為有時候bug很難復現 或者環境搭建起來比較困難,所以在出現bug的時候可以使用gdb的attach功能除錯正在執行的gcc編譯出來的程式,注意編譯選項要加 g,否則沒有符號表。除錯步驟?1.編譯時候帶 g選項。2.執行程式。3.ps找到程序號。4.啟動gdb,...