gdb 遠端偵錯android進程

來源:互聯網
上載者:User

什麼是gdb

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

  1. 隨心所欲地啟動你的程式。
  2. 設定斷點,程式執行到斷點處會停住。(斷點可以是運算式)
  3. 程式被停住後,可以查看此時程式中發生的事。
  4. 動態改變程式的執行環境。

GDB遠端偵錯原理圖

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

遠端偵錯實戰

  • 在手機上啟動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簡化調試流程

  • 進入到源碼工程目錄下,進行環境配置,執行build檔案夾下的envsetup.sh和choosecombo xx xx xx 命令,這時就可以使用gdbclient了。
  • adb shell進入手機,像之前一樣開啟gdbserver。
  • 在pc端的源碼根目錄下,執行 gdbclient -e mediaserver -p 1234 #從1234連接埠調試mediaserver
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.