章节内容
第一节 搜索bug关键字
第二节 应用奔溃定位
第三节 内存不足问题定位
第四节 异常死机重启
第五节 应用无响应(ANR)
第六节 OOM导致系统重启
第六节 代码调试技巧
第七节 关机分析
第八节 调试技巧
第一节 搜索bug关键字
当发生bug时,输出大量的log,可以通过搜索以下关键字快速的定位问题:
AndroidRuntime: FATAL EXCEPTION (应用程序中出现致命异常)
ArrayIndexOutOfBoundsException (数组越界)
on a null object reference (空指针)
Low on memory (内存不足)、leak (泄露)
crash (崩溃)、error(错误)、 FATAL、 EXCEPTION
WATCHDOG KILLING (发生定时狗导致系统异常重启)
held by (可能发生死锁)
第二节 应用奔溃定位
AndroidRuntime: FATAL EXCEPTION是 Android 应用程序中出现致命异常的标志,通常伴随着具体的错误类型和堆栈信息,用以定位和解决问题。
案例一分析:
【0424量产主干/中美客户/】hdmi信源下切信源到AV信源出现瞬间闪花屏,进入AV信源后AV信源黑屏显示,再次切信源AV还是黑屏,多切几次后出电视自动重启。
在log搜索AndroidRuntime关键字:
06-19 04:33:39.465 2195 2195 D AndroidRuntime: Shutting down VM
06-19 04:33:39.465 2195 2195 E AndroidRuntime: FATAL EXCEPTION: main
06-19 04:33:39.465 2195 2195 E AndroidRuntime: Process: com.realtek.tv, PID: 2195
06-19 04:33:39.465 2195 2195 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean com.realtek.tv.util.PipInputManager$PipInput.isPassthrough()’ on a null object reference
06-19 04:33:39.465 2195 2195 E AndroidRuntime: at com.realtek.tv.util.PipInputManager$1.onInputStateChanged(PipInputManager.java:113)
06-19 04:33:39.465 2195 2195 E AndroidRuntime: at com.realtek.tv.util.TvInputManagerHelper 1. o n I n p u t S t a t e C h a n g e d ( T v I n p u t M a n a g e r H e l p e r . j a v a : 95 ) 06 − 1904 : 33 : 39.46521952195 E A n d r o i d R u n t i m e : a t a n d r o i d . m e d i a . t v . T v I n p u t M a n a g e r 1.onInputStateChanged(TvInputManagerHelper.java:95) 06-19 04:33:39.465 2195 2195 E AndroidRuntime: at android.media.tv.TvInputManager 1.onInputStateChanged(TvInputManagerHelper.java:95)06−1904:33:39.46521952195EAndroidRuntime:atandroid.media.tv.TvInputManagerTvInputCallbackRecord 4. r u n ( T v I n p u t M a n a g e r . j a v a : 1352 ) 06 − 1904 : 33 : 39.46521952195 E A n d r o i d R u n t i m e : a t a n d r o i d . o s . H a n d l e r . h a n d l e C a l l b a c k ( H a n d l e r . j a v a : 958 ) 06 − 1904 : 33 : 39.46521952195 E A n d r o i d R u n t i m e : a t a n d r o i d . o s . H a n d l e r . d i s p a t c h M e s s a g e ( H a n d l e r . j a v a : 99 ) 06 − 1904 : 33 : 39.46521952195 E A n d r o i d R u n t i m e : a t a n d r o i d . o s . L o o p e r . l o o p O n c e ( L o o p e r . j a v a : 205 ) 06 − 1904 : 33 : 39.46521952195 E A n d r o i d R u n t i m e : a t a n d r o i d . o s . L o o p e r . l o o p ( L o o p e r . j a v a : 294 ) 06 − 1904 : 33 : 39.46521952195 E A n d r o i d R u n t i m e : a t a n d r o i d . a p p . A c t i v i t y T h r e a d . m a i n ( A c t i v i t y T h r e a d . j a v a : 8177 ) 06 − 1904 : 33 : 39.46521952195 E A n d r o i d R u n t i m e : a t j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( N a t i v e M e t h o d ) 06 − 1904 : 33 : 39.46521952195 E A n d r o i d R u n t i m e : a t c o m . a n d r o i d . i n t e r n a l . o s . R u n t i m e I n i t 4.run(TvInputManager.java:1352) 06-19 04:33:39.465 2195 2195 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:958) 06-19 04:33:39.465 2195 2195 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99) 06-19 04:33:39.465 2195 2195 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:205) 06-19 04:33:39.465 2195 2195 E AndroidRuntime: at android.os.Looper.loop(Looper.java:294) 06-19 04:33:39.465 2195 2195 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8177) 06-19 04:33:39.465 2195 2195 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 06-19 04:33:39.465 2195 2195 E AndroidRuntime: at com.android.internal.os.RuntimeInit 4.run(TvInputManager.java:1352)06−1904:33:39.46521952195EAndroidRuntime:atandroid.os.Handler.handleCallback(Handler.java:958)06−1904:33:39.46521952195EAndroidRuntime:atandroid.os.Handler.dispatchMessage(Handler.java:99)06−1904:33:39.46521952195EAndroidRuntime:atandroid.os.Looper.loopOnce(Looper.java:205)06−1904:33:39.46521952195EAndroidRuntime:atandroid.os.Looper.loop(Looper.java:294)06−1904:33:39.46521952195EAndroidRuntime: