手机App突然闪退,用户只看到黑屏或白屏,你却连错在哪都不知道?别急,错误日志就是你的“现场录像机”。只要方法对,哪怕没连电脑、没装IDE,也能快速捞出关键报错信息。
安卓端:不用Root也能看日志
打开手机「设置 → 开发者选项」,先开启「USB调试」(如果没这选项,连续点击「关于手机 → 版本号」7次)。接着用数据线连电脑,在命令行输入:
adb logcat -d > error.log这条命令会把最近一次崩溃前后的完整日志导出成 error.log 文件。想缩小范围?加个过滤:
adb logcat -d | grep "FATAL EXCEPTION"直接揪出致命异常那一行,比如 java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference —— 这说明某处字符串是 null 却调了 .length(),问题立马定位。
iOS端:真机日志不求人
插上iPhone,打开 Mac 上的「控制台」App(Launchpad 里搜就行),左侧选中你的设备,顶部搜索框输入 App 名字,再点「任何进程」旁的小箭头,勾选「错误」和「故障」。App 崩溃瞬间,日志里会出现类似这样的内容:
Exception Type: EXC_CRASH (SIGABRT)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000
Triggered by Thread: 0
Application Specific Information:
*** Terminating app due to uncaught exception 'NSRangeException', reason: 'Cannot remove an observer...'重点盯住「Exception Type」「reason」和「Thread 0」堆栈,基本就能判断是数组越界、野指针还是通知未移除。
更轻量的办法:埋个简易日志开关
如果你是开发者,可以在 App 里加个隐藏入口(比如连续点击设置页标题5次),触发后弹出一个文本框,里面实时显示最近100行错误日志。核心逻辑就一句:
// Android Kotlin 示例
LogcatReader.readLastNLines(100).forEach { tvLog.append(it + "\n") }用户截图发给你,比口头描述“点一下就没了”靠谱十倍。
小提醒
日志别只盯着「Exception」,也看看前几秒的「W/ActivityManager」或「D/MyApp」——有时崩溃前已有内存告警或主线程卡顿,这才是根因。另外,iOS 日志默认不保存太久,发现异常最好当场导出,别等第二天再翻。