热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用ChkBugReport工具分析AndroidBugreport

本文介绍了如何使用开源工具ChkBugReport来解析和分析Android设备的Bugreport。ChkBugReport能够将复杂的Bugreport转换为易于阅读的HTML报告,并提供详细的图表和分析结论。

原文链接: http://www.androidlearner.net/using-chkbugreport-analysis-bugreport.html

一、ChkBugReport简介
ChkBugReport 是一个开源工具,它能够将你获取的Bugreport解析成易于阅读的HTML文件。生成的HTML文件包含基于Bugreport数据的各种图表和分析结论。

该工具的源码中使用了多个开源库,包括 jQuery、jsTree jQuery 插件、tablednd jQuery 插件、tablesorter jQuery 插件、js-hotkeys 和 jquery-COOKIE。如果你需要学习如何生成报告文档型的HTML,可以参考其源码。

目前,ChkBugReport可以从Bugreport数据中提取以下信息:
1. 堆栈跟踪 (Stacktraces): ChkBugReport 可以从Bugreport中解析出输出Bugreport的最后时刻、导致ANR(应用程序无响应)时刻以及其他关键时刻的堆栈信息。例如,你可以看到进程的优先级和策略,堆栈中耗时的部分会以黑色和红色标记,违反Strict Mode的行为(如在主线程中使用数据库)会以亮红色标记。如果线程发生死锁,报告的Errors部分会显示相关信息。
2. 日志 (Logs): 这部分对system、main和kernel日志进行分析,展示每个进程的内存使用情况、产生日志最多的程序、Activity的启动耗时、数据库操作耗时统计、对象被锁定的时间、AIDL调用时间、Activity和Service的生命周期及其在内存中的使用频率等。
3. 包信息 (Packages): 解析Bugreport中存储的packages.xml文件,展示一系列的包、用户ID和权限。
4. 进程信息 (Processes): 包括操作应用过程中产生的系统事件日志和内存使用信息。
5. 电池统计 (Battery statistics): 提供电池使用情况的统计信息。
6. CPU频率统计 (CPU Frequency statistics): 提供CPU频率的统计信息。
7. 原始数据 (Raw data): 将原始数据分割成小段。

ChkBugReport还可以检测到潜在的错误,这些错误会在输出报告的Errors部分中显示。你可以在输出报告的堆栈跟踪中找到死锁或违反Strict Mode的行为。

二、ChkBugReport使用方法

使用ChkBugReport非常简单:

1java -jar $HOME/Downloads/chkbugreport.jar $HOME/tmp/bugreport.txt

你也可以将chkbugreport.jar添加到PATH环境变量中,然后直接使用:

1chkbugreport thebugreport.txt

该工具将根据你的Bugreport数据生成一个名为bugreport_out的分析结果目录。

你可以使用以下命令获取Bugreport:

1adb shell bugreport > bugreport.txt

你还可以使用ChkBugReport分析Bugreport的部分数据,例如/data/anr/traces.txt:

1 chkbugreport -sl:the_system_log.txt -sa:traces.txt dummy

这将输出分析结果到dummy_out目录。
你甚至可以使用ChkBugReport分析traceview生成的数据:

1chkbugreport -t something.prof

Prof数据的生成方法如下:
1. 使用Eclipse插件traceview生成。
2. 手动生成:
a. 使用adb shell ps列出所有进程,并找到你要追踪的进程的PID。
b. 执行adb shell am profile PID start /data/profile.dat,开始分析。
c. 操作你的应用。
d. 执行adb shell am profile PID stop,停止分析。
e. 导出数据并清除临时文件:adb pull /data/profile.dat,adb shell rm /data/profile.dat。
f. 使用ChkBugReport进行分析:chkbugreport -t profile.dat。

chkbugreport的常见参数如下:

chkbugreport常用参数

其他参数(较少使用):

chkbugreport不常用参数

三、相关参考
1. 开源工具ChkBugReport介绍
2. ChkBugReport源码
3. ChkBugReport最新jar包下载地址
4. 使用ChkBugReport输出的报告示例
a. 简单的进程死锁示例
b. 两个进程相互调用对方的AIDL导致阻塞的死锁示例
c. 结合上述两个示例的情况(一个进程调用AIDL阻塞导致另一个线程死锁)


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
author-avatar
shadowsuyan3
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有