天天看點

gdb學習(二)[第二版]

print - 檢視變量值

ptype – 檢視變量類型

#ptype i

#ptype “aaa” 列印字元串”aaa”的類型

#ptype array 列印數組array的類型

#ptype main 列印main函數的類型

print array – 檢視數組

#p arr1

#p arr1[2] 檢視數組arr2第三個元素值

#p &arr1[2] 列印數組元素的位址

#p &arr1 列印數組首位址,與p &arr1[0]作用類似

print *array@len – 檢視動态記憶體

#p *arr2@10 

#p *arr2@15  #将數組越界之後的記憶體也列印出來了

#p *arr@10 #靜态的數組也可以改方式列印

#p arr[2]@2 #從arr[2]開始的兩個元素

#p arr@2 #列印兩個數組

print x=5 – 動态改變運作時資料

#print i = 1000

編譯錯誤:編寫程式的時候沒有符合語言規範導緻編譯錯誤【文法錯誤】。

運作時錯誤:編譯器檢查不出這種錯誤,但在運作的時候可能會導緻程式崩潰【如:記憶體位址非法通路】。

邏輯錯誤:編譯和運作都很順利,但是執行結果不對

段錯誤是由于通路非法位址而産生的錯誤。

1、通路系統資料區,尤其是往系統保護的記憶體位址寫資料。最常見就是給一個0位址指針指派 

2、記憶體越界(數組越界,變量類型不一緻等) 通路到不屬于你的記憶體區域

where指令 or bt指令:棧回溯,顯示導緻段錯誤的執行函數樹

gdb學習(二)[第二版]

wh指令檢視程式代碼視窗

gdb學習(二)[第二版]

1、core檔案

在程式崩潰時,一般會生成一個檔案叫core檔案。core檔案記錄的是程式崩潰時的記憶體映像,并加入調試資訊。core檔案生成的過程叫做core dump

2、設定生成core檔案

ulimit -c   #檢視core-dump狀态

ulimit -c 數字 (如:ulimit -c 1024)

ulimit -a #用于檢視目前所有狀态資訊

将ulimit -c unlimited寫入~/.bashrc,則預設會生成core檔案

3、gdb利用core檔案調試

gdb 程式名 [core-file] #如:gdb bugging core

繼續閱讀