前言

好困 ~😴 写点我觉得重要的吧,IOS和HarmonyOS NEXT这周写

为什么要抓原生页面的日志

  • 原生日志能够捕捉到与操作系统和应用框架交互的关键信息,包括性能瓶颈、崩溃报告和安全事件等,而这些是纯 H5 日志无法提供的,确保了对应用行为的全面监控和精准调试
  • Charles等抓包工具抓不到原生的请求
  • VConsole主要用于捕获和显示 H5 页面中的 JavaScript 日志信息和其他控制台输出
  • 面试时会问adb命令

举一个抓取原生日志的例子

混合应用中的支付功能异常

  1. 问题描述:在一个电商的混合应用中,用户在尝试完成支付时遇到了问题。具体表现为:当用户点击“确认支付”按钮后,页面没有响应,既没有跳转到支付成功页面,也没有任何提示信息。这种情况只发生在部分用户的设备上,且复现率较低,使得问题难以捉摸。

  2. 抓取日志前的初步排查:

  • 重现问题:测试团队尝试在多种设备和操作系统版本上重现该问题,但未能稳定复现
  • 用户反馈:从用户反馈中得知,问题似乎与特定银行的支付网关有关
  • 代码审查:开发人员检查了最近的代码更改,未发现明显的逻辑错误或潜在问题
  1. 使用日志进行深入分析:集成日志收集工具 ADB 实时捕获日志,重点监控支付流程
  2. 分析日志发现线索
[DEBUG] PaymentActivity: Initiating payment request to Bank XYZ...
[INFO] NetworkManager: Sending POST request to https://api.bankxyz.com/v1/payments
[WARN] NetworkManager: Received HTTP 500 Internal Server Error from server
[ERROR] PaymentHandler: Failed to process payment response due to unexpected status code 500

这段日志揭示了一个重要的细节——支付请求返回了 HTTP 500 错误,这意味着服务器端发生了内部错误。这解释了为什么页面没有响应,因为客户端接收到的是一个非预期的状态码,导致支付流程中断。

  1. 定位并解决问题
  • 联系支付网关提供商:向 Bank XYZ 的技术支持团队报告问题,并提供详细的日志片段以协助他们查找服务器端的问题
  • 改进错误处理机制:在客户端代码中增加对 HTTP 500 状态码的处理逻辑,给用户提供友好的提示信息(例如“支付处理失败,请稍后再试”),而不是简单地让页面无响应

Android Debug Bridge (ADB)

安装ADB

参考这篇文章👉windows下载安装adb(极其简单)
不需要安装 Android SDK Platform Tools。

连接设备

  1. 使用 USB 数据线将安卓设备连接到电脑
  2. 在设备上启用开发者选项
  3. 启用 USB 调试模式(在开发者选项中找到)

验证连接

打开命令行工具(Windows 上的 CMD 或 PowerShell,macOS/Linux 上的终端),输入以下命令以确认设备已正确连接:

adb devices

在这里插入图片描述
如果一切正常,你会看到列出的设备序列号

抓取日志

使用 adb logcat 命令来捕获日志输出。可以将日志保存到文件中以便后续分析:

adb logcat > logcat.txt

PS:要查看这里的 logcat.txt文件的位置:
Windows:cd
PowerShell:gl
macOS 和 Linux:pwd

如果你想过滤特定应用的日志(例如包名为 com.taobao.taobao 的应用),可以这样做:

adb logcat package:com.taobao.taobao:* *:S > taobao_log.txt
  1. adb logcat:
  • 这是 Android Debug Bridge (ADB) 的一部分,用于从安卓设备或模拟器捕获日志信息。logcat 是 ADB 提供的一个工具,专门用来查看和过滤系统日志
  1. package:com.taobao.taobao:*
  • package:指定按包名过滤日志
  • com.taobao.taobao:这是应用的包名,表示你只想捕获与该应用相关的日志
  • *:设置该包名下所有日志标签的日志级别为最高(即全部捕获)。这意味着无论日志的严重性如何(调试、信息、警告、错误等),都将被捕获。
  1. *:S
  • *:表示所有其他来源的日志标签
  • S:将这些来源的日志级别设置为静默(Silent)。这意味着除了 com.taobao.taobao 应用的日志外,其他所有日志都不会显示。
  1. > taobao_log.txt:所有符合条件的日志将被写入此文件

确定包名用以下的语句,列出设备上所有用户安装的应用的包名:

adb shell pm list packages -3

停止日志记录:按下 Ctrl+C 来停止日志捕获

注意点

权限问题:确保你有足够的权限来读取设备上的日志。对于某些定制 ROM 或者企业级设备,可能需要额外的配置。(我目前还没遇到过,等我后面遇到了再分享)

总结

文章介绍了抓取原生页面日志的重要性,举了混合应用中支付异常的案例,展示了如何利用日志定位并解决问题。文中还简要说明了 ADB 的安装、设备连接和日志捕获的具体命令及操作步骤。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐