保存為python文件并填寫addr2lineFilePath茎毁、symbolFilePath、crashFilePath果漾,然后運(yùn)行
#!/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'
# 配置符號(hào)表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='')
# 是否包含關(guān)鍵字:pc
begin = line.find(keyString) + len(keyString)
# 是否包含關(guān)鍵字集漾,關(guān)鍵字之前是否有#
if begin < 0 or line[:begin].find('#') < 0:
continue
end = line[begin:].find(' ') + begin
########################### 堆棧信息:
# 補(bǔ)充空格
spaceCount = begin-7
if spaceCount < 0:
spaceCount = 0
info = (' ' * spaceCount)
# 綠色的堆棧id
info += ('\u001b[1;36m' + line[begin:end] + '?')
# 解析調(diào)用棧
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)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者