1 / 16

Android 常见问题及常用调试方法

Android 常见问题及常用调试方法. 常见问题. Java 异常 程序崩溃 (Native 端 ) 程序无响应 WTF 问题 多线程 / 进程同步问题 Android 重启. Java 程序异常比较简单,系统会抛出异常,当异常未被捕获并正确处理时,程序会终止,并输出调用 trace 通常根据 trace 可以查出出问题的原因 注意,有时候这个错误不是第一现场 注意,在第三方 app 时,可能被加扰. 程序崩溃 (Native 端 ) 需要结合 debuggerd 的信息, logcat trace 等分析,必要时需要接 gdb 进行调试. ANR 问题

zarola
Télécharger la présentation

Android 常见问题及常用调试方法

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Android常见问题及常用调试方法

  2. 常见问题 • Java异常 • 程序崩溃(Native端) • 程序无响应 • WTF问题 • 多线程/进程同步问题 • Android重启

  3. Java程序异常比较简单,系统会抛出异常,当异常未被捕获并正确处理时,程序会终止,并输出调用traceJava程序异常比较简单,系统会抛出异常,当异常未被捕获并正确处理时,程序会终止,并输出调用trace • 通常根据trace可以查出出问题的原因 • 注意,有时候这个错误不是第一现场 • 注意,在第三方app时,可能被加扰

  4. 程序崩溃(Native端) • 需要结合debuggerd的信息,logcat trace等分析,必要时需要接gdb进行调试

  5. ANR问题 • 应用程序无响应,超过一定时间未响应事件 • 通常会在 /data/anr下生成trace供分析 • 需要注意耗时工作不能在主线程中执行 • 需要注意,有时候可能会有anr,但系统未能捕获

  6. WTF: • What a terrible failure • 通常会在trace中记录下来,问题比较严重,影响系统进一步工作 • 发生概率不高 • Network的WTF,一直在报

  7. 多线程问题 • 死锁 • 持锁时间过长 • Java代码的问题:通过anr的trace可以分析到问题原因 • Native代码的问题:比较棘手

  8. Android重启,Android重启通常: • 发生以上提及的问题 • 发生问题的进程是核心进程(system server/zygote)

  9. 常用调试方法 • Logcat Trace • GDB调试 • Eclipse断点调试 • CallStack (Java/Native) • Debuggerd的分析 • ANR的分析 • Ps/top/vmstat等android工具分析

  10. Logcat Trace分析 • 常见的异常,如java的exception,error message及用户自定义的trace,可直接输出到logcat trace中分析

  11. GDB调试 • 小机上运行gdbserver,PC机上运行gdb • 转发端口: • Adb forward tcp:5039 tcp:5039 • Attach 调试进程 • gdbserver :5039 –attach <pid> • Gdb启动本地端调试(需要使用带符号库) • <arch-prefix>-gdb <out>/symbol/system/bin/app_process • 与server端连接,调试 • set solib-absolute-prefix <absoult_out_path>/symbol/ • set solib-search-path <absoult_out_path>/symbol/system/lib • target remote :5039

  12. Eclipse断点调试 • 普通应用程序 • Android SDK/eclipse 基本功能 • Android系统应用 • 参看《深入理解Android 卷II》 • 公司有购买多本,可借阅

  13. CallStack • Java • 抛出异常时,throwable类有实现callstack的logcat输出 • 系统出现异常会打印 • 可在代码中故意抛出异常处处 • 通过anr的trace输出 • ActivityManagerService.dumpStackTraces • Kill -3 <pid> • Native代码 • CallStack • C++直接使用 • CallStack stack; stack.update(); stack.dump(""); • C中需要封装C的接口函数

  14. Debuggerd • Native代码出现异常(常见为段错误)时输出 • Logcat中以 DEBUG tag • 系统在 /data/tombstones/下保存最近的10个 • 运行时分析出错进程状态,对错误现场解析并输出backtrace

  15. ANR分析 • 持锁时间过长的定位 • 死锁的定位 • 主线程卡住太久的定位 • 注:有时app不会出现anr提示,但也会卡住很久,可以自行产生anr的trace来分析

  16. Thanks!

More Related