GDB改變程式的執行

2021-08-09 23:09:22 字數 554 閱讀 1978

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,...