gcc和gdb簡單使用

讀書筆記

1 預處理in.c  out.i

gcc–E  b.c  –o  b.i  //讓程序在預處理結束後停止編譯過程 –E

2編譯 in.i  out.s

gcc–S  b.i  –o  b.s

3.彙編 in.s out.o

gcc–c  b.s  –o b.o

4鏈接 輸入爲.o和其他的代碼文件和庫文件

gccb.o  –o b

輸出b就是一個可執行文件

 

如何使用GDB

首先編譯時候要加入調試信息,用命令

gcc–g b.c –o b、、、、-g-ggdb-g3-ggdb3

打開gdb調試 b

命令:gdb b

運行:run  會顯示錯誤在那裏

回溯:backtrace(bt)顯示具體錯誤信息

顯示錯誤代碼 frame n

設置斷點 break(b)

break<function>在進入指定函數時停住

break<linenum> 在指定行號前停住

break+-offset 在當前行號的前面(+)offset處停住 (-)後

break if(condition)在什麼條件下停住

break沒有參數代表在下一條指令處停住

breakfilename:function/linenum在源文件filename的。。。處停住

break*address在程序運行的內存處停止

delete 1 刪除斷點 1是斷點的序號

break後面跟的那些參數很多其他的命令 比如list jump都可以用


watch i  變量i值有變化就停止


 

運行run(r)終止kill

單步進入函數step(s)

單步不進入函數next

 

print(查看運行時數據,print$符號使用,以及輸出格式)

print<expr> print/<fmt> <expr>

printa; print $;print $$;print $n

print/aa 顯示十六進制格式的a (Xduotacf)

print還可以賦值print a=100;

 

display 自動顯示命令

display<expr>  display/<fmt><expr>  display/<fmt><addr>

expr是一個表達式 fmt顯示格式 addr表示內存地址

undisplay<dnums>  delete display<dnums>  刪除顯示

disabledisplay<dnums> enable display<dnums> 失效或者恢復顯示 info display 顯示序號信息及是否有效等信息

顯示的每一個變量都會加一個序號dnum,對dnum操作即可實現刪除或者失效否

display/i $pc $pc 是gdb環境變量,就是指令的地址,/i表示顯示機器碼,也即是彙編代碼。停止時會顯示機器碼和代碼對應情形。

 

examinex查看內存

x/<n/f/u><addr>  fu是參數可以獨立或者聯合使用,n正整數表示顯示幾個內存的內容 ;f格式,支持s,i格式;u字節數,bhwg分別表示1248個字節

 

set命令很強大

info

list(顯示代碼)

quit(退出gdb)

watchbachtrace frame n examine signal return call make shell//這兩個需要系統支持(我的是在win7下mingw不可以,沒裝mnys)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章