gdb常用功能

2022-08-15 22:30:20 字數 3009 閱讀 8997

1,除錯core dump 檔案

ulimit -c 1024:設定coredump檔案大小為1024,否則預設不會生成coredump檔案

gdb -c core:gdb除錯該coredump檔案

file a.out:指定符號表檔案

bt:列印堆疊資訊

2,插入斷點:

b/break  15

b  funcname

b  filename::linenum

b  預設在下一條指令停止

b if a=100

3,退出gdb

qquit

4,執行shell命令

shell clear

5,停止執行程式/恢復執行

斷點(breakpoint),觀察點(watchpoint),捕捉點(catchpoint),訊號(signal),執行緒停止(thread stops)

c/continue恢復執行

6,設定觀察點

watch 

rwatch  當expr被讀時停止程式

awatch  當expr被讀或寫時停止程式

7,維護停止點

clear    清除所有停止點,只有在程式執行時才起作用

clear 

clear 

d/delete  [breakpoints][range...]    刪除指定的斷點,breakpoints表示斷點號,range表示斷點號的範圍,如3-7

dis/disable  [breakpoints][range...]    禁用指定的斷點

8,單步執行

c/fg/continue    恢復程式執行直到下乙個斷點

step  單步count次,如果有函式呼叫,進入該函式內部執行

next  單步count次,如果有函式呼叫,不會進入該函式

finish    執行程式直到當前函式完成返回

u/until    執行程式直到完成當前迴圈體並返回

9,檢視棧資訊

bt/backtrace    列印當前函式呼叫棧的所有資訊

bt 列印棧頂上n層資訊

bt <-n>    列印棧低下n層資訊

f/frame  一般來說,程式停止時,當前棧就是最頂層棧,f/frame 0表示列印0層,即棧頂資訊,n表示列印第n層棧資訊,列印資訊比bt豐富

up  向棧的上面移動n層,如果沒有n,則表示移動一層

down  向棧的下面移動n層,如果沒有n,則表示移動一層

info  f/frame,列印更為詳細的資訊

info  args    列印當前函式的引數名及值

info  locals    列印當前函式中所有區域性變數的值

info  catch    列印當前函式中異常處理資訊

10,檢視源**

list  顯示程式第linenum行的周圍的源程式

list  顯示函式名為function的函式的源程式     

list    顯示當前行後面的源程式

list -   顯示當前行前面的源程式

一般是列印當前行的上5行和下5行,如果顯示函式是是上2行下8行,預設是10行,當然,你也可以定製顯示的範圍,使用下面命令可以設定一次顯示源程式的行數

set listsize 設定一次顯示源**的行數

show listsize    檢視當前listsize的設定       

list命令還有下面的用法:

list , 顯示從first行到last行之間的源**

list , 顯示從當前行到last行之間的源**  

list +    往後顯示源**

一般來說在list後面可以跟以下這們的引數:

行號<+offset>   當前行號的正偏移量

<-offset>   當前行號的負偏移量

哪個檔案的哪一行

函式名哪個檔案中的哪個函式

<*address>  程式執行時的語句在記憶體中的位址

11,搜尋源**

forward-search 

search  向前面搜尋

reverse-search  全部搜尋

12,源**在記憶體中的位置

info  line 

info  line 

13,檢視源**的機器碼

disassemble  function

14,檢視執行時資料

p/print 

p  /是輸出的格式,如果設定十六進製制輸出的話,就是/x

x  按十六進製制格式顯示變數。

d  按十進位制格式顯示變數。

u  按十六進製制格式顯示無符號整型。

o  按八進位制格式顯示變數。

t  按二進位制格式顯示變數。

a  按十六進製制格式顯示變數。

c  按字元格式顯示變數。

f  按浮點數格式顯示變數。

15,列印陣列

int *array = (int *) malloc (len * sizeof (int));

p  *array@len    @左邊是陣列位址,右邊是陣列長度

16,自動顯示,即程式停止或單步跟蹤時,變數自動顯示

display 

display  /

display  /

info  display    列印設定的自動顯示的變數資訊

17,檢視暫存器的值

info  registers

info  all-registers

info  registers 

需要注意的是,如果你的程式編譯時開啟了優化選項,那麼在用gdb除錯被優化過的程式時,可能會發生某些變數不能訪問,或是取值錯誤碼的情況。這個是很正常的,因為優化程式會刪改你的程式,整理你程式的語句順序,剔除一些無意義的變數等,所以在gdb除錯這種程式時,執行時的指令和你所編寫指令就有不一樣,也就會出現你所想象不到的結果。對付這種情況時,需要在編譯程式時關閉編譯優化。一般來說,幾乎所有的編譯器都支援編譯優化的開關,例如,gnu的c/c++編譯器gcc,你可以使用「-gstabs」選項來解決這個問題。

gdb常用功能

gdb作為強大的unix下程式除錯工具,也是乙個軟體,平時我常用的功能點如下 1 業務程序異常如掛住時,使用gdb的如下命令定位 gdb p pid info threads,檢視當前程序內所有執行緒執行最後停留的函式 2 業務程序coredump時,使用gdb定位崩潰點 info threads ...

SAP常用功能

1 sap外觀 幫助圖示右側的按鈕是customizing of local layout 定製本地布局 按鈕,可以用它來變更sap gui顯示介面的風格。2 sap導航 1 在sap print list視窗裡,如果不想在保持期內儲存系統假離線請求,在print screen list 列印頁面列...

IOS 常用功能

對xib檔案的處理 xib的載入可以通過 nsbundle maibundle loadnibnamed nsstring str owner nsstring temp dic nsdictionary dic 載入 xib的fileowner檔案。然後通過下標得到sub 如果要獲取xib中固定的...