18.调试相关-AndroidLogcat-堆栈跟踪实用工具
18.1 知识点
堆栈跟踪实用工具的作用
目前我们使用Android Logcat连接真机进行测试时,打印、警告、报错等信息都会直接在主窗口中打印出来让我们进行分析。相当于它帮助我们进行了自动的堆栈跟踪解析。
什么是自动堆栈跟踪解析呢?就是我们可以在打印窗口看到具体是哪个脚本的哪行代码出现了打印、警告、报错等信息。
例如下图中,改成调试模式后构建运行,点击测试按钮可以看到123123是从什么堆栈打印的。

而Tools(工具)中的Stacktrace Utility(堆栈跟踪实用工具)的作用是允许我们复制粘贴自定义日志并解析堆栈跟踪。
主要用于没有真机连接设备调试时,或者正式发布版本后:获取应用程序日志,将日志复制到该工具中做 堆栈解析(一般项目会在崩溃后于本地存一份崩溃日志,再取回分析)。
因为这种情况下的日志信息中,不会明确指明是哪个脚本哪行代码,往往是一堆看不懂的符号,我们可以使用该工具进行解析。
比如:下面这个打印信息就是安卓的原始日志:
E CRASH : #01 pc 01c65330 /data/app/com.CrashComp.Crash-J2Z_L0XSsSAZPkt9lab2rQ==/lib/arm/libunity.so
(DiagnosticsUtils_Bindings::ForceCrash(DiagnosticsUtils_Bindings::ForcedCrashCategory, ScriptingExceptionPtr*)+48)
这里面都是一堆特殊符号,并没有明确告诉你哪个脚本哪行代码。通过堆栈跟踪实用工具解析后,就能够对应到脚本与行号(在符号齐全的前提下)。
总而言之,该工具用来把 发布后抓到的原生风格日志 解析成更可读的堆栈信息。
打开Stacktrace Utility窗口

堆栈跟踪实用工具的使用

A:堆栈跟踪显示相关
Original:初始日志
是一个输入框,将待解析的日志粘贴到下方输入区域。
Resolved:已解析的日志
解析后的内容显示在该页签下方。
B:堆栈跟踪实用程序设置相关
Resolve Stacktraces:解析堆栈跟踪
点击后,会解析初始日志,并自动跳转到 Resolved 页签。Configure Regex:配置正则表达式
堆栈解析实用工具使用正则表达式来解析内容,默认是包含解析内容的地址、库名的正则表达式的,不需要我们设置,除非有特殊需求才会添加自定义正则表达式。Configure Symbol Paths:配置符号路径
我们需要指定安卓包文件的路径,3个重要包文件为:- libmain.so
- libunity.so
- libil2cpp.so(il2cpp模式时需要使用)
.so 在角色上类似 Windows 下的 DLL,内含原生代码符号信息;要解析堆栈就必须配置这些 .so 的路径。
点击后会跳转到 Project Settings 中与 Android Logcat 相关的设置页,可添加符号路径,指向对应的 .so。

打包时 Create symbols.zip 选 Debugging 时,构建产物会多出符号包;解压后可得到 .so 等,把路径配进 Android Logcat 的符号设置后,即可用于 Resolve Stacktraces。


总结
使用堆栈跟踪实用工具可以解析自行获取的安卓日志。使用流程是:
- 设置项目的so文件路径。
- 将日志信息复制到Original(初始)页签中。
- 点击Resolve Stacktraces(解析堆栈跟踪)。
- 在 Resolved(已解析的日志) 页签中查看解析结果。
注意:我们在电脑连接安卓设备通过Android Logcat进行调试时一般不使用该功能,只有当非连接调试时,获取了安卓崩溃日志后才会使用该功能。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com