調試檔案
NDK中有對應檔案
- GDB用戶端:android-ndk-r21b/prebuilt/linux-x86_64/bin/gdb
- GDB Sever:prebuilt/android-arm/gdbserver、 prebuilt/android-arm64/gdbserver、
GDBServer啟動
- gd bserver --no-startup-with-shell :1234 my_program
- adb forward tcp:1234 tcp:1234
- target remote:1234
- file my_program
設定庫和源碼搜尋路徑
- set solib-search-path 設定so庫查找路徑
- dir 設定源碼搜尋路徑
具體搜尋原理可參考下面文章
https://sourceware.org/gdb/onlinedocs/gdb/Source-Path.html (source搜尋路徑)
https://blog.csdn.net/_xiao/article/details/23289971 (so庫搜尋路徑)
常見指令:
指令名 指令縮寫 指令說明
backtrace bt 檢視函數調用堆棧
frame f 檢視棧幀
list l 檢視源碼
print p 列印内部變量值
info i 檢視程式狀态
display disp 跟蹤某變量,每次停下來則顯示值
run r 開始運作程式
continue c 繼續程式運作,直到下一個斷點
break b 設定斷點
start s 開始執行程式
step s 執行下一條語句,若該語句為函數調用,則進入函數内的第一條語句
next n 執行下一條語句,不會進入函數内部執行
watch
監視變量值的變化
file
裝入需要調試的程式
set var name=v
設定變量的值
kill k 殺掉正在調試的程式
quit q 退出GDB環境
指令 含義
bt 列印目前線程調用棧
bt 10 列印tid=10的線程調用棧
thread apply all bt 列印所有線程的調用棧
f 5 切換到調用棧的第5層
t 10 切換到tid=10的線程
disassemble 檢視彙編代碼
info reg 檢視目前的寄存器值
info threads 檢視目前程序的所有線程
x /32wx 0x7198eb48 檢視記憶體
p (Method)0x6d682328 檢視符号
參考文檔
http://gityuan.com/2017/09/09/gdb/ (常見指令)
https://sourceware.org/gdb/current/onlinedocs/gdb.pdf (官方文檔)
https://sourceware.org/gdb/onlinedocs/gdb/Source-Path.html (source搜尋路徑)
https://blog.csdn.net/_xiao/article/details/23289971 (so庫搜尋路徑)