移动/游戏
调试 Capacitor 应用时如何查看和过滤…
需要查看 iOS 或 Android 真机/模拟器日志进行崩溃排查、按应用过滤或实时流式查看时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
调试 Capacitor 应用时如何查看通用
解决思路
- iOS 真机日志:用 `xcrun devicectl list devices` 列出设备,再用 `xcrun devicectl device log stream --device <UUID>` 流式查看;可加 `--predicate 'process == "YourApp"'` 过滤进程、`--level error` 过滤级别,或重定向到文件保存。
- iOS 模拟器日志:用 `xcrun simctl spawn booted log stream` 流式查看,配合 `--predicate 'process == "YourApp"'`、`--predicate 'subsystem == "com.yourapp"'`、`--level error`,或组合 `--predicate 'process == "YourApp" AND messageType == error'`。
- iOS GUI 方式:打开 Console.app,在侧边栏选择设备,点击 Start Streaming,用 `process:YourApp`、`subsystem:com.yourapp`、`"error"` 等搜索过滤;也可在 Xcode 的 Window > Devices and Simulators 中选择设备并 Open Console 查看崩溃报告。
- iOS predicate 常用写法:`process == "YourApp"`、`eventMessage contains "error"`、`subsystem == "com.yourapp.plugin"`、`category == "network"`、`messageType == error`、`process == "YourApp" AND messageType >= error`、`timestamp > now - 5m`。
- iOS 日志级别:default、info、debug(默认隐藏)、error、fault;查看 debug 需显式加 `--level debug`。
- Android 基础日志:用 `adb logcat` 流式查看;先清空再查看用 `adb logcat -c && adb logcat`;按 tag 过滤用 `adb logcat -s MyTag:D`;按优先级过滤用 `adb logcat *:E`;按包名过滤用 `adb logcat --pid=$(adb shell pidof com.yourapp.id)`;多 tag 用 `adb logcat -s "MyPlugin:D" "Capacitor:I"`;保存到文件用 `adb logcat > logs.txt` 或 `adb logcat -v time > logs.txt`。
- Android GUI 方式:在 Android Studio 的 View > Tool Windows > Logcat 中,用 `package:com.yourapp`、`tag:MyPlugin`、`level:error` 过滤,并保存常用过滤器。
- Android 使用 pidcat:`pip install pidcat` 安装,`pidcat com.yourapp.id` 按包查看,`pidcat -t MyPlugin com.yourapp.id` 按 tag 过滤。
- Android 日志优先级:V(Verbose)、D(Debug)、I(Info)、W(Warn)、E(Error)、F(Fatal)、S(Silent)。
- adb logcat 输出格式:`-v brief`(默认)、`-v process`、`-v tag`、`-v time`、`-v threadtime`、`-v long`、`-v color`;查看最近日志用 `adb logcat -d -t 100`;按时间查看用 `adb logcat -v time -T "01-25 10:00:00.000"`。
- Android 常用过滤:Capacitor 核心 `adb logcat -s "Capacitor:*"`;插件 `adb logcat -s "CapacitorNativeBiometric:*"`;WebView/JS 控制台 `adb logcat -s "chromium:*"`;JS 错误 `adb logcat | grep -i "js error\|uncaught"`;崩溃 `adb logcat | grep -iE "fatal|crash|exception"`;网络 `adb logcat -s "OkHttp:*" "NetworkSecurityConfig:*"`。
- iOS 崩溃日志:用 `xcrun devicectl device copy crashlog --device <UUID> ./crashes/` 拷贝;或在 Console.app 的 User Diagnostics Reports 查看;设备端在 Settings > Privacy > Analytics & Improvements > Analytics Data,Mac 端在 ~/Library/Logs/DiagnosticReports/。
- Android 崩溃日志:native 崩溃用 `adb shell cat /data/tombstones/tombstone_00`;ANR 用 `adb pull /data/anr/traces.txt`;综合报告用 `adb bugreport > bugreport.zip`。
- 可通过 MCP 工具以编程方式获取日志,例如 `mcp.ios.streamLogs({device:'booted', predicate:'process == "YourApp"', level:'debug'})` 和 `mcp.android.logcat({package:'com.yourapp.id', level:'D'})`。
- 解析日志技巧:iOS 提取 JS 日志用 `--predicate 'eventMessage contains "JS:"'`;Android 用 `adb logcat chromium:I *:S | grep "console"`;过滤网络请求 iOS 用 `--predicate 'subsystem == "com.apple.network"'`,Android 用 `adb logcat -s "NetworkSecurityConfig:*" "OkHttp:*"`;监控内存 iOS 用 `--predicate 'eventMessage contains "memory"'`,Android 用 `adb shell dumpsys meminfo com.yourapp.id`。
- 排查无日志:iOS 确认设备已信任(Xcode > Window > Devices)、重启日志流、检查 Console.app 过滤;Android 开启 USB 调试、`adb devices` 验证连接、`adb kill-server && adb start-server`。
- 排查日志过多:iOS 用 `--predicate 'process == "YourApp" AND messageType >= info'`;Android 用 `adb logcat --pid=$(adb shell pidof com.yourapp.id)`。
- 排查缺少 debug 日志:iOS 加 `--level debug`;Android 确认代码使用 `Log.d("Tag", "Debug message")` 等正确级别。
- 最佳实践:使用结构化日志并在消息中带上下文;添加时间戳便于关联事件;尽早过滤而非全量流式;重要日志重定向到文件;按环境合理使用日志级别(开发用 debug,生产用 error)。
适用边界 · 注意事项
- 未安装 Xcode 命令行工具(xcrun/devicectl/simctl)或 Android SDK 平台工具(adb)时无法使用对应命令。
- 设备未连接、未信任或未开启 USB 调试时无法获取日志。
- 需要非 Capacitor 框架的特定日志方案时,本技能中的包名/插件过滤示例需相应调整。