使用GDB调试Android Native层代码

2023-05-16

Author: Gary
Date: 2019-2-21
转载整理自:
https://wladimir-tm4pda.github.io/porting/debugging_gdb.html
https://www.cnblogs.com/liumce/p/8027559.html

1.环境安装与配置

编译安卓,具体步骤见:

https://www.cnblogs.com/liumce/p/8027559.html

安卓版本为android-6.0.1_r1,机型为Nexus 5。

2.手机启动监听

  1. 进入adb shell: $ adb shell
  2. 在shell中查询要监听的App的PID,以相机为例,可以看到camara进程的pid是1834:
# ps | grep camera 
camera    389   1     205556 8224  poll_sched b6d47a84 S /system/bin/mm-qcamera-daemon
u0_a25    1834  383   1926660 260764 SyS_epoll_ b6d48894 S com.android.camera2
  1. adb中设置监听
# gdbserver :5039 --attach 1834
Attached; pid = 1834
Listening on port 5039
Remote debugging from host 127.0.0.1

3.主机启动gdb调试

  1. 设置端口转发:
    $ adb forward tcp:5039 tcp:5039

  2. 启动Android源码中内置的定制版gdb:
    $ prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-gdb

  3. 在启动的gdb中,设置共享库位置:

(gdb) set solib-absolute-prefix /home/cc/bin/android-6.0.1_r1/out/target/product/product-name/symbols
(gdb) set solib-search-path /home/cc/bin/android-6.0.1_r1/out/target/product/product-name/symbols/system/lib
  1. 连接设备:
    (gdb) target remote :5039
    此时可以在adb shell中看到如下提示:
    Remote debugging from host 127.0.0.1

  2. 开始调试,设置断点:

(gdb) b frameworks/base/libs/hwui/renderthread/DrawFrameTask.cpp:71
No symbol table is loaded.  Use the "file" command.
Make breakpoint pending on future shared library load? (y or [n]) y

Breakpoint 1 (frameworks/base/libs/hwui/renderthread/DrawFrameTask.cpp:71) pending.
  1. 等待运行到断点处:
(gdb) c
Continuing.
Cannot access memory at address 0x1c

然后终端就阻塞在该处,但是在app中进行操作都没有触发断点,原因目前未知。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用GDB调试Android Native层代码 的相关文章

  • 单片机通用配置(基于STC12C5A60S2)

    快速导航 STC12已封装好的函数库 已封装成一个头文件方便调用 config h span class token macro property span class token directive keyword ifndef span
  • 解答:为什么判断一个数是否为素数时只需开平方根就行了!

    这属于算法上的问题 xff0c 好好考虑一下算法 xff0c 还要考虑一下素数的定义 素数是只有1和本身能整除的整数 所以在求素数的时候 xff0c 要将素数与1到素数本身中间的所有整数都相除 xff0c 看是否有整除的数 xff0c 如果
  • 使用adb命令从Android手机中取出已安装的app包,导出apk

    第一步 xff1a 首先连接手机 xff0c 连接的电脑可执行adb命令 查看电脑连接的设备 adb devices 查询需要导出的包名 xff08 这里可进行猜测 xff0c 也可用普遍逻辑 xff09 比如 xff1a 喜马拉雅 xff
  • Snorkel 学习笔记 简介与入门 LF TF SF Labeling Functions Transformation Function Slicing Function 示例

    文章目录 Snorkel简介与入门1 背景2 LF Labeling Function 标注函数3 TF Transformation Function 转换函数4 SF Slicing Functions 剪切函数Ref Snorkel简
  • 搜索框的实现(前后端交互)

    js文件 编写js脚本文件 创建服务器 添加路由 响应html文件 引入模块 const express 61 require 39 express 39 创建服务器 const app 61 express 设置端口 app listen
  • 树莓派刷机

    目录 一 树莓派刷机方法 xff08 一 xff09 二 树莓派刷机方法 xff08 二 xff09 一 树莓派刷机方法 xff08 一 xff09 0 准备一张SD卡 xff0c 和一个读卡器 xff0c 将SD卡插入读卡器 xff0c
  • Oracle 创建用户详解(create user)

    文章目录 1 概述2 操作 2 1 创建3 2 查询 3 表空间 1 概述 span class token number 1 span 实际开发中 xff0c 不同业务系统使用 span class token string 39 不同的
  • 关于高德地图添加Marker遇到的一些坑

    最近有一个需求 xff0c 是一个出行类的App xff0c 需要在乘客下单后在地图上显示乘客的头像以及司机的头像 这时候就需要在地图上插上一个marker ImageLoader loadLisenter mContext headUrl
  • [sumo]路网建立方法

    在sumo 中友两种创建路网的方法 xff0c 可以将路网理解为地图 xff0c 这里采用编写脚本文件的方式创建 一 xff0c 创建节点脚本 节点就是道图的拐点 xff0c 十字路口等其他一些路径变化的结点 下面以口字型环路为例介绍 xf
  • GO 权限管理之 Casbin

    GO 权限管理之 Casbin 我们来回顾一下上次分享的 GO中 gjson 库的应用和分享 xff0c 它主要是提供了一种非常快速且简单的方式从json文档中获取相应值 分享了 json与 gjson分别代表什么gjson 的简单使用gj
  • Android关闭SdcardFS

    Author Gary Date 2019 8 26 参考博客 xff1a https blog csdn net pen cil article details 79842706 由于项目先在Android6上进行实现的 xff0c 现需
  • 零基础树莓派无键盘鼠标显示器的初始配置方法

    Author Gary Li Date 2019 11 19 Ref https blog csdn net m0 37340681 article details 84262359 https www jianshu com p 3f4f
  • bash与dash的转换

    由于安装PetaLinux时需要设置 bin sh指向为bash xff0c 否则会报出错误 xff1a WARNING bin sh is not bash 转换的方法入下 xff1a 方法一 xff1a 查看当前是bash还是dash
  • Cosmos(ZYNQ)编译运行Linux系统

    Author Gary Data 2019 12 24 Ref ug1144 petalinux tools reference guide pdf https www cnblogs com vacajk p 6146146 html h
  • NR PDCCH (三)DCI传输过程

    微信同步更新欢迎关注同名 modem协议笔记 PDCCH 承载的data就是DCI xff0c 在PDCCH 盲检时需要用正确的RNTI进行解扰和CRC校验 xff0c 才能确认DCI是不是发送给UE的 xff0c 为什么是这样的decod
  • 创建虚拟块设备及挂载

    Author Gary Date 2020 9 16 Ref https www jianshu com p 889bc1621dc3 在学习一个文件系统时 xff0c 将其真正的挂载 xff0c 执行一些读写操作 xff0c 将其运行起来
  • Linux查看多种硬件信息的指令

    查看内存大小 xff1a cat proc meminfo 或者 lsmem 查看DDR版本 xff1a sudo dmidecode t memory grep 39 Type 39 查看内存厂商 xff1a sudo dmidecode
  • git删除子模块

    删除 gitmodules文件或者删除其中的对应项 rm gitmodules 2 从 git config删除相关部分 xff0c 例如 xff1a 3 删除cache git rm cached lt 子模块路径 gt 4 删除模块文件
  • Ubuntu搭建socks5服务

    更新源 xff1a sudo apt update安装 xff1a sudo apt install dante server备份原配置文件 xff1a sudo mv etc danted conf etc danted conf bak
  • 使用docker安装gem5

    编号又是一团糟 xff01 xff01 完全搞不懂CSDN编辑器的编号方法了 官方参考文档 xff1a gem5 Building gem5 实测里面的地址不知道为什么pull不了 xff0c 用了梯子也不行 现在有2个选择 xff0c 第

随机推荐

  • 从指定块地址中读出数据及F2FS inode分析

    有时候我们为了分析文件系统结构等目的 xff0c 需要从指定的块地址中读取数据出来分析 这时候我们可以用两个Ubuntu自带的工具 xff0c filefrag用于获取inode的块地址 xff0c dd命令或者nvme cli 仅适用于N
  • Hadoop3.1.1+Ubuntu18.04虚拟机三种部署方式

    一 xff0e 安装虚拟机 xff1a 在3台电脑中或者3个虚拟机中安装Ubuntu系统 xff0c 并测试三台电脑能互相ping通 二 xff0e 安装Java xff1a 1 在3台Ubuntu电脑中安装Oracle Java 8 由于
  • Spark 2.3+Ubuntu18简单安装过程

    安装Scala xff1a 到官网下载最新版本的scala 2 12 7 xff0c 并拷贝至虚拟机中 https www scala lang org download 解压 sudo mkdir usr lib scala sudo t
  • 2.6.34内核编译

    2 6 34内核编译 内核版本号 xff1a 2 6 34 15 系统版本号 xff1a 12 04 05 虚拟机 xff1a VMware 12 更新日期 xff1a 20181102 准备工作 下载Vmware并破解下载Ubuntu12
  • 32位内核增加系统调用

    32位内核增加系统调用 内核版本 xff1a 2 6 34 15 系统版本 xff1a Ubuntu 12 04 系统位数 xff1a 32位 更细日期 xff1a 20181102 一 修改系统调用表 在文件arch x86 kernel
  • 解决WinSCP连接虚拟机

    介绍一个 FTP客户端 IIS7服务器管理工具 作为FTP客户端 xff0c 它支持批量管理ftp站点 定时上传和定时下载 xff0c 定时备份 xff0c 且操作简洁 同时iis7服务器管理工具还是vnc客户端 并且支持批量管理管理win
  • Linux关闭MySQL的日志记录功能

    网上找了很多的博客 xff0c 但是位置都不对或者是个空文件 最终找到的配置文件位于 etc mysql mysql conf d路径下的mysqld cnf文件用管理员权限编辑文件 xff0c 在文件内添加 innodb flush lo
  • Python3 lambda,map,reduce,filter

    Python3 lambda map reduce filter 转载自 https www cnblogs com hf8051 p 8085424 html https blog csdn net BobYuan888 article
  • Spark+Python函数总结

    Spark 43 Python函数总结 整理自 https www cnblogs com yangzhang home p 6058076 html https blog csdn net nanruoanhao article deta
  • Spark + Python入门

    Spark 43 Python实践入门 整理自 xff1a https www cnblogs com yangzhang home p 6056133 html http spark apache org docs latest quic
  • Numpy函数总结

    Numpy函数总结 整理自 https www jianshu com p 83c8ef18a1e8 基础属性 引入模块 gt gt gt import numpy as np 创建一个list并转化为numpy数组 创建简单的列表 gt
  • pip提速方法

    Author Gary Date 2019 4 12 方法1 在pip参数中添加镜像源地址 豆瓣 xff1a http pypi douban com simple 清华 xff1a https pypi tuna tsinghua edu
  • 使ssh可以以root用户直接登录

    出于安全考虑 ubuntu默认不允许root远程登录 解决方案 安装openssh软件 sudo apt install y openssh server 编辑 SSH 的文件 sudo nano etc ssh sshd config 将
  • 安装Arduino以及ESP8266开发环境

    安装Arduino以及ESP8266开发环境 Author Gary 更新日期 2018 11 20 1 下载安装ArduinoIDE 没什么好说的 xff0c 下载地址 xff1a https www arduino cc en Main
  • 使用Screen来管理终端

    使用Screen来管理终端 转载整理自 xff1a https blog csdn net u013901768 article details 81189348 需要使程序一直运行的情况下 xff0c 可以采用开机自启动的方式 这里为了便
  • 终端关闭后让程序继续运行

    更新 实测此方法有问题 xff0c ctrl 43 z后进程会停止运行 xff0c 即使挂起了也没用了 xff0c 如需挂起后还能继续执行请参考https blog csdn net m0 37340681 article details
  • HiveDDL

    一 数据类型 1 基本数据类型 Hive数据类型 Java数据类型 长度 例子 TINYINT byte 1byte有符号整数 20 SMALINT short 2byte有符号整数 20 INT int 4byte有符号整数 20 BIG
  • Linux解除端口占用-kill进程总结

    Linux解除端口占用 需要解除端口占用时 xff0c 可以通过端口或者进程名查找进程 xff0c 再通过该进程的pid来杀掉该进程 xff1b 也可以通过进程名直接杀死进程 方法1 根据端口查找进程 sudo lsof i lt 端口号
  • Matplot学习总结

    数据可视化库Matplotlib学习总结 更新日期 20181109 安装 需要先安装numpy pip install numpy pip install matplotlib 如果下载速度慢可以参考 https blog csdn ne
  • 使用GDB调试Android Native层代码

    Author Gary Date 2019 2 21 转载整理自 xff1a https wladimir tm4pda github io porting debugging gdb html https www cnblogs com