很多純 c 語言的專案都會自己開發一套基礎資料結構,比如最常見的就是造乙個 c++ vector 或者 string 的輪子,有了 vector 以後就可以往裡面自由 add() 任意型別的資料,在具體實現中用 void* 做強制型別轉換,這樣帶來的問題是無論 gdb 還是 printf 除錯程式,都必須手動轉換指標指向的那一塊記憶體區域:強制轉換型別、明確資料佔據的記憶體大小。例如 gdb 中列印 vector[0] 或者 vector[i] 的命令就必須寫成這樣:
print *((unsigned long*)(vec->data + 8*i))
當無法修改程式原始碼只能用 gdb 時,列印乙個 vector 陣列是相當蛋疼的事情,好在 gdb 提供了乙個自定義命令的功能,或者說可以先把自定義的命令寫成一串指定儲存到文字中,然後在 gdb 中載入這個檔案就可以使用這個命令了:
define printvecgdb 內寫指令碼除錯程式set $total = $arg0->n_element // arg0 表示輸入的第乙個引數,arg1 類推
set $i = 0
print $total
while ($i < $total)
print *((unsigned long*)($arg0->data + 8*$i))
set $i = $i+1
endend
(gdb) source cmd.txt
(gdb) printvec vec
GDB除錯程式
gdb的三個功能 1 啟動被除錯的程式 2 設定斷點 3 設定斷點之後可以檢查程式的狀態 1.編譯生成可執行檔案 注意 g 除錯選項 gcc g tst.c o tst 2.啟動gdb gdb tst 3.在main函式處設定斷點 break main 4.執行程式 run5.利用 更加豐富的 gd...
gdb除錯程式
除錯是每個程式設計師都會面臨的問題.如何提高程式設計師的除錯效率,更好更快地定位程式中的問題從而加快程式開發的進度,是大家共同面對的問題.可能windows使用者順口就會說出 用vc唄 它提供了設定斷點,單步跟蹤等的圖形介面,使除錯起來直觀易用.但linux使用者可能要生悶氣了 o 難道我們linu...
GDB除錯程式
gdb是gnu發布的一款功能強大的程式除錯工具。主要功能 1.啟動被除錯程式。2.讓被除錯程式在指定位置停住。3.當程式被停止時,可以檢查程式狀態 如變數值 編譯生成可執行程式一定要加 g選項 gcc g test.c o test 啟動gdb gdb 可執行程式名 gdb test 在main函式...