1. 程式人生 > >gdb 除錯COREDUMP方法

gdb 除錯COREDUMP方法

COREDUMP是NE程序的記憶體現場, 其中包含了出現NE時的區域性變數, 全域性變數等資訊, 這些資訊有助於我們結合程式碼分析問題。 gdb路徑 :prebuilts/gdb/linux-x86/bin/gdb 建議在原始碼根目錄下執行, 可以通過gdb檢視原始碼和列印變數成員.

常用指令說明幫助指令cmd 為對應命令, 會顯示該命令所支援的引數和功能。

1.help [cmd]

cmd 為對應命令, 會顯示該命令所支援的引數和功能

2.設定 so 庫路徑

set solib-search-path [path]

path 為帶符號的庫路徑, 一般是指向 track.zip 中 symbol/system/lib 這個目

3.設定崩潰程式的路徑

file [path]

path 為帶符號的可執行程式路徑, 一般指向 track.zip 中 symbol/system/bin/ 這個目錄下的檔案。 所有的 java 程序都執行的是 app_process32 或者 app_process64

4.載入COREDUMP檔案

core-file [path]

path 指向 PROCESS_COREDUMP 檔案的路徑

5.檢視堆疊

bt

如果想同時看本地

bt full

6.跳函式幀

f [id]

id 就是 # 對應的數字

7.檢視該函式幀的資訊

可以當前所在幀檢視它前一幀和後一幀, 引數地址和相關暫存器值。

info frame

8.檢視彙編

disass/m

建議引數 /m, 可以結合原始碼檢視, 前提是gdb的工作路徑在原始碼根目錄下

9.變數列印

p 命令 p 命令可以列印變數的值。 預設情況下, gdb只支援基本型別的變數, 可以用類似C的型別轉換列印

x 命令 x 命令預設是列印記憶體。同樣是列印 (char)pid, x 命令會訪問對應的記憶體地址, 而p只是列印了值。 x pid 相 當於是 p *pid

x 命令的基本格式:

x/nfu <addr> n 表示要顯示的記憶體單元個數 f 表示顯示方式, 基本取值如下: x 表示十六進位制格式顯示變數 d 表示十進位制格式顯示變數 u 表示十進位制無符號顯示變數 o 表示八進位制格式顯示變數 t 表示二進位制格式顯示變數 u 表示一個地址單元的長度 b 表示單位元組 h 表示雙位元組 w 表示四位元組 g 表示八位元組