一般碰到NE的异常需要通过addr2line把异常地址转成code文件和行号。在Linux环境下,我们可以直接使用命令直接定位。操作如下:
1)遇到如下NE的Log输出:
01-01 12:04:27.570097 1048 1048 F DEBUG : backtrace:
01-01 12:04:27.570229 1048 1048 F DEBUG : #00 pc 0000224a /system/bin/bootanimation (audioplay::playClip(unsigned char const*, int)+102)
01-01 12:04:27.570339 1048 1048 F DEBUG : #01 pc 00001a55 /system/bin/bootanimation ((anonymous namespace)::AudioAnimationCallbacks::playPart(int, android::BootAnimation::Animation::Part const&, int)+200)
01-01 12:04:27.570467 1048 1048 F DEBUG : #02 pc 0000755d /system/lib/libbootanimation.so (android::BootAnimation::playAnimation(android::BootAnimation::Animation const&)+344)
01-01 12:04:27.570536 1048 1048 F DEBUG : #03 pc 0000664f /system/lib/libbootanimation.so (android::BootAnimation::movie()+434)
01-01 12:04:27.570576 1048 1048 F DEBUG : #04 pc 00006175 /system/lib/libbootanimation.so (android::BootAnimation::threadLoop()+16)
01-01 12:04:27.570611 1048 1048 F DEBUG : #05 pc 0000c08b /system/lib/libutils.so (android::Thread::_threadLoop(void*)+166)
01-01 12:04:27.570645 1048 1048 F DEBUG : #06 pc 000632e5 /system/lib/libc.so (__pthread_start(void*)+22)
01-01 12:04:27.570677 1048 1048 F DEBUG : #07 pc 0001de49 /system/lib/libc.so (__start_thread+24)
2)libbootanimation.so是出现问题的文件,我们可以从\out\target\product\XXX\symbols(本地编过该项目的路径)下面找到该库文件(这个so一定要是出问题的版本的so,即使是同个项目不同软件,都不能代替)。
3)使用如下命令可以定位出问题的行数
addr2line -e XXX.so 0000755d
可以快速定位到出问题的代码位于BootAnimation.cpp文件的898行、855行等
android@ubuntu:~/桌面$ addr2line -e libbootanimation.so 0000755d
frameworks/base/cmds/bootanimation/BootAnimation.cpp:898
android@ubuntu:~/桌面$ addr2line -e libbootanimation.so 0000664f
frameworks/base/cmds/bootanimation/BootAnimation.cpp:855
android@ubuntu:~/桌面$ addr2line -e libbootanimation.so 00006175
frameworks/base/cmds/bootanimation/BootAnimation.cpp:346
本文介绍在Linux环境下,如何使用addr2line工具将NE异常的内存地址转换为具体的代码文件和行号,以快速定位问题所在。通过解析异常日志,找到出现问题的.so文件,使用addr2line命令即可获取到出错的具体位置。
3488

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



