Android動態除錯so 使用 gdb + gdbserver 啟動除錯的過程
在網上找了好久才找到一份能按照上面的步驟順利的進行除錯的文件。文件在最後有連結地址。
大概說一些 gdb + gdbserver 在Android 下進行動態除錯so的步驟:
準備工作:
1、找到 gdbserver 並 傳送到手機裡,gdbserver 的位置一般在NDK 目錄下的 prebuilt 資料夾內,prebuilt 資料夾內包含各種CPU下的檔案,手機一般是ARM,只需要把 android-arm 目錄裡面的 gdbserver 目錄裡面的gdbserver 這個檔案push 到 手機裡面就可以。從命令列中進入 gdbserver檔案所在的目錄,輸入"adb push gdbserver /data/local/tmp"把該檔案傳送到手機裡面。
2、找到gdb。該檔案一般位於NDK目錄下的 toolchains 資料夾下,尋找對應cpu的資料夾,一般選擇 arm-linux-androideabi-x.x ,進入此資料夾後,在其 "prebuilt\windows\bin"子目錄中可以看到以 "arm-linux-androideabi-XXX"開頭的可執行檔案,其中我們要找的檔案為"arm-linux-androideabi-gdb.exe"。可以把他名稱改為 "gdb.exe" ,然後在系統環境變數中加入該檔案的路徑,以便於以後可以直接通過命令列呼叫gdb。
需要注意的一點是:gdb 跟gdbserver的版本最好保持一致。
檢視gdb跟gdbserver版本的方法:
以下是我使用的版本,
然後進入除錯:
1、修改gdbserver的屬性,使其可以執行。"adb shell" --> "su" ,最好是使用root 許可權。然後進入到gdbserver目錄下,"cd /data/local/tmp" ,然後 "chmod 777 gdbserver"。只用修改一次即可。可以使用 "ls -l" 檢視當前目錄下的檔案屬性,確保 gdbserver 具執行的屬性。
2、使用 "gdbserver :23946 --attach xxPID"。注意,gdbserver 跟 ":23946"之間有一個空格,其中 "xxPID" 是要進行除錯的程序的PID。
3、使用 "adb forward tcp:23946 tcp:23946"進行轉發。
4、另起一個命令列,啟動gdb。啟動gdb後輸入 "target remote 127.0.0.1: 23946"。便可進行除錯