gdb 遠程調試android進程

原文:http://blog.csdn.net/xinfuqizao/article/details/7955346?utm_source=tuicoollinux

 

什麼是gdbandroid

它是gnu組織開發的一個強大的unix程序調試工具,咱們能夠用它來調試Android上的C、C++代碼。
它主要能夠作4件事情:
  1. 爲所欲爲地啓動你的程序。
  2. 設置斷點,程序執行到斷點處會停住。(斷點能夠是表達式)
  3. 程序被停住後,能夠查看此時程序中發生的事。
  4. 動態改變程序的執行環境。

GDB遠程調試原理圖shell

如圖上所示,咱們須要使用gdbserver依附到咱們要調試的進程上,gdb經過adbd和手機上的gdbserver 進行socket通訊。

遠程調試實戰app

  • 在手機上啓動gdbserver並attach你想調試的進程,並指定監聽調試命令的端口(此端口是手機上的端口)
$ adb shell
# ps   #查看要調試進程的PID
# gdbserver :1234 --attach 96   #:1234是端口號,96 是進程ID
  • 使用adb作端口映射,將pc機上的端口定向到手機上gdbserver監聽的端口
$ adb forward tcp:1234 tcp:1234   #端口映射,將pc機的1234端口映射到手機的1234端口
  • 啓動gdb向指定的pc機端口發信息開始調試
android_project_root/prebuilt/linux-x86/arm-eabi-4.4.3/$ ./arm-eabi-gdb   #使用項目下的gdb客戶端去鏈接gdbserver,gdb的類型要選擇針對手機平臺的,
    版本要和gdbserver一致。
<gdb> target remote :1234   #鏈接本地的:1234端口,此端口已經和手機的1234端口作好映射。
<gdb> file xxx/out/target/xx...xx/symbols/system/bin/mediaserver   #加載可執行程序,注意選擇symbols下的,若是調試的進程是app進程,
    這裏選擇app_process。
<gdb> set solib-search-path xxx/out/target/xx...xx/symbols/system/lib   #加載全部的動態鏈接庫,注意選擇symbols下的。
<gdb> bt   #查看調用堆棧
<gdb> list xxx/xxx..xxx/xxx.cpp   #查看相關文件
<gdb> b 100    #在文件的第100行打斷點
<gdb> c    #繼續執行程序

使用gdbclient簡化調試流程socket

  • 進入到源碼工程目錄下,進行環境配置,執行build文件夾下的envsetup.sh和choosecombo xx xx xx 命令,這時就能夠使用gdbclient了。
  • adb shell進入手機,像以前同樣開啓gdbserver。
  • 在pc端的源碼根目錄下,執行 gdbclient -e mediaserver -p 1234 #從1234端口調試mediaserver
相關文章
相關標籤/搜索