gdb除錯手記

2021-07-25 03:13:09 字數 1022 閱讀 9838

記錄一些gdb的使用經驗

假裝現在要除錯的二進位制程式叫a.exe,原始檔叫pleasedebugme.c

直接輸入gdb a.exe或者開啟gdb之後輸入file a.exe

首先用gcc/g++編譯c/c++程式時一定要加上-g選項,which means 加上除錯資訊,就像gcc -g pleasedebugme.c

然後用gdb載入之,新增了除錯資訊之後就很爽了,一般情況下對照原始檔直接按照行數下斷點就ok。比如要斷在原始檔中的45行,直接在gdb中b 45即可。

如果拿到的程式沒有除錯資訊也沒有關係,比如現在拿到的二進位制檔案a.exe是沒有除錯資訊的。那麼可以直接先info functions,檢視自己想調的函式叫什麼,這裡直接以main函式為例好了,可以直接b main斷在main函式的開頭。如果需要精確地斷在某處,請輸入disas main直接檢視彙編,大致看一下自己要斷的彙編語句的位址,比如位址在0x00401410,那麼就輸入b *0x00401410,這樣就成功下了斷點了。

如果要檢視斷點情況,就info b即可,刪除某個斷點如斷點2就直接delete 2,刪除所有斷點就delete breakpoints

info命令很強大,可以info很多東西,除了前面提到的info b / info functions之外,我常用的還有:

現在假設a.exe是個簡單遞迴程式。

假設現在在a.exe下了個斷點,相當於pleasedebugme.c的45行。輸入r(run),程式就跑起來了,直到遇到斷點。現在比如我想看第三次遞迴的情況,我就直接輸入多次c(continue),每次輸入c程式都會執行到斷點後停下來。

來到了想除錯的**附近之後,就可以開始慢慢除錯了。

除錯過程中注意之前提到的命令們 待續

除錯手記 2011 07 27

1 關於求模運算。在microblogcrawler的org.ir.search.mapuiu中,我在快取map頁的替換策略中設定隊首指標beginpt來實現佇列迴圈,於是在指標移動時就需要以佇列長度bufcount求模。在除錯中才發現 雖然 5 4 2 3,而事實上 5 4 1。所以在 array...

GDB除錯手冊

linux 包含了乙個叫gdb 的gnu 除錯程式。gdb 是乙個用來除錯c和c 程式的強力偵錯程式。它使你能在程式執行時觀察程式的內部結構和記憶體的使用情況。以下是 gdb 所提供的一些功能 它使你能監視你程式中變數的值 它使你能設定斷點以使程式在指定的 行上停止執行 它使你能一行行的執行你的 在...

gdb除錯手冊

gdb原理 利用作業系統提供的系統呼叫ptrace。詳情請看。gdb進行除錯的程序建議編譯引數新增 g 並去掉strip g3可在gdb列印巨集 儲存與恢復斷點 設定每步都列印的內容 gdb p ps ef grep worker grep v grep awk x a.txt 檔案內容 b rec...