GDB+gdbserver 遠程調試android native code


一、什么是gdb?

  它是gnu組織開發的一個強大的unix程序調試工具,我們可以用它來調試Android上的C、C++代碼。
  它主要可以做4件事情:

    1、隨心所欲地啟動你的程序。
    2、設置斷點,程序執行到斷點處會停住。(斷點可以是表達式)
    3、程序被停住后,可以查看此時程序中發生的事。
    4、動態改變程序的執行環境一。
  我們需要使用gdbserver依附到我們要調試的進程上,gdb通過adbd和手機上的gdbserver進行socket通信。

二、遠程調試實戰

  1、在手機上啟動gdbserver並attach你想調試的進程,並指定監聽調試命令的端口(此端口是手機上的端口)
     $ adb shell
     # ps   #查看要調試進程的PID
     # gdbserver :1234 --attach 96   #:1234是端口號,96 是進程ID

  2、使用adb做端口映射,將pc機上的端口定向到手機上gdbserver監聽的端口
     $ adb forward tcp:1234 tcp:1234   #端口映射,將pc機的1234端口映射到手機的1234端口

  3、啟動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    #繼續執行程序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM