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

相关推荐
JSU_曾是此间年少11 分钟前
前端技巧——iframe + postMessage进行页面通信
前端·iframe·postmessage
某公司摸鱼前端11 分钟前
js 数组使用 map 结构渲染个性字段
开发语言·前端·javascript
2401_8576380313 分钟前
“Ruby宝石匣:解锁流行插件系统的奥秘“
开发语言·后端·ruby
小于负无穷14 分钟前
使用 ECharts 进行数据可视化
前端·javascript·信息可视化·前端框架·echarts
Code成立17 分钟前
CSS3多行多栏布局
前端·css·css3·多行多列布局
小李飞刀李寻欢18 分钟前
function call学习之2
开发语言·python·大模型·gpt4·function
那个那个鱼22 分钟前
C#面:ASP.NET MVC 中如何用表单认证?
开发语言·c#·asp.net·mvc·.net
儒雅的烤地瓜24 分钟前
Vue | 简单说说 Vuex 实现响应式的原理
javascript·vue.js·vuex·响应式系统·vue响应式原理
qiao若huan喜28 分钟前
03_React 收集表单数据和 组件生命周期
前端·javascript·react.js
A阳俊yi30 分钟前
AJAX(5)——Promise
前端·javascript·ajax