1. 程式人生 > >linux GDB除錯時的臨時變數,臨時指標

linux GDB除錯時的臨時變數,臨時指標

今天除錯遇到了個很麻煩的事情,為了復現一個棧完全被踩成0x01010101010101010101的問題較勁了好幾天

期間需要多次call 函式來模擬程序裡的函式呼叫

但是坑爹的是,這個read_xxx(int, int, int*) 有個坑爹的指標

前2個入參好辦,直接傳個數進去就解決了,或者用set $i=0 來弄個臨時變數也行

但是這個指標就麻煩了,沒有上下呼叫棧,上哪弄個有效的指標給你啊

嗯, 全域性變數,我也是這麼幹的

不過很不幸,全域性變數通常都是蠻重要的,這麼幹的結果就是復現出來的問題是亂七八糟的,絕對的自己坑自己

尤其是這個指標還是個INOUT引數,指不定在哪步就被改了,坑的我一愣一愣的

後來終於找到了個比較好的解決辦法

精華啊

這麼牛逼的辦法當然不是我想出來的,其實很簡單,但當時就是沒轉過來,遺憾啊

read_xxx(0, 0,(int *)&g_err_str)

其實要的就是個有效的地址嘛,型別不對沒關係啊,只要buffer夠長什麼都好說

找個全域性的buffer,把地址強轉下了傳進去就好了,這種事情buffer來幹是最好的了