1.概览
native application在Android中一般指代无需虚拟机参与就可以运行的可执行程序。例如c/c++开发的一众HAL服务,但是像手机应用则不是naitve程序了,因为它是需要art虚拟机参与的。native appliction 在性能上一般是高于需要虚拟机运行的程序的。
本小节聚焦如何根据 crash 所给的报告来定位在源码中具体的行数,使用的工具就是 addr2line 。但是由AOSP编译的源码并不像pc中那般直接,不论是符号表、编译工具链都不是很好确定,所以在此做个总结。
2.编译工具链的确认 – addr2line
假设在AOSP环境下单独编译了native 应用程序 logPrintCppStyle
flagstaff@fakeserver:~/AOSPT/test/flagstaff/logging_test/logPrintCppStyle$ mmm . -j23
...
[100% 10/10] Install out_board_t_userdebug/target/product/board/system/bin/logPrintCppStyle
AOSP编译系统的功能非常的完善,在对应的out目录下可以找到编译过程中的所有日志,对于编译工具链的路径信息可以在文件 verbose.log 中找到
flagstaff@fakeserver:~/AOSPT/out_board_t_userdebug$ gzip -d verbose.log.gz
flagstaff@fakeserver:~/AOSPT/out_board_t_userdebug$ vi verbose.log
[1/6] PWD=/proc/self/cwd ~/AOSPT/prebuilts/clang/host/linux-x86/clang-r450784d/bin/clang++ -c ...
-o logPrintCppStyle.o logPrintCppStyle.cpp
可见AOSP编译系统使用的编译工具连为 clang++,这里也就可以根据clang++所在路径找到一整套的编译工具链了
flagstaff@fakeserver:~/AOSPT/out_board_t_userdebug$ ls ../prebuilts/clang/host/linux-x86/clang-r450784d/bin/
bisect_driver.py clang-format ld64.lld llvm-addr2line llvm-cxxfilt llvm-modextract llvm-readelf merge-fdata
clang clang++.real ld.lld llvm-ar llvm-dis llvm-nm llvm-readobj remote_toolchain_inputs
clang++ clang.real lld llvm-as llvm-dwarfdump llvm-objcopy llvm-size sancov
clang

本文介绍了如何在Android AOSP环境中使用addr2line工具定位native应用崩溃的源代码行数,涉及编译工具链确认、符号表查找以及crash报告的解析。重点在于理解编译过程和如何通过工具链找到正确的符号表来追踪问题根源。
最低0.47元/天 解锁文章
1842

被折叠的 条评论
为什么被折叠?



