import os
import re
def analyze_anr_logs(package_name):
"""
分析ANR文件夹下包含指定包名的日志文件
:param package_name: 要分析的包名,如"com.example.app"
"""
anr_folder_path = "根路径" # 假设ANR日志所在文件夹名为anr,可根据实际情况修改
if not os.path.exists(anr_folder_path):
print(f"指定的ANR文件夹 {anr_folder_path} 不存在!")
return 0, 0
total_lines = 0
package_count = 0
for root, dirs, files in os.walk(anr_folder_path):
for file in files:
file_path = os.path.join(root, file)
try:
with open(file_path, 'r', encoding='utf-8') as f: # 以utf-8编码读取文件,可根据实际调整
content = f.read()
total_lines += len(content)
print(f"该值为:{total_lines}")
if package_name in content:
print(f"在文件 {file_path} 中找到与 {package_name} 相关的ANR日志:")
# 提取一些关键信息示例(可根据实际日志格式拓展更详细分析)
# find_main_thread_info(content)
package_count += find_error_info(content, package_name)
find_process_info(content)
find_stack_trace(content)
except UnicodeDecodeError:
print(f"文件 {file_path} 编码格式可能无法以utf-8解码,跳过分析该文件。")
except Exception as e:
print(f"分析文件 {file_path} 时出现错误: {str(e)}")
if total_lines == 0:
return 0, 0
return package_count
def find_main_thread_info(content):
"""
尝试从日志内容中查找主线程相关信息(示例,需根据实际日志格式完善)
:param content: 日志文件的内容
"""
main_thread_keywords = ["main thread", "ActivityThread"]
for keyword in main_thread_keywords:
start_index = content.find(keyword)
if start_index != -1:
end_index = start_index + 10000 # 简单取后面200个字符作为相关信息,可调整
print(f"查找主线程相关信息" + content[start_index:end_index])
def find_error_info(content, package_name):
"""
尝试从日志内容中查找相关报错信息(示例,需根据实际日志格式完善)
:param package_name:
:param content: 日志文件的内容
"""
pattern = re.compile(rf'\b{package_name}\b')
matches = pattern.findall(content)
count = len(matches)
for index, match in enumerate(matches, start=1):
if index != -1:
end_index = index + 10000 # 简单取后面200个字符作为相关信息,可调整
print(f"查找主线程相关信息" + content[index:end_index])
# print(f"字符 '{package_name}' :其后300个字符为:{print_ten_chars}")
print(f"字符 '{package_name}' 在文本中总共出现了 {count} 次")
#
return count
def find_process_info(content):
"""
尝试从日志内容中查找进程相关信息(示例,需根据实际日志格式完善)
:param content: 日志文件的内容
"""
process_keywords = ["Process:", "pid:", "uid:"]
for keyword in process_keywords:
start_index = content.find(keyword)
if start_index != -1:
end_index = start_index + 100 # 简单取后面100个字符作为相关信息,可调整
print(f"查找进程相关信息" + content[start_index:end_index])
def find_stack_trace(content):
"""
尝试从日志内容中查找异常堆栈信息(示例,需根据实际日志格式完善)
:param content: 日志文件的内容
"""
stack_trace_keywords = ["at ", "Caused by:"]
stack_trace_info = ""
for keyword in stack_trace_keywords:
start_index = content.find(keyword)
if start_index != -1:
stack_trace_info += content[start_index:]
if stack_trace_info:
print("异常堆栈信息如下:")
# print(stack_trace_info)
if __name__ == "__main__":
package_name_to_analyze = "com.example.app"
count = analyze_anr_logs(package_name_to_analyze)
print(f"包名 {package_name_to_analyze} ,出现的总次数为: {count} 次")