Windows PC通過USB連接Android手機,而GDB在Linux PC上,如何調試手機上的程序? 可以使用GDB遠程調試。
(1)adb shell可以正常連接手機。將待調試的test.bin可執行文件push到手機。
(2)Windows PC和Android手機的端口映射
> adb forward tcp:5040 tcp:5040
其中第一個tcp爲windows的本地端口號,第二個tcp的端口號則爲手機上的端口號。如果端口號設置失敗則更換其他端口號,可能是端口被windows其他程序佔用。
(3)啓動手機上的gdbserver去監聽gdb的遠程連接
> adb shell gdbserver :5040 test.bin
如果手機中沒有gdbserver程序,需要從源碼編譯目錄中獲取該程序,然後adb push到手機的system/bin目錄下。gdbserver在源碼編譯目錄prebuilt\android-arm\gdbserver中。
執行成功,會有如下打印,test.bin啓動,處於待調試狀態:
Process /system/bin/test.bin created; pid = 666
Listening on port 5040
如果監聽失敗,重啓手機試試。
如果是調試一個系統中已經在運行的程序, 可以先ps查pid,然後執行命令:
> adb shell gdbserver :5040 --attach 777
(4)Putty中設置Windows PC和Linux PC的端口映射
在PuTTY -> Connection -> SSH-> Tunnels中設置:
Source port 填隧道的入口端口,即 5040;
Destination 填隧道的出口端口,要添加“localhost:”,即 localhost:5040;
下面的兩項分別選Remote和Auto類型;設置完成後之後,選“Add”保存。
最後注意選中Session -> Default Settings,點擊“Save”,將上述設置保存爲默認配置,否則下次啓動Putty又要重新設置,個人感覺這是Putty比較奇葩的地方。
(5)通過Putty連接Linux PC
(6)在Linux PC中啓動GDB進行遠程調試
啓動GDB。
在GDB中輸入命令,設置符號文件目錄:
set solib-absolute-prefix /home/Android/out/target/product/msm/symbols
set solib-search-path /home/Androi/out/target/product/msm/symbols/system/lib
在GDB中輸入命令,遠程調試Android手機:
target remote :5040
然後就可以正常調試了。
說明:
GDB的保存路徑:prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
Android程序的保存路徑:
1、帶調試信息 out/target/product/msm/symbols/system/bin out/target/product/msm/symbols/system/lib
2、不帶調試信息 out/target/product/msm/system/bin out/target/product/msm/system/lib