1. 程式人生 > >使用GDB除錯android模擬器

使用GDB除錯android模擬器

使用android的模擬器可以除錯應用,也可以除錯C/C++程式碼庫。

除錯C/C++程式碼時,還可以使用GDB單步除錯程式碼,跟linux上一樣方便。

1. 準備android程式碼:從官網上下載程式碼,編譯整個系統,最好選X86的選項

   $source buid/envsetup.sh

   $lunch

    Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_mips-eng
     4. aosp_mips64-eng
     5. aosp_x86-eng
     6. aosp_x86_64-eng
     7. aosp_shamu-userdebug
     8. aosp_hammerhead-userdebug
     9. aosp_mako-userdebug
     10. aosp_flounder-userdebug
     11. aosp_manta-userdebug
     12. aosp_grouper-userdebug
     13. aosp_tilapia-userdebug
     14. aosp_deb-userdebug
     15. aosp_flo-userdebug
     16. full_fugu-userdebug
     17. aosp_fugu-userdebug
     18. m_e_arm-userdebug
     19. mini_emulator_x86-userdebug
     20. mini_emulator_arm64-userdebug
     21. mini_emulator_mips-userdebug
     22. mini_emulator_x86_64-userdebug

不同的系統,選項次序可能不同。在PC機上用模擬器除錯最好直接選用x86的編譯選項

2. 編譯得到的系統便可以啟動模擬器執行,如果要啟用GPU加快渲染速度,使用: emulator -gpu on

 以除錯httplive為例,說明如何除錯C/C++程式碼

1. 由於httplive屬於android多媒體服務,因此,可以檢視media的執行緒號來除錯

   $adb shell ps

system    937   1     10204  848   813e089c b2eda017 S /system/bin/servicemanager
root      938   1     16184  2608  ffffffff 9c993ab7 S /system/bin/vold
system    939   1     37664  4168  ffffffff d13ee93a S /system/bin/surfaceflinger
root      941   1     9924   760   8110c261 acaa993a S /system/bin/qemud
shell     944   1     10156  1104  81237267 5621c9f7 S /system/bin/sh
root      945   1     13244  524   ffffffff 0042472a D /sbin/adbd
root      946   1     12012  1604  8103d5cc 67b16a7a D /system/bin/netd
root      947   1     10884  1060  813f581c f7684003 S /system/bin/debuggerd
root      948   1     11084  1224  813f581c eac4cc7a S /system/bin/debuggerd64
radio     949   1     15736  1864  ffffffff b9313ab7 S /system/bin/rild
drm       950   1     24192  4492  ffffffff f761fe66 S /system/bin/drmserver
media     951   1     30272  6608  8109bebb f776dbd9 D /system/bin/mediaserver


install   952   1     10216  876   813f581c e9026c7a S /system/bin/installd
keystore  953   1     14616  2728  813e089c 2738d017 S /system/bin/keystore
root      954   1     382728 27000 ffffffff 2461825d D zygote64
root      955   1     358568 21804 ffffffff f3a03246 D zygote
root      963   2     0      0     8106d1a8 00000000 S kauditd
graphics  983   1     34252  7780  ffffffff 6e130017 S /system/bin/bootanimation
root      1242  945   12264  1476  00000000 6cbf59f7 R ps
root      1244  946   12012  464   00000000 67ab91a8 R /system/bin/netd

   $gdbclient 951

   在某一行打斷點:b xxx.cpp:35

   接著繼續執行: c

2. 啟動應用上的播放器,可以看到gdb已經可以運行了,這個時候的除錯就跟linux上的gdb完全一樣了

3. 由於android上的gdb 除錯屬於遠端除錯,因此,無法像linux上一樣繼續重新執行:run

    需要退出當前的gdb,重新進入,這個時候就需要把media程序殺掉,重新看一下media屬於那個執行緒號,重複步驟1

儘管gdb的除錯比linux上要麻煩點,但是能夠單步除錯,對於開發者來說已經很方便了。

相關推薦

使用GDB除錯android模擬器

使用android的模擬器可以除錯應用,也可以除錯C/C++程式碼庫。 除錯C/C++程式碼時,還可以使用GDB單步除錯程式碼,跟linux上一樣方便。 1. 準備android程式碼:從官網上下載程式碼,編譯整個系統,最好選X86的選項    $source buid/e

gdb除錯Android native程式碼

除錯環境:     Ubuntu 16.04,win10,android 7.1     其中,win10主機通過USB與被測試機連線,Ubuntu16.04上有android 7.1 SDK程式碼及編譯環境,通過本地網路與被測試機連線。 第一部分: 程式碼示例:

使用GDB除錯Android Native 層程式碼

--------------步驟:0. adb root0. adb shell0. ps | grep browser1. gdbserver :5039 --attach pid2. adb forward tcp:5039 tcp:5039 1. prebuilts/gcc/linux-x86/arm/

使用 GDB 除錯 Android 應用

GNU 工程偵錯程式(GDB)是一個常用的 Unix 偵錯程式。本文詳述使用 gdb 除錯 Android 應用和程序的方法。 除錯執行中的應用或程序 gdbclient 是原始碼庫中的一個 shell 指令碼除錯工具,它位於 android-7.1.1

如何使用gdb除錯android webkit核心程式碼

紅心地瓜 得益於指令碼的幫助,在Emulator中使用GDB除錯Native Code的設定非常簡單,比如我用gdb+gdbserver除錯webkit 1.  找到你的toolchain對應的gdb,在模擬器上是arm-eabi-gdb,在prebuild下,把它的目錄加到PATH裡面        

使用GDB除錯Android NDK native(C/C++)程式

$ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-gdb --eval-command="set solib-search-path ./debugging/lib

GDB除錯Android程式碼——環境搭建及除錯過程

[email protected]:~/java/adt-bundle-linux-x86_64-20140321/android-ndk-r10b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin$ adb forward

使用gdb除錯android原生程式

        Android NDK目錄下的gdb雖然可以除錯android程式,但是這個不包含符號資訊,除錯時需要設定Android系統動態連結庫的符號載入路徑,並且只能除錯擁有除錯資訊的原生程式,而一般情況下,使用 Android NDK編譯的原生程式都不包含除錯資訊

android模擬器中用gdb除錯linux kernel

首先需要建一個gdb.cmd裡邊存放一些初始化的命令: vim gdb.cmd set solib-absolute-prefix <linux kernel source path> target remote :1234 b start_kernel

網易MuMu模擬器除錯Android程式

在除錯模擬器時,發現網易 MuMu 模擬器無法直接除錯 Android 程式。下面分享一下除錯的方法: 1. 開啟網易 MuMu 模擬器 很重要,如果不開啟,下面操作完了,也是徒勞的。 2. 開啟安裝目錄 開啟 mumu 模擬器的安裝目錄 3. 開啟 cmd.ex

Android環境下的GDB除錯

gdb是GNU開發的針對Linux/Unix環境下程式的除錯工具。為了節約目標系統的資源,gdb通常採用gdb+gdbserver的方式進行除錯。 在Android GDB除錯場景下,gdb執行在PC端,gdbserver執行在Android系統中。在實際的除錯過程中,PC端的gdb參照

Ecplise除錯Android程式的問題——模擬器與真機同時存在時出現的

         問題背景:Ecplise配置好安卓開發環境後,直接用的真機除錯,沒有問題。之後下載了模擬器,除錯程式也沒有問題。當再次連線真機除錯時,出現報錯,不能在手機上執行。這種情況可能屬於偶然。 cons

Android模擬器 Mac 下 Android Studio 連 夜神模擬器 除錯

1. 夜神模擬器[mac] log檢視. 連調 Mac 下 Android Studio 連 夜神模擬器 除錯 https://www.cnblogs.com/lijiejoy/p/10005880.html 再用  adb logcat 命令執行後會以tail方式實時顯示

Android模擬器/真機除錯

使用ADB的方式 比較簡單粗暴的除錯方式,純控制檯的,除錯步驟如下 1. 找到你的模擬器所在的位置,然後找到adb的位置,新增到環境變數裡面 2. 修改你的cmd的編碼方式為65001 3. 修改辦法為chcp:65001 或者用我的cmd.re

Android 開發入門】使用Android模擬器預覽除錯程式

在上篇“走進Android開發的世界,HelloWorld”,我們建立了一個Android 專案 HelloWorld,並演示瞭如何通過USB連線手機檢視執行效果;而如果沒有手機或沒有對應型號的手機,又

gdb和gdbserver除錯android應用與可執行

學習android5.0以後的ART虛擬機器,看了看原始碼,比較頭疼,決定通過動態除錯的方式去學習。 Art虛擬機器有一個dex2oat的可執行程式。就想到了通過gdb和gdbserver來debug這個dex2oat。 記錄一下除錯方法: gdb執行在本地系統(wi

Windows下,Android模擬器除錯串列埠的方法

使用如下的命令將電腦的串列埠(COM1)對映到模擬器裡(ttyS2): $ emulator @4412 -scale auto -qemu -serial COM1 &說明: 4412是我的AVD的名稱;-scale auto表示自動縮放到合適的尺寸。 -qemu

Android模擬器使用PC端USB轉串列埠除錯

##Android模擬器USB轉串列埠除錯 最近公司需要做一個智慧手錶的指紋模組,在此硬體的基礎上,做一個指紋登記、驗證的系統應用拿 到指紋的開發板的時候,我整個人是懵逼的。這一塊電路板和模擬器連線除錯,完全沒做過啊,但是 任務都下達了,作為公司Andr

除錯Android程式,不使用模擬器,無需資料線真機除錯的方法

最近學習Android,在除錯程式的時候經常遇到模擬器啟動卡死,用數線連線手機有時候會不匹配,也會出現與程式本身無關的錯誤。所以,找到一個既不用模擬器,也無需資料線連線的解決方法,可以通過TCP/IP的方法來進行,也就是ADB通過網路來連線裝置,無需資料線。

Ubuntu下使用gdb遠端除錯android native程式筆記

使用gdb遠端除錯android native程式1.準備工作:android native程式:demoandroid 上執行的除錯工具:gdbserver,該程式位於ndk目錄/prebuilt/a