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)}")

相关推荐
发发就是发2 分钟前
顺序锁(Seqlock)与RCU机制:当读写锁遇上性能瓶颈
java·linux·服务器·开发语言·jvm·驱动开发
农村小镇哥6 分钟前
PHP递归遍历+MYSQL介绍+MYSQL基本操作
开发语言·mysql·php
llm大模型算法工程师weng10 分钟前
Python爬虫实现指南:从入门到实战
开发语言·爬虫·python
J_liaty11 分钟前
Vue2 从入门到精通
前端·javascript·vue.js
INF_MAX14 分钟前
一些不错的页面设计(持续记录)
前端
lly20240616 分钟前
R 绘图 - 函数曲线图
开发语言
乔江seven24 分钟前
LlamaIndex 实现ReAct Agent
前端·python·react.js
私人珍藏库25 分钟前
Edge v146.0.3856.97 内置篡改猴脚本
前端·edge
Thomas214326 分钟前
chrome cdp 三种方案对比
前端·chrome
别叫我->学废了->lol在线等26 分钟前
claudecode的agent定义
前端·chrome·github