[发明专利]函数调用栈回溯、程序异常处理方法、装置、设备及介质有效
申请号: | 202110736647.0 | 申请日: | 2021-06-29 |
公开(公告)号: | CN113342431B | 公开(公告)日: | 2023-02-07 |
发明(设计)人: | 赵欣;张琰;伍晓宇;黄家辉 | 申请(专利权)人: | 苏州科达科技股份有限公司 |
主分类号: | G06F9/448 | 分类号: | G06F9/448;G06F11/07 |
代理公司: | 上海隆天律师事务所 31282 | 代理人: | 潘一诺 |
地址: | 215011 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 函数 调用 回溯 程序 异常 处理 方法 装置 设备 介质 | ||
本发明提供一种函数调用栈回溯、程序异常处理方法、装置、电子设备及存储介质,函数调用栈回溯方法,包括:获取程序异常时的异常栈数据段;自所述异常栈数据段,依次提取数据,并对每一数据执行:判断该数据是否为地址信息;若是,则根据该数据以及一函数映射表,查找所述地址信息对应的函数名;按所述数据的提取顺序以及所查找的函数名,回溯获得第一函数调用顺序;至少根据所述第一函数调用顺序,获得函数调用栈。本申请能够在无需进行额外处理的情况下,获取完整的函数调用栈,从而能够利用函数调用栈进行程序和系统分析。
技术领域
本发明涉及计算机技术领域,尤其涉及一种函数调用栈回溯、程序异常处理方法、装置、设备及介质。
背景技术
函数调用栈用于根据函数正向调用顺序储存函数及执行函数的相关信息。当程序或者系统出现故障时,函数调用栈可以用来分析程序或系统出现故障的原因。
目前,函数调用栈通常在函数执行时生成,从而可以在发生故障时获取并使用。然而,对于未储存函数调用栈或者由于故障丢失函数调用栈的情况下,未有能够获取完整的函数调用栈的方法。
由此,如何在未存储函数调用栈或函数调用栈丢失情况下,无需进行额外处理的情况下,获取函数调用栈,从而能够利用函数调用栈进行程序和系统分析,是本领域亟待解决的技术问题。
发明内容
本发明为了克服上述现有技术存在的缺陷,提供一种函数调用栈回溯、程序异常处理方法、装置、电子设备及存储介质,以在未存储函数调用栈或函数调用栈丢失情况下,无需进行额外处理的情况下,获取完整的函数调用栈,从而能够利用函数调用栈进行程序和系统分析。
根据本申请的一个方面,提供一种函数调用栈回溯方法,包括:
获取程序异常时的异常栈数据段;
自所述异常栈数据段,依次提取数据,并对每一数据执行:
判断该数据是否为地址信息;
若是,则根据该数据以及一函数映射表,查找所述地址信息对应的函数名;
按所述数据的提取顺序以及所查找的函数名,回溯获得第一函数调用顺序;
至少根据所述第一函数调用顺序,获得函数调用栈。
在本申请的一些实施例中,所述判断该数据是否为地址信息包括:
判断所述数据是否落入进程空间的代码段地址空间;
若是,则所述数据为地址信息;
若否,则所述数据不是地址信息。
在本申请的一些实施例中,所述根据所述第一函数调用顺序,获得函数调用栈之前,还包括:
利用处理器的函数调用规范调用函数调用栈的栈帧依次回溯获得第二函数调用顺序,
其中,所述函数调用栈根据所述第一函数调用顺序以及所述第二函数调用顺序获得。
在本申请的一些实施例中,所述根据所述第一函数调用顺序,获得函数调用栈之前,还包括:
利用编译程序的函数调用算法自当前函数依次回溯获得第三函数调用顺序,
其中,所述函数调用栈根据所述第一函数调用顺序以及所述第三函数调用顺序获得。
在本申请的一些实施例中,所述利用编译程序的函数调用算法自当前函数依次回溯获得第三函数调用顺序包括:
函数调用算法获取步骤:根据当前函数的函数名,获取当前函数的函数调用算法;
调用函数确定步骤:根据当前函数的函数调用算法以及当前函数的地址信息,确定调用当前函数的调用函数;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州科达科技股份有限公司,未经苏州科达科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110736647.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种组合式智能印刷机
- 下一篇:一种隧道用玻璃钢复合门