[发明专利]嵌入式系统的调用栈回溯方法、装置和计算机设备在审
申请号: | 202110845087.2 | 申请日: | 2021-07-26 |
公开(公告)号: | CN113742119A | 公开(公告)日: | 2021-12-03 |
发明(设计)人: | 黎发明 | 申请(专利权)人: | 上海闻泰信息技术有限公司 |
主分类号: | G06F11/07 | 分类号: | G06F11/07 |
代理公司: | 北京开阳星知识产权代理有限公司 11710 | 代理人: | 王艳斌 |
地址: | 200062 上海市*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 嵌入式 系统 调用 回溯 方法 装置 计算机 设备 | ||
本申请涉及计算机领域,提供了一种嵌入式系统的调用栈回溯方法、装置和计算机设备。方法包括:基于指定编译命令和宕机异常处理程序对程序源代码文件进行编译链接,生成ELF格式的目标文件;其中,指定编译命令用于记录函数栈帧的起始地址;当系统发生异常时,保存寄存器信息和目标文件对应的函数栈帧,并执行宕机异常处理程序;寄存器信息包括:FP寄存器和LR寄存器;通过宕机异常处理程序基于FP寄存器和LR寄存器对函数栈帧进行分析,得到发生异常的目标函数的调用地址表;采用预设的地址解析工具,解析出调用地址表中的地址在目标文件中的调用栈回溯信息。采用本方法能够更加高效、准确地回溯完整的调用关系。
技术领域
本申请涉及计算机技术领域,特别是涉及一种嵌入式系统的调用栈回溯方法、装置和计算机设备。
背景技术
在嵌入式MCU(Microcontroller Unit,微控制单元)软件开发、调试及测试过程中,经常会遇到因软件的设计缺陷而出现的各种宕机现象。对于嵌入式MCU软件系统的宕机问题,目前主要是根据CPU(Central Processing Unit,中央处理器)核心寄存器的内容,再结合反汇编代码,来排查和修复代码的设计缺陷。但是,该方式对开发人员有较高要求,需要开发人员对CPU架构、寄存器、运行及异常机制以及程式的编译原理等有较为深入的认知和理解;更重要的是,该方式无法从出现宕机的函数位置处向上回溯和推导出完整的执行调用关系,这样就不能有效和及时地对系统进行问题排查和恢复,对软件开发及测试效率造成了比较大的影响。
因此,如何快速地回溯函数的调用关系,已经成为亟待解决的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够高效、准确地回溯完整的调用关系的嵌入式系统的调用栈回溯方法、装置和计算机设备。
本申请实施例提供了一种嵌入式系统的调用栈回溯方法,所述方法包括:
获取程序源代码文件、指定编译命令和宕机异常处理程序;其中,所述指定编译命令用于记录函数栈帧的起始地址;
基于所述指定编译命令和所述宕机异常处理程序对所述程序源代码文件进行编译链接,生成ELF格式的目标文件;
当系统发生异常时,保存寄存器信息和所述目标文件对应的函数栈帧,并执行所述宕机异常处理程序;其中,所述寄存器信息包括:用于记录当前函数的栈帧的起始地址的FP寄存器,和用于记录调用所述当前函数的上级函数的返回地址的LR寄存器;
通过所述宕机异常处理程序基于所述FP寄存器和所述LR寄存器对所述函数栈帧进行分析,得到发生异常的目标函数的调用地址表;
采用预设的地址解析工具,解析出所述调用地址表中的地址在所述目标文件中的调用栈回溯信息。
在一个实施例中,所述基于所述指定编译命令和所述宕机异常处理程序对所述程序源代码文件进行编译链接,生成ELF格式的目标文件,包括:
采用所述指定编译命令对所述程序源代码文件进行编译,得到编译结果文件;将所述宕机异常处理程序注入所述编译结果文件中,生成ELF格式的目标文件。
在一个实施例中,所述通过所述宕机异常处理程序基于所述FP寄存器和所述LR寄存器对所述函数栈帧进行分析,得到发生异常的目标函数的调用地址表,包括:
通过所述宕机异常处理程序从所述函数栈帧对应的CPU寄存器中获取所述FP寄存器和所述LR寄存器;根据所述LR寄存器和所述FP寄存器回溯得到发生异常的目标函数的调用地址表。
在一个实施例中,所述根据所述LR寄存器和所述FP寄存器回溯得到发生异常的目标函数的调用地址表,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海闻泰信息技术有限公司,未经上海闻泰信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110845087.2/2.html,转载请声明来源钻瓜专利网。