[发明专利]嵌入式系统的调用栈回溯方法、装置和计算机设备在审
申请号: | 202110845087.2 | 申请日: | 2021-07-26 |
公开(公告)号: | CN113742119A | 公开(公告)日: | 2021-12-03 |
发明(设计)人: | 黎发明 | 申请(专利权)人: | 上海闻泰信息技术有限公司 |
主分类号: | G06F11/07 | 分类号: | G06F11/07 |
代理公司: | 北京开阳星知识产权代理有限公司 11710 | 代理人: | 王艳斌 |
地址: | 200062 上海市*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 嵌入式 系统 调用 回溯 方法 装置 计算机 设备 | ||
1.一种嵌入式系统的调用栈回溯方法,其特征在于,所述方法包括:
获取程序源代码文件、指定编译命令和宕机异常处理程序;其中,所述指定编译命令用于记录函数栈帧的起始地址;
基于所述指定编译命令和所述宕机异常处理程序对所述程序源代码文件进行编译链接,生成可执行可链接ELF格式的目标文件;
当系统发生异常时,保存寄存器信息和所述目标文件对应的函数栈帧,并执行所述宕机异常处理程序;其中,所述寄存器信息包括:用于记录当前函数的栈帧的起始地址的FP寄存器,和用于记录调用所述当前函数的上级函数的返回地址的LR寄存器;
通过所述宕机异常处理程序基于所述FP寄存器和所述LR寄存器对所述函数栈帧进行分析,得到发生异常的目标函数的调用地址表;
采用预设的地址解析工具,解析出所述调用地址表中的地址在所述目标文件中的调用栈回溯信息。
2.根据权利要求1所述的方法,其特征在于,所述基于所述指定编译命令和所述宕机异常处理程序对所述程序源代码文件进行编译链接,生成ELF格式的目标文件,包括:
采用所述指定编译命令对所述程序源代码文件进行编译,得到编译结果文件;
将所述宕机异常处理程序注入所述编译结果文件中,生成ELF格式的目标文件。
3.根据权利要求1所述的方法,其特征在于,所述通过所述宕机异常处理程序基于所述FP寄存器和所述LR寄存器对所述函数栈帧进行分析,得到发生异常的目标函数的调用地址表,包括:
通过所述宕机异常处理程序从所述函数栈帧对应的CPU寄存器中获取所述FP寄存器和所述LR寄存器;
根据所述LR寄存器和所述FP寄存器回溯得到发生异常的目标函数的调用地址表。
4.根据权利要求3所述的方法,其特征在于,所述根据所述LR寄存器和所述FP寄存器回溯得到发生异常的目标函数的调用地址表,包括:
将发生异常的目标函数作为当前函数,重复执行如下回溯推导算法,直至回溯得到所述目标函数的调用地址表:
从所述当前函数的栈帧对应的FP寄存器中获取所述当前函数的起始地址;
从所述当前函数的栈帧对应的LR寄存器中获取返回地址;
根据所述起始地址得到调用所述当前函数的上一级函数,并将所述上一级函数作为新的当前函数;
当所述新的当前函数的栈帧对应的LR寄存器为空值时,停止所述回溯推导算法,并基于停止所述回溯推导算法时得到的所有的起始地址和返回地址生成调用地址表。
5.根据权利要求1所述的方法,其特征在于,所述寄存器信息还包括:用于记录发生异常处的指令地址的PC寄存器,所述方法还包括:
根据所述PC寄存器确定发生异常的目标函数的地址。
6.根据权利要求1所述的方法,其特征在于,所述执行所述宕机异常处理程序,包括:
中央处理器CPU通过预设的异常向量函数表进入并执行所述宕机异常处理程序。
7.根据权利要求1所述的方法,其特征在于,所述调用栈回溯信息包括:所述目标函数的函数名、所述目标函数的地址、各级调用者函数的地址、所述目标函数和所述调用者函数各自所属的文件、所述目标函数和所述调用者函数在各自所属文件中的行号;其中,所述调用者函数是与所述目标函数具有调用栈关系的函数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海闻泰信息技术有限公司,未经上海闻泰信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110845087.2/1.html,转载请声明来源钻瓜专利网。