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 表示八位元組