调试启动过程中的 Android Native Code Crash

记录一下,最后成功使用的工具是 lldb + lldb-server,不需要 root 权限。我最先尝试使用的是,gdb + gdb-server 在 attach 后总是 crash,总感觉指令集有点问题,尝试编译一个 target platform 是 arm64 的 gdb,但是也没有成功。要求调试的包需要设置 debuggable。 在设备上启动 lldb-server 首先是要把 lldb-server 推送到设备上,然后用包体的权限运行,然后让应用启动后等待调试。

在设备上启动 lldb-server

首先是要把 lldb-server 推送到设备上,然后用包体的权限运行,然后让应用启动后等待调试。
D:
cd D:\SDK\Android\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang\11.0.5\lib\linux\aarch64
adb push lldb-server /data/local/tmp
adb shell chmod +x /data/local/tmp/lldb-server
adb shell run-as package_bundle_id killall -9 lldb-server
sleep 1
adb shell run-as package_bundle_id cp /data/local/tmp/lldb-server /data/data/package_bundle_id/
adb shell am start -D -n "package_bundle_id/android.app.NativeActivity"
adb shell run-as package_bundle_id sh -c '/data/data/package_bundle_id/lldb-server platform --server --listen unix-abstract:///data/data/package_bundle_id/debug.socket'"

lldb attach 到目标进程

在 windows 上启动 lldb 客户端连接上设备上的 lldb-server ,然后 attach 到目标进程。
adb shell run-as package_bundle_id  ps
lldb
> platform select remote-android
> platform connect unix-abstract-connect:///data/data/package_bundle_id /debug.socket
> attach <pid>

jdb

jdb 连接上目标进程。
adb shell run-as package_bundle_id ps
adb forward tcp:12345 jdwp:<pid>
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=12345

lldb 调试

lldb: continue 后就可以调试目标app的启动流程了,另外 lldb: add-dsym *.sym 指令就可以添加符号文件了,还是挺方便的。
 

关于权限问题:

root 用户直接设置全局 debuggable 试了没成功:

以前,设置 ro.debuggable = 1 后,可以用调试的方式启动 app, 并可以调试java层的代码,但是这次通过 lldb : attach 目标进程时,始终无法挂载,即使我用的是 root 权限运行的 lldb-server ,不太清楚 Android 是如何处理这块儿的权限的。

直接修改 apk 包 debuggable 权限:

不太想重新打包,直接用 apktool -d 解压后,修改 AndroidManifest.xml 后,再打回来,可行。

直接修改 aab 包 debuggable 权限

官方暂时还没有处理 aab 包体解包再打包的工具,StackOverflow 上的一些教程是通过 protoc 反序列化 AndroidManifest.xml 修改后重新插入 aab 包体。我试了,没成功,仍然没有调试权限,只能重新打包~

Android Native Code 手动调试的更多相关文章

  1. NDK开发历程(一):android native code的调试方法

    引用:http://www.cnblogs.com/ychellboy/archive/2013/02/22/2922683.html 使用NDK在android上做开发是一件“痛并快乐着”的差事,之 ...

  2. GDB + gdbserver 远程调试android native code

    原文地址:GDB + gdbserver 远程调试android native code 作者:tq08g2z 以调试模拟器中的native library code为例. Host: ubuntuT ...

  3. ndk-gdb 对java/native code联合调试(升级版)

    之前写过一篇 关于android native 开发,调试的文章(http://www.cnblogs.com/yaozhongxiao/archive/2012/03/13/2393959.html ...

  4. React Native 真机调试(iOS / Android)

    React Native 真机调试(iOS / Android) https://reactnative.dev/docs/running-on-device https://developer.ap ...

  5. Android FrameWork 学习之Android 系统源码调试

    这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...

  6. 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...

  7. Building Projects with Native Code

    [Building Projects with Native Code] 1.安装Node(v4.0以上).Python2.JDK(v8.0以上). 添加 JAVA_HOME环境变量,指向 JDK 的 ...

  8. Android Studio xcode单步调试 WebRTC Android & iOS

    mac环境 如何在 Android Studio 里单步调试 WebRTC Android 的 native 代码. WebRTC 代码下载 depot tools 是 chromium 代码库管理工 ...

  9. [转][android][利用JNI技术在Android中调用、调试C++代码]

    在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在Android中会生成Linux系统下的.so文件(好吧,其实我基本没用过Linux). 没写过 ...

  10. Android native进程间通信实例-binder篇之——HAL层访问JAVA层的服务

    有一天在群里聊天的时候,有人提出一个问题,怎样才能做到HAL层访问JAVA层的接口?刚好我不会,所以做了一点研究. 之前的文章末尾部分说过了service call 可以用来调试系统的binder服务 ...

随机推荐

  1. ls access.log.?.gz

    因为日志文件每天都会打包, 所以昨天的问题可能就在今天的access.log/error.log文件里找不到了.如何找出个位数的log文件呢? 这里就有两种不同的匹配符号, *匹配多个, ?匹配一个, ...

  2. [NOIP1999 提高组] 旅行家的预算

    洛咕 题意:一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离 \(D_1\).汽车油箱的容量 \(C\)(以升为单位).每升汽油能行驶的距离 \( ...

  3. win11装wsl ubuntu操作记录

    应用商店安装Windows Subsystem for Linux Preview ubuntu 查看已经安装的WSL版本,以及分发版对应的VERSION wsl -l -v 看到Ubuntu版本是1 ...

  4. spring boot 导出数据到excel

    手把手教你springboot中导出数据到excel中 问题来源: 前一段时间公司的项目有个导出数据的需求,要求能够实现全部导出也可以多选批量导出(虽然不是我负责的,我自己研究了研究),我们的项目是x ...

  5. okHttp3源码简要分析

    首先看一下使用, public static void main(String[] args) throws IOException { OkHttpClient client = new OkHtt ...

  6. lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 4 and head, line 6, column 12 报错分析与解决方案

    报错分析: 我们检查代码没有任何问题,但报错显示:开始和结束标记不匹配. html:因为html是超文本标记语言,代码不规范也能解析. python:python是编程语言,代码不规范则解析不了. 解 ...

  7. APP的文件数据直传腾讯云COS实践

    简介 本文主要介绍基于腾讯云对象存储COS,如何快速实现一个app的文件直传功能.您的服务器上只需要生成和管理访问密钥,无需关心细节,文件数据都存放在腾讯云 COS 上. 架构说明 对于app应用,把 ...

  8. fabric学习笔记4

    fabric学习笔记4 20201303张奕博 2023.1.12 目前fabric存在的项目工程 Hyperledger Sawtooth 该项目由Intel 等企业发起和贡献的分布式账本平台,基于 ...

  9. Software--电商平台系统--P3 Product Catalogy 商品目录模块

    2018-01-15  15:25:20 商品目录 服务层 控制器层 ProductCate 服务层 Controller 控制器层

  10. 解决The following signatures couldn't be verified because the public key is not available: NO_PUBKEY FEEA9169307EA071 NO_PUBKEY 8B57C5C2836F4BEB

    问题 yang@k8s-master:/etc/apt/sources.list.d$ sudo apt update Get:1 https://mirrors.aliyun.com/kuberne ...