stm32出现hardfault-自动化分析map文件

可通过如下python脚本进行分析:

import os

import sys

#在此输入HardFault_Handler时打印的PC指针

address = 0x20006980

#以下代码不要要更改

def is_hex(data):

try:

int(data, 16)

return True

except ValueError:

return False

def find_line_number(map_file, address):

line_number = None

linestring = ""

with open(map_file, 'r') as f:

line_num = 0

lines = f.readlines()

for line in lines:

line_num = line_num + 1

line = line.replace('\n', '').strip()

parts = line.split()

if len(parts) >= 3:

if is_hex(parts[1]) :

func_address = int(parts[1], 16)

if func_address >= address:

line_number = str(line_num - 1) if func_address > address else str(line_num)

break

elif is_hex(parts[2]) :

func_address = int(parts[2], 16)

if func_address >= address:

line_number = str(line_num - 1) if func_address > address else str(line_num)

break

linestring = line

return line_number, (linestring if func_address > address else line)

if name == "main":

script_path = os.path.dirname(os.path.realpath(file))

os.chdir(script_path)

map_file = '../Listings/SC_Func.map'

line_number, linestring = find_line_number(map_file, address)

if line_number:

print(f"Function at address: {hex(address)}, LineNumber: {line_number}")

print(f"Content: {linestring}")

else:

print(f"No function found at address {hex(address)}")

相关推荐
AI人工智能+电脑小能手2 分钟前
【大白话说Java面试题 第42题】【JVM篇】第2题:JVM内存模型有哪些组成部分?
java·开发语言·jvm·面试
yqcoder2 分钟前
深入理解 JavaScript:什么是可迭代对象 (Iterable)?
开发语言·javascript·网络
破阵子443286 分钟前
如何用 Claude Code 等 Agent 工具操作 MATLAB(支持代码编写及 Simulink)
开发语言·matlab
AI人工智能+电脑小能手9 分钟前
【大白话说Java面试题 第43题】【JVM篇】第3题:GC分为哪两种?Young GC 和 Full GC有什么区别?
java·开发语言·jvm·后端·面试
van久14 分钟前
Day27:菜单管理 + 动态路由(前端可直接用!)
前端·状态模式
恋猫de小郭18 分钟前
DeepSeek V4 Flash 可以在 128GB 的 M3 Max 运行,还是 1M 上下文
前端·人工智能·ai编程
van久19 分钟前
企业级后台管理系统(结合前 4 周全部内容)详细需求文档 + 前端模板适配
前端
Bear on Toilet19 分钟前
【JSON-RPC远程过程调用组件库】测试报告
开发语言·软件测试·后端·自动化脚本
星恒随风21 分钟前
C语言链表详解:从单链表到双向链表
c语言·开发语言·链表
lsx20240622 分钟前
《Foundation 均衡器:深入解析其工作原理与应用领域》
开发语言