使用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