堆栈 一般是指java层的或jni层发生crash时候的函数调用序列,最顶层就是发生异常的地方,有的情况下这个堆栈并不一定完整。映射代码基本上指应用层(java 或kotlin),是为了方便将错误定格到代码上,也就是本文讲的内容。但建议小伙伴们要逐渐脱离这样的工具,能自己直接定格,这样效率会更高。至于jni的,需要进行相关的函数表配置,总体思路都是一样的。
调试中的堆栈轨迹
调试应用通常需要使用堆栈轨迹。每当您的应用因为错误或异常而崩溃时,都会生成堆栈轨迹。可以使用 Thread.dumpStack() 等方法输出应用代码中任意位置的堆栈轨迹。
在连接的设备上,当应用在调试模式下运行时,Android Studio 会在 logcat 视图中输出并突出显示堆栈轨迹,如图 1 所示。
图 1. Logcat 中的堆栈轨迹。
堆栈轨迹会显示导致抛出异常的方法调用列表,以及调用发生的文件名和行号。可以点击突出显示的文件名,以打开相应文件并检查方法调用的来源。点击 Up the stack trace 图标 和 Down the stack trace 图标 可以在 logcat 窗口中显示的堆栈轨迹行之间快速移动。
从外部来源打开堆栈轨迹
有时,需要分析线上错误报告中的堆栈轨迹,而不是在调试时发现的堆栈轨迹。例如,可能正在通过 Google Play 管理中心或一些其他工具(例如Firebase Crash Reporting,bugly,友盟)收集用户设备上生成的堆栈轨迹。
对于来自错误报告的外部堆栈轨迹,要获取相同的突出显示且可点击的视图,请按照以下步骤操作:
- 在 Android Studio 中打开app对应的项目。
注意:请确保正在查看的源代码的来源应用版本与生成堆栈轨迹的应用版本完全相同。如果代码不同,文件名与行号会不匹配,或堆栈轨迹和项目中的调用顺序会不一致。 - 从 Analyze 菜单中,点击 Analyze Stack Trace。
- 将堆栈轨迹文本粘贴到 Analyze Stack Trace 窗口中,然后点击 OK。
- Android Studio 会在 Run 窗口下打开一个新的 <Stacktrace> 标签页,其中包含您粘贴的堆栈轨迹。
监控剪贴板,确定是否有新的堆栈轨迹
如果经常使用外部堆栈轨迹,则可以通过允许 Android Studio 持续监控系统剪贴板上是否有新的堆栈轨迹,提高工作效率:
- 打开 Analyze Stacktrace 工具。
- 选中 Automatically detect and analyze thread dumps copied to the clipboard outside of IntelliJ IDEA 复选框。
- 将其他应用(例如来自网络浏览器的应用)中的堆栈轨迹复制到系统剪贴板。
- 当返回到 Android Studio 窗口时,相应堆栈轨迹会自动在 Run 窗口下打开,而无需将其粘贴到“Analyze Stacktrace”窗口中。
|