保存为python文件并填写addr2lineFilePath、symbolFilePath、crashFilePath,然后运行
#!/usr/bin/env python
# coding=utf-8
import os
# 配置addr2line工具的位置
#Linux上的SDK,64位的so
addr2lineFilePath = 'ANDROID_HOME/ndk/21.4.7075529/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-addr2line'
#Linux上的SDK,32位的so
#addr2lineFilePath = 'ANDROID_HOME/ndk/21.4.7075529/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-addr2line'
#Windows上的SDK,64位的so
addr2lineFilePath = 'ANDROID_HOME\\ndk\\21.4.7075529\\toolchains\\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\\bin\\aarch64-linux-android-addr2line.exe'
# 配置符号表so,也就是没有裁剪过的so,体积比较大的so
symbolFilePath = '工程MODULE目录\\build\intermediates\cmake\\release\obj\\arm64-v8a\xxx.so'
# 崩溃的日志
crashFilePath = 'stacktrace.txt'
command_line_header = addr2lineFilePath + ' -e ' + symbolFilePath + ' '
print('addr2lineTools:%s' % addr2lineFilePath)
print('SoSymbolFile:%s' % symbolFilePath)
print('开始解析')
fullOutPrint = ''
with open(crashFilePath, 'r') as file:
keyString = " pc "
for line in file:
if line.find('\n') < 0:
line += '\n'
print(line, end='')
# 是否包含关键字:pc
begin = line.find(keyString) + len(keyString)
# 是否包含关键字,关键字之前是否有#
if begin < 0 or line[:begin].find('#') < 0:
continue
end = line[begin:].find(' ') + begin
########################### 堆栈信息:
# 补充空格
spaceCount = begin-7
if spaceCount < 0:
spaceCount = 0
info = (' ' * spaceCount)
# 绿色的堆栈id
info += ('\u001b[1;36m' + line[begin:end] + '⇨')
# 解析调用栈
command = command_line_header + line[begin:end]
f = os.popen(command)
read = f.read()
f.close()
read = read.strip('\n')
info += ('\u001b[31m' + read + '\u001b[0m')
if not info.endswith('\n'):
info += '\n'
print(info, end='')
# fullOutPrint += outPrint
# print(fullOutPrint)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。