由於面試原因我特意總結一下gdb的用法,以免下次吃虧.
引數:f *** 匯入檔案
b number 設斷點
r 執行
n 執行一行
s 進入函式內部執行一小行
l 顯示**
si ni:彙編層用的除錯命令,用法和上面的n和s一樣
info break 顯示斷點
info threads 顯示當前所有的執行緒資訊
thread number 切換執行緒
d number 刪除number號斷點
c 繼續執行到下乙個斷點
bt 列印函式呼叫棧(可以用於檢視死鎖)
i registers 列印所有暫存器
disassemble 反編譯
檢視記憶體裡面的內容:
格式:x/
n、f、u、i是可選的引數,表示乙個記憶體位址
1) n 是乙個正整數,表示顯示記憶體的長度,也就是說從當前位址向後顯示幾個位址的內容
2) f 表示顯示的格式
3) u 表示將多少個位元組作為乙個值取出來,如果不指定的話,gdb預設是4個bytes,如果不指定的話,預設是4個bytes。當我們指定了位元組長度後,gdb會從指記憶體定的記憶體位址開始,讀寫指定位元組,並把其當作乙個值取出來。
4)i 把記憶體中的指令翻譯成彙編,彙編級別的除錯才能用上。
引數 f 的可選值:
x 按十六進製制格式顯示變數。
d 按十進位制格式顯示變數。
u 按十進位制格式顯示無符號整型。
o 按八進位制格式顯示變數。
t 按二進位制格式顯示變數。
a 按十六進製制格式顯示變數。
c 按字元格式顯示變數。
f 按浮點數格式顯示變數。
s 按字串格式顯示變數。
引數 u 可以用下面的字元來代替:
b 表示單位元組
h 表示雙位元組
w 表示四字 節
g 表示八字節
特殊用法:
1.條件斷點。b line if *** == yyy //當*** == yyy時候觸發第line行的斷點。
例如:(gdb) p record
$10 =
(gdb) p &record
$11 = (int (*)[10]) 0x8049740
(gdb)x/4uw0x8049740
0x8049740 : 12 76 48 62
(gdb)x/6ow0x8049740
0x8049740 : 014 0114 060 076
0x8049750 : 0136 021
設定條件斷點:
(gdb) b 13 if i == 8
breakpoint 1 at 0x80483fa: filegdb_condition.c, line 13.
gdb除錯命令
一 gdb常用命令簡介 rrun 執行.程式還沒有執行前使用 c cuntinue 執行到下一斷點處 qquit 退出tab tab命令補全功能 h help幫助s step 跟入函式 nnext 執行下一行的 如果是函式呼叫,也當作一行 執行到此函式返回 b breakpoint 設定斷點,用法 ...
GDB除錯命令
gdb的命令很多,本文不會全部介紹,僅會介紹一些最常用的。在介紹之前,先介紹gdb中的乙個非常有用的功能 補齊功能。它就如同linux下 shell中的命令補齊一樣。當你輸入乙個命令的前幾個字元,然後輸入tab鍵,如果沒有其它命令的前幾個字元與此相同,shell將補齊此命令。如果有 其它命令的前幾個...
GDB除錯命令
用gdb除錯程式 gdb概述 gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc bcb等ide的除錯,但如果你是在unix平台下做軟體,你會發現gdb這個除錯工具有比vc bcb的圖形化偵錯程式更強大的功能。所謂 寸有所長,尺有所短 就是這...