Flutter应用崩溃生成Crashpad Minidump:如何处理并转为可读格式?
处理Crashpad Minidump并转成可读格式
1. 先把Minidump数据完整提出来
- 从Android Studio控制台里,把
-----BEGIN CRASHPAD MINIDUMP-----到-----END CRASHPAD MINIDUMP-----之间的所有内容(包括这两行)全复制下来 - 把复制的内容存成一个
.dmp后缀的文件,比如叫flutter_crash.dmp
2. 准备好对应的符号文件
要解析dump,必须有匹配的符号文件,分两类:
- Flutter引擎符号:如果用的是官方稳定版Flutter,直接去Flutter SDK的
bin/cache/artifacts/engine目录找对应架构(比如arm64-v8a)的符号文件或者带符号的库文件 - 应用自身符号:编译应用时生成的
app.so文件,路径一般是build/app/intermediates/merged_native_libs/debug/out/lib/[对应架构]/;如果是release包,编译时要加--split-debug-info参数保留调试符号,不然没法解析到具体代码行
3. 用Crashpad的minidump_stackwalk工具解析
Crashpad自带专门的解析工具minidump_stackwalk,操作步骤:
- 先拿到这个工具:要么从Crashpad源码编译出来,要么去Flutter SDK的对应工具目录里找(部分版本会自带)
- 运行命令生成可读报告:
执行完后,minidump_stackwalk flutter_crash.dmp [符号文件所在目录] > crash_report.txtcrash_report.txt里就有崩溃原因、调用栈这些可读内容了
4. 用LLDB调试解析(备选方案)
如果有完整的调试环境,也可以用LLDB直接加载dump:
- 启动LLDB并加载minidump:
lldb --core flutter_crash.dmp - 加载符号文件:
target symbols add /path/to/app.so target symbols add /path/to/flutter_engine_symbols.so - 查看崩溃时的调用栈:
这样就能直接看到崩溃发生时的线程调用栈,定位到具体代码位置bt
关键提示
- 符号文件的版本必须和崩溃时的应用、Flutter引擎版本完全一致,不然解析出来的调用栈会乱,根本没法用
- Release版本的话,一定要在编译时保留调试符号,不然只能看到一堆内存地址,找不到具体崩溃点
内容的提问来源于stack exchange,提问作者Nao Kreuzeder
相关产品推荐
相关产品推荐

