抓取Android APP崩溃和无响应日志的小工具

本文介绍了一种通过adb程序与bat命令结合的方法,可在3~5秒内快速抓取Android设备上的crash和ANR日志。这种方法无需使用eclipse或其他IDE,也不需要手机root权限,极大地提高了日志抓取效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

 

在Android APP的测试过程中经常遇到crash和anr,开发人员习惯通过eclipse或者eclipse的ddms组件进行捕抓日志,测试人员常通过在dos窗口下adb命令的方式来抓取日志。前者的缺点是启动时非常耗时,后者呢则每次都要写命令也比较麻烦(需要截图时也存在这个问题)。

针对这样的情况,本文分享一个通过adb程序与bat命令组合的技巧来抓取日志,只要3~5秒即可获取崩溃日志,非常快捷。

 

1. 准备工作

一、安装JDK(好像不装也没关系,未实测)和ADB(V1.0.31版本或以上),网上很多指导方法,这里就赘述了。

二、在PATH环境变量中添加ADB路径。这样就能在任意地方调用ADB命令,如adb.exe的位置在c:\adb\adb.exe,则在path中加入c:\adb。

 

2. 制作捕获日志的批命令

一、制作捕获crash异常的批命令

将以下命令复制,制作成logcat.bat文件。logcat.bat可以放置任意位置(如:桌面)。

1

2

3

4

5

6

7

@ECHO OFF

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value'do set "dt=%%a"

SET timeStamp=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%

SET mutID=_mut

@ECHO ON

adb logcat -v time > .\"%mutID%_%timeStamp%_logcat.log"

pause

原理:

该工具的原理是bat文件调用adb工具,将手机运行日志拉到本地,并将实时日志也记录到本地。

用法:

当手机需要重现crash、或者x分钟内已经发生过crash(x≈15~30),点击此bat,logcat命令会将手机的logcat日志拉下来并实时记录,直到你关闭cmd窗口。然后在拉下来的txt中寻找fatal字眼,附近上下文即为crash日志。

二、制作捕获ANR异常的批命令

anr:Application Not Responding -- 程序无响应。

将以下命令复制,制作成“ANR捕获.bat”文件。“ANR捕获.bat”可以放置任意位置(如:桌面)。

1

2

3

4

5

6

@ECHO OFF

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value'do set "dt=%%a"

SET timeStamp=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%

SET mutID=_mut

@ECHO ON

adb pull data/anr/traces.txt traces_%timeStamp%.txt

原理:

同上,将手机的traces.txt拉到本地。手机发生anr之后可以用,但一般用不上。

 

三、优点与限制

  1. 手机无需root

  2. 无需eclipse支持

  3. 方便保存、查找日志

  4. 实时日志不能在cmd窗口回显

3. 演示

以抓取crash异常为例:

步骤1:将android手机连接电脑,开启开发者模式并允许usb调试;

步骤2:运行logcat.bat文件,会出现cmd窗口;

步骤3:①如果手机程序已经发生过crash,5秒后关闭cmd窗口;②如果是想重现crash,则在手机端重现后即可关闭cmd窗口。

步骤4:在logcat.bat的同级目录下会生成一份log文件,从文件中搜查FATAL关键字,便可找到崩溃代码。

 

https://img.mukewang.com/5c3df73300013be507170028.jpg

点击查看更多内容


作者:青春的小奋斗
链接:http://www.imooc.com/article/274028
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作

转载于:https://my.oschina.net/u/4000302/blog/3027720

<think>我们正在处理一个关于在Android 16(即Android 4.1 Jelly Bean)上抓取系统应用日志的问题。根据用户提供的引用,我们知道可以使用adb logcat命令来抓取日志。同时,引用中提到了几种过滤日志保存日志的方法。 由于Android 16是较旧的系统版本,但logcat的使用方式在较新版本中变化不大,我们可以参考这些引用内容来回答。 步骤分解: 1. 准备工作:安装ADB工具(包含在Android SDK中),并确保设备已启用USB调试模式。 2. 连接设备:通过USB连接设备到电脑。 3. 使用命令提示符或终端执行adb命令。 具体步骤: **步骤一:连接设备** - 在设备上进入“设置”->“开发者选项”,开启“USB调试”。(注意:Android 4.1中,开发者选项默认隐藏,可以通过点击“设置”->“关于手机”,连续点击“版本号”7次来激活) - 使用USB线连接设备电脑,并在设备上允许USB调试。 **步骤二:打开命令提示符或终端** - 在电脑上打开命令提示符(Windows)或终端(Mac/Linux)。 **步骤三:日志操作** - 首先,确保设备连接成功,输入命令: ```bash adb devices ``` 如果看到设备序列号,则表示连接成功。 - 进入adb shell(可选,非必须): ```bash adb shell ``` 但通常我们不需要进入shell就可以使用logcat。 - 清空日志(可选): 有时为了抓取干净的日志,可以先清空旧的日志: ```bash adb logcat -c ``` - 抓取日志: 最简单的抓取日志命令是: ```bash adb logcat ``` 但这会持续输出日志直到你按Ctrl+C停止。为了保存到文件,可以使用重定向: ```bash adb logcat > log.txt ``` 或者使用adb的选项直接输出到文件: ```bash adb logcat -d > log.txt # -d 表示抓取一次日志并退出 ``` - 过滤日志信息: - 按优先级过滤:Android日志有优先级:V(Verbose)、D(Debug)、I(Info)、W(Warning)、E(Error)、F(Fatal)、S(Silent)。例如,只显示Error级别以上的日志: ```bash adb logcat *:E ``` - 按关键字过滤:可以使用grep(在Linux/Mac)或findstr(在Windows)来过滤,例如: ```bash adb logcat | grep "MyApp" ``` 在Windows中: ```bash adb logcat | findstr "MyApp" ``` **步骤四:获取wifi状态信息(如果需要)** - 用户提到“获取wifi状态信息”,我们可以通过logcat来获取,但也可以使用其他命令,例如: ```bash adb shell dumpsys wifi ``` 或者 ```bash adb shell netcfg ``` 另外,引用[4]提到了dmesg,它是抓取内核日志的工具,在Android上也可以使用: ```bash adb shell dmesg ``` **停止抓取** - 如果使用持续输出的logcat(没有使用-d参数),按Ctrl+C停止。 注意事项: - 由于Android 4.1较旧,一些新版本的adb命令可能不完全兼容,但基本logcat命令应该可用。 - 如果遇到权限问题,可能需要root设备才能访问所有日志,但普通日志应用系统日志)通常不需要root。 根据引用[3],我们可以使用一个批处理文件(.bat)来快速抓取崩溃日志,这对于测试人员来说很方便。我们可以编写一个简单的bat文件,例如: ```bat @echo off adb logcat -d > log_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt echo Log saved to current directory. pause ``` 这个脚本会以当前日期时间命名日志文件。 最后,关于保存日志文件,除了重定向,还可以使用`-f`参数指定文件,但注意这样不会自动停止,需要手动停止: ```bash adb logcat -f /sdcard/log.txt ``` 然后使用`adb pull /sdcard/log.txt`将文件从设备拉取到电脑。 总结:在Android 16上抓取日志的方法与较新版本类似,主要使用adb logcat命令,配合过滤重定向来保存文件。 相关问题: 1. 如何在没有USB线的情况下使用adb抓取日志? 2. 如何实时监控Android设备的日志并过滤特定应用日志? 3. 在Android设备上,除了logcat,还有哪些工具可以用于系统诊断?</think>### 如何在Android 16上抓取系统应用日志 #### 📱 准备工作 1. **启用开发者选项** - 进入 `设置 > 关于手机`,连续点击 **版本号 7 次** 激活开发者模式 - 返回 `设置 > 开发者选项`,开启 **USB调试**(Android 4.1对应API 16)[^1] 2. **安装ADB工具** - 下载 [Android SDK Platform Tools](https://developer.android.com/studio/releases/platform-tools)(含adb) - 解压后配置环境变量或将工具目录加入系统PATH #### 🔧 抓取日志步骤 **步骤一:连接设备** ```bash adb devices # 确认设备连接成功(显示设备序列号) ``` **步骤二:基础日志抓取** ```bash # 实时输出日志到终端 adb logcat # 保存日志到文件(Ctrl+C停止) adb logcat > android_log.txt ``` **步骤三:高级过滤技巧** ```bash # 按优先级过滤(E=Error, W=Warning, I=Info) adb logcat *:E # 仅抓取错误日志 # 按TAG过滤(如WiFi相关) adb logcat -s WifiStateMachine # 按关键字过滤(如应用包名) adb logcat | grep "com.example.app" ``` **步骤四:崩溃日志专项抓取** ```bash # 清空旧日志抓取日志 adb logcat -c && adb logcat -v time > crash.log # 抓取ANR(应用无响应日志 adb pull /data/anr/traces.txt ``` **步骤五:系统内核日志** ```bash adb shell dmesg > kernel_log.txt # 内核启动驱动日志[^4] ``` #### 💾 日志保存与导出 ```bash # 直接保存到电脑 adb logcat -d > full_log.txt # -d参数抓取后自动退出 # 从设备导出日志文件 adb pull /proc/last_kmsg # 获取上次内核崩溃日志 ``` #### ⚠️ 注意事项 1. 遇到权限问题需Root设备(尤其`/data`目录日志) 2. 使用 `adb logcat -b radio` 可抓取基带/射频日志 3. 高负载时添加 `-v threadtime` 显示详细时间戳: ```bash adb logcat -v threadtime > timed_log.txt ``` #### 📱 无电脑方案(设备端抓取) ```bash # 在Android终端模拟器中执行 logcat -f /sdcard/log.txt & # 后台持续写入 ``` > 提示:对于WiFi相关问题,可结合 `adb shell dumpsys wifi` 获取完整WiFi状态信息[^1] --- ### 🔍 相关问题 1. 如何实时监控Android日志中的特定应用崩溃? 2. 没有Root权限时如何获取系统内核日志? 3. 除了logcat,还有哪些工具可以分析Android性能问题? 4. 如何自动化抓取Android崩溃日志并生成报告? [^1]: Android系统使用adb抓取WiFi日志的方式 [^4]: 抓取android日志:dmesg与logcat调试用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值