1、问题
在做一个安全类项目时发现,软件在运行一段时间后会进入"MemManage_Handler",遂开始了一系列查找。
2、解决
(1)查看堆栈数据
查堆栈的数据,发现堆栈也被破坏了,看不出来是执行哪个任务执行导致的问题。
(2)查看内核异常报告
通过FaultReports 异常报告发现,是由于发生了Memory ManagementFault中的IACCVIOL错误,导致HardFault_Handler发生,即“企图从不允许访问的区域取指令”,
(3)自定义函数运行记录函数定位异常位置
BSP_DB_FuncRun函数用于执行并记录函数指针
例如:
BSP_DB_FuncRecord函数用于记录运行函数名称
例如:BSP_DB_FuncRecord("BSP_HC165_Handle")
(4)异常抓取
可以将需要运行的函数通过这两个函数处理后执行,就可以记录出现错误前所执行的函数,可以在debug状态下查到出错前执行的函数,或者在运行状态下,在进入错误后,将异常函数打印到日志中。最终查找并解决问题。