Android系统(172)---如何使⽤addr2line命令解析
nativebacktrace
如何使⽤addr2line命令解析native backtrace
有时遇到ANR问题,查看SWT_JBT_TRACES⽂件,发现有些是native backtrace,且GAT-LogView⽬前⽆法解析这种不规则的native backtrace。
这时可以到带symbols信息的对应lib库,使⽤addr2line解析pc指针,就可以得到native backtrace对应的代码⾏号。
解决⽅法:
带symbols信息的lib库位于out/target/product/{ProjectName}/symbols/system/lib/
注意:带symbols信息的lib库必须是与复现问题的⼿机bin档同⼀次build出来的才可以,必须是位于out/target/product/{ProjectName}/symbols/system/lib/这个⽬录下的lib库才可以,
从⼿机system/lib下adb pull出来的lib库不可以⽤来解析pc指针
Q:如何check lib库是否带有symbols?
A:将lib库copy到linux 开发环境下,在linux Terminal(终端命令⾏窗⼝)⾥⾯通过file命令来check:
file libhwui.so
android最新版
若印出的信息后⾯带有not stripped,则是带symbols信息;
若是stripped,则不带symbols信息;
addr2line使⽤⽅法:
步骤⼀:将需要解析的backtrace对应的lib库拷贝到android gcc⽬录下
若是64位lib库,将带symbols信息的lib库拷贝到任意⼀份Android L及以上版本的代码路径下:platform(alps)/prebuilts/gcc/linux-x86/aarch64/cit-aarch64-linux-android-4.9/bin/
若是32位的lib库,将带symbols信息的lib库拷贝到Android KK某版本对应代码下:
platform(alps)/prebuilts/gcc/linux-x86/arm/cit-arm-linux-androideabi-4.8/bin/
备注:黄⾊部分的路径不⼀定⾮要是cit开头的,在该⽬录下⼀个版本最新的⽬录进去即可
步骤⼆:⽤addr2line来逐⾏解析backtrace:
例如SWT_JBT_TRACES⾥⾯某2⾏trace是:
native: #02 pc 00077540  /system/lib64/libhwui.so
native: #03 pc 00051d90  /system/lib64/libhwui.so
那么如下命令就可以解析出上述trace的代码⾏号:
addr2line -C -e libhwui.so -f 0x77540
如下是上述2⾏trace的解析记录:
[xxx@mszswglx07 bin]$addr2line -C -e libhwui.so -f 0x77540
android::uirenderer::Task<android::uirenderer::VertexBuffer*>::getResult() const
/home/jenkins/workspace/5918/build_chambal_cosmos/linux_repo/system/core/include/utils/Condition.h:106
[xxx@mszswglx07 bin]$addr2line -C -e libhwui.so -f 0x51d90
android::uirenderer::OpenGLRenderer::drawRoundRect(float, float, float, float, float, float, SkPaint const*)
/home/jenkins/workspace/5918/build_chambal_cosmos/linux_repo/frameworks/base/libs/hwui/OpenGLRenderer.cpp:2660

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。