Ubuntu下正确姿势使用GDB调试Android Native进程
前言
对于Android Native进程大家是既爱又恨啊,爱的是它能为我们的Android世界带来别样的精彩,狠的是当它耍脾气奔溃或者是创造它的人不留神造歪了那后果可是天崩地裂而且还不能让人好好调试。除了常规手段debuggerd -b PID分析Native进程的traces信息或者待Crash后分析trace.txt日志外,也没有比较好的完善的调试手段。不,难道我们伟大的android世界就这么羸弱吗!当然不是它还有一个必杀技,可以通过gdb+gdbserver的经典组合来进行Android Native进程的调试。那么本篇的重任来了,我将和大伙一起探讨正确姿势使用GDB调试Android Native进程(主要介绍怎么开启GDB调试)。开干!
注意:本篇是以Android 8版本为基础进行讲解的。
一.前期知识储备
在正式开干前,让我们先磨磨刀,磨刀不误砍柴工吗!先把基础打牢固了,还怕啥牛鬼蛇神的给解决不了。
1.1 啥是GDB
这里不是经济频道说的不是GDP是GDB,GDB是GNU Project Debugger 的缩写,它也是很多开源软件的调试利器。它主要提供了如下几个功能点:
- 启动程序,可以按照自定义的要求随心所欲的运行程序
- 可让被调试的程序在所指定的断点处停住(断点可以是条件表达式)
- 当程序被停住时,可以检查此时程序中所发生的事
- 动态的改变程序的执行环境
最后盗用一张网上的GDB调试原理图,如下:

二.调试环境准备
前期知识已经储备OK了,那么得准备好调试幻境了。不然环境不好,就不能正确的使用姿势调试了。让我们一一准备。
2.1 准备好Ubuntu开发环境
- 当前首先你得安装了Ubuntu的操作系统,这个至于是用虚拟机安装或是其它方式,就不是本篇的讨论重点了。我这边的Ubuntu版本的信息如下,可以看到我当期的ubuntu版本信息是14.04,这里不做过多的讲解。
xxx@ubuntu:~/.android$ cat /proc/version
Linux version 3.19.0-25-generic (buildd@lgw01-20) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015
xxx@ubuntu:~/.android$
-
安装好Ubuntu操作系统后,必须取得Root权限,这个也不是本文的重点。
-
调试的终端可以在Ubuntu下环境通过adb进行真机调试,如果读者有不清楚怎么连接的,可以参考如下博客Ubuntu下正确姿势使用adb调试真机保证教会为止。
2.2 Android源码和编译环境准备
这个Android源码不管读者是偷的也好,抢的也好反正只要能搞到就行。譬如下面就是我的Android 8的源码环境,这里我是使用SSH将远程服务器挂载到我的虚拟机里里面的,至于怎么通过SSH挂载远程服务器目录可以参见篇章Ubuntu下使用SSH挂载远程服务器目录,其中hgfs就是我将远程服务器挂载的目录,如下所示:
[SPRD] xxx@ubuntu:~/hgfs$ pwd
/home/xxx/hgfs
[SPRD] xxx@ubuntu:~/hgfs$ ls
XXXX Code sections for review-XXX_20190708T1.docx ntfs.txt repo ssd vfat.txt
Code sections for review-xxx_20190708T1.docx ~$de sections for review-XXX_20190708T1.docx XxxxxManager.rar sourceisight Tools
[SPRD] xxx@ubuntu:~/hgfs$
[SPRD] xxx@ubuntu:~/hgfs$ cd ssd/
[SPRD] xxx@ubuntu:~/hgfs/ssd$ cd xxx/ap/idh.code/
[SPRD] xxx@ubuntu:~/hgfs/ssd/xxx/ap/idh.code$
[SPRD] xxx@ubuntu:~/hgfs/ssd/xxx/ap/idh.code$ ls
Android.bp bootstrap.bash compatibility device frameworks libcore packages prebuilts stack toolchain
art build cts docs hardware libnativehelper xxxdroid readme.md system tools
bionic chipram dalvik dump-all-packages.info imagefiles Makefile pdk sdk tags u-boot15
bootable code development external kernel out platform_testing XXXX.txt test vendor
[SPRD] xxx@ubuntu:~/hgfs/ssd/xxx/ap/idh.code$

构建Android编译环境:
这里我已经在服务器端编译过一次Android源码了,所以Android源码已经编译完成了,这里我只是构建一下Android编译环境,具体操作步骤如下:
source build/envsetup.sh
lunch //根据实际情况选择
==

本文详细介绍如何在Ubuntu环境下,利用GDB和gdbserver正确调试Android Native进程,包括环境搭建、权限设置及具体调试步骤。
最低0.47元/天 解锁文章
6844

被折叠的 条评论
为什么被折叠?



