导出ANR traces 文件(解决无权限、Permission denied)

当ANR 发生时,查看系统生成的traces 文件有助于我们定位ANR 产生的原因,那么我们该如何从手机中导出traces 文件呢?可以使用下面的方式
1. 老版本Android 系统导出traces

adb pull data/anr/traces.txt

针对Android 10 以下系统使用上面的命令可以导出traces 文件到运行该命令的当前目录下,如果导出到指定目录,只需在命令后面加上路径和文件名即可,例

adb pull data/anr/traces.txt ~/your path/traces.txt

但是,这个命令在Android 10 及以上是不能导出traces 的,是因为以前ANR 一直放在traces文件中,多次出现有覆盖的问题,高版本系统做了优化,会根据时间戳分别生成一个文件,打包导出。
这个时候,如果运行上面命令,会发现并不能找到traces.txt,如果我们使用adb shell 进入到设备的/data/anr目录,会发现有一些以时间戳命名的文件,它们其实就是traces 文件,

image.png

这时,如果我们使用adb pull 命令拉取traces 文件的话,会发现并没有权限
image.png

2. 新版本Android 导出traces
基于上面提到的问题,在新版本Android 中,应该使用如下命令导出traces

adb bugreport

该命令会导出一个zip 压缩包到当前目录(修改路径见上面示例),这个压缩包中包括了一些bug 信息,而traces 文件则包含在压缩包的FS/data/anr 路径下

image.png

上面也曾提到,新系统对traces 文件生成做了优化,多次ANR 会根据其发生的时间戳来命名,这样的话就可能会有多个traces 文件,那么哪个才是我们需要看的呢?

3. 找到目标traces

我们首先打开压缩包最外层目录下的bugreport-***.txt
搜索anr in 关键字,然后在搜索到的结果匹配我们应用的application id,然后向上滑动,找到 Dumping to /data/anr/filename 这一行,其中filename 就是traces 文件名。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简介:ANR问题是性能优化方面很重要的一个知识点,这里面主要考察的大家平时项目开发过程中的实践总结能力,这类问题不...
    沉淀者阅读 1,263评论 0 2
  • 前言 成为一名优秀的Android开发,需要一份完备的知识体系[https://github.com/JsonCh...
    我卡苏总我阅读 1,516评论 0 1
  • 概述: 当Android应用的UI线程被阻塞太久时,就会触发一个”Application Not Respondi...
    ModestStorm阅读 2,897评论 0 1
  • 场景 开发期间或者本地测试机器发生的ANR信息trace文件bugreport文件 线上应用获取用户使用过程中发生...
    南歌ccc阅读 1,687评论 0 0
  • 两种方法: android低版本 1.cmd进入到SDK的adb.exe路径下 2.检查路径下有没有anr文件,具...
    Maybe_G阅读 3,696评论 1 0