天天看點

GDB+GDBServer調試技巧

調試檔案

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庫搜尋路徑)

繼續閱讀