1. 程式人生 > >Android安裝GDB/GDB server

Android安裝GDB/GDB server

在沒有安卓系統原始碼,還想除錯系統程式碼檢視崩潰資訊的時候也可以用gdb或者gdbserver來除錯,但是手機裡沒有裝gdb或gdbserver。記錄一下手動安裝踩的坑:
首先,需要下載編譯好的gdbserver。官方渠道可以從ndk-toolchain中裡找,解壓後在/prebuild資料夾下找對應處理器架構的版本。
然後通過adb push到手機上。貌似即使手機root之後,adb push也只能push到/data/local/目錄下。
檔案push到手機後需要賦予可執行許可權:chmod +x 檔名,然後就可以執行命令了(自己測試是必須完整路徑名才能跑/data/loca/tmp/gdbserver。
最後還有一個坑,據說安卓4.1以後加入了PIE機制,會對執行的二進位制檔案進行安全檢查,我們自己傳上去的gdbserver通不過該檢查,會報如下錯誤:

error: only position independent executables (PIE) are supported.

參考知乎上的相關問題(https://www.zhihu.com/question/30575223
有答主給出兩個解決方案,但是方案一有風險,可能導致系統崩潰; 方案二需要給要執行檔案的原始碼,比較麻煩。
最後採用了看雪論壇給出的解決方案(https://bbs.pediy.com/thread-206084.htm):
該方案中給出了一個自定義的linker,把這個linker push到手機上後用該linker載入二進位制檔案(需要給linker也新增可執行許可權):

linkerPath/b gdbpath/gdbserver

然後就可以在android上使用gdb了。