import os
import re
import sys
import subprocess
current_path = os.getcwd()
aadr2Tool = 'aarch64-linux-android-addr2line'
def printTrace(inFile):
line_num = 0 # trace num
with open(inFile, 'r', encoding='utf-8') as in_fd:
line = in_fd.readline()
while line:
line_group = re.search(r'(?<= pc )\w+ .*', line)
line_num = re.search(r'(?<= #)\d+(?= pc )', line)
if line_num:
line_num = int(line_num.group())
#print("========line_num %d ==========" % line_num )
if line_group:
allSubstr = line_group.group().split()
traceAddr = allSubstr[0]
traceLib = current_path + allSubstr[1]
# print("========allSubstr %s ==========" % allSubstr )
# print("========traceAddr %s ==========" % traceAddr)
# print("========traceLib %s ==========" % traceLib )
parseCMD = aadr2Tool + ' -C -f -e ' + traceLib + ' ' + traceAddr + ' -i'
outParse = subprocess.getoutput(parseCMD)
if (0 == line_num):
print('\n')
print("=========================== %d ============================" % line_num )
print(allSubstr[1] + " >>>")
print(outParse)
line = in_fd.readline()
inputFile = current_path + '/trace'
if len(sys.argv) == 1:
print(" ")
else:
para_list = sys.argv
inputFile = current_path + '/' + para_list[1]
printTrace(inputFile)
批量解析 android 堆栈脚本
最新推荐文章于 2024-07-17 15:04:58 发布