Ubuntu下正确姿势使用GDB调试Android Native进程

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

    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 //根据实际情况选择
==
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值