2024-03-15 11:27:52 +08:00
|
|
|
# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
|
|
|
|
|
#
|
|
|
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
|
|
2024-01-10 18:33:03 +08:00
|
|
|
import sys
|
|
|
|
|
import subprocess
|
|
|
|
|
import re
|
|
|
|
|
|
2024-01-15 11:06:39 +08:00
|
|
|
|
2024-01-10 18:33:03 +08:00
|
|
|
def parse_backtrace(elf_file_path, backtrace):
|
2024-01-15 11:06:39 +08:00
|
|
|
addresses = backtrace.split(" ")
|
2024-01-10 18:33:03 +08:00
|
|
|
for address in addresses:
|
2024-01-15 11:06:39 +08:00
|
|
|
if ":" in address:
|
|
|
|
|
addr = address.split(":")[0] # 只需要冒号前的地址部分
|
2024-01-10 18:33:03 +08:00
|
|
|
|
|
|
|
|
# 构建命令
|
|
|
|
|
command = f"xtensa-esp32-elf-addr2line -pfiaC -e {elf_file_path} {addr}"
|
|
|
|
|
|
|
|
|
|
# 运行命令并捕获输出
|
2024-01-15 11:06:39 +08:00
|
|
|
result = subprocess.run(
|
|
|
|
|
command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
|
|
|
|
|
)
|
|
|
|
|
|
2024-01-10 18:33:03 +08:00
|
|
|
# 打印结果
|
|
|
|
|
print(result.stdout)
|
|
|
|
|
|
|
|
|
|
# 错误处理
|
|
|
|
|
if result.stderr:
|
|
|
|
|
print("Error:", result.stderr)
|
|
|
|
|
|
2024-01-15 11:06:39 +08:00
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2024-01-10 18:33:03 +08:00
|
|
|
if len(sys.argv) != 3:
|
|
|
|
|
print("Usage: python parse_backtrace.py <elf_path> <backtrace_string>")
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
|
|
elf_file_path = sys.argv[1]
|
|
|
|
|
backtrace = sys.argv[2]
|
|
|
|
|
|
|
|
|
|
parse_backtrace(elf_file_path, backtrace)
|