使用GDB調試Android手機中的程序

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章