一些常用的 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 查看崩潰時的堆棧信息啊,但是就是不能執行而已。