移动端错误日志怎么拿?几招搞定App崩溃现场

手机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 日志默认不保存太久,发现异常最好当场导出,别等第二天再翻。