解析bugreport,根据不同的log分析Android重启的原因
1. Normal reset
这种情况是最简单的,我们可以查看LAST_KMSG的最后一行,就可以得到相应的重启原因。
1 | Restarting system with command: *** |
- 如果为空,原因应为 adb reboot
- 如果是 bootloader, 原因应为 fastboot reboot
- 如果是其他明确的command, 可以按字面意思理解其原因
2. Random reboot
这种情况就是系统出错导致的重启。可以按一下四种情况去诊断其重启原因。
一般分为两个层面的重启,一种是hard reboot,一般是kernel 或者 radio-level的错误导致重启;另一种是在kernel正常运行的情况下Android runtime的重启,可能是由Deadlock,System server process crash或native crash导致的。
2.1 Kernel panic
诊断是否有kernel panic, 可以check kernel logs里是否有如下log
1 | [ 424.909515] Kernel panic - not syncing: Fatal exception |
2.2 Radio-side problem
Radio level的错误可以查看LAST_KMSG中是否有如下log
1 | [ 535.383270] ARM9 has CRASHED |
2.3 Deadlock
死锁的error log如下,可以从EVENT_LOG或者SYSTEM_LOG中查找。
1 | 04-04 14:06:16.888 885 1089 W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: null |
2.4 System server process crash
log如下,也是从EVENT_LOG或者SYSTEM_LOG中查找。关键字:
*** FATAL EXCEPTION IN SYSTEM PROCESS
1 | 01-01 12:45:11.950 E/AndroidRuntime( 4429): *** FATAL EXCEPTION IN SYSTEM PROCESS: main |
2.5 Native crash
Native crash的log都是从一行星号开始, 可以作为标志去SYSTEM_LOG中查找。
1 | 07-28 11:31:21.675: INFO/DEBUG(2880): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** |