GDB 使用備忘

一些常用的 gdb 使用命令備忘。

thread

用法:thread xx。切換當前活動線程。用於調試多線程程序。xx 爲線程號,用 info thread(th)查看,每個線程的第一個數字就是線程號。

watch

硬件寫斷點。這種斷點和普通的 break 有點不同,需要每次掛載 gdb 後,先利用普通的 break 讓程序停下來,然後查看出你要查看變量的地址(用p)。然後再用 watch 命令設置。然後每次程序重新運行都要重新設置,因此每次變量地址的都不一樣。

p

這個命令平時用來顯示一些變量的值。其實它還有一個功能就是執行函數。調試 MiniGUI 的時候,最典型的用法用法就是可以將你想查看的一些 memdc 中的圖像信息輸出到屏幕上進行檢查。方法是調用 BitBlt ,注意這種情況一些宏定義的變量無法直接使用,而是要填入真正的數值,這些可以從代碼裏面去差。例如先把屏幕一塊地方填充成紅色,然後再把 memdc 中的內容輸入到屏幕的這個地方:
// SetBrushColor(hdc, color) 的宏定義是 SetDCAttr(hdc, DC_ATTR_BRUSH_COLOR, color)
// DC_ATTR_BRUSH_COLOR 值就是2
// HDC_SCREEN 的值就是0
// 如果自己知道 rgb 對應的 pixel 值的話,也可以不用 RGB2Pixel
p SetDCAttr(0, 2, RGB2Pixel(0, 255, 0, 0))

p FillBox(0, 400, 0, 360, 480)

p BitBlt(memdc, 0, 0, 0, 0, 0, 400, 0, 0)


查看 coredump 文件

首先要讓程序在崩潰的時候產生 coredump 文件。輸入 ulimit -c unlimited 命令(注意這個只對一個終端有效)。然後在程序崩潰的時候,就會產生 core.xx 的文件。使用 gdb app core.xx 命令查看(app 就是產生 core.xx 的程序)。然後就和普通的 gdb 用法一樣了,用 bt 查看崩潰時的堆棧信息啊,但是就是不能執行而已。

disassemble

對當前的執行到的代碼反彙編。
發佈了37 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章