[发明专利]调用栈回溯方法、装置、设备和介质有效
申请号: | 202110303889.0 | 申请日: | 2021-03-22 |
公开(公告)号: | CN112925718B | 公开(公告)日: | 2023-10-20 |
发明(设计)人: | 刘洪凯 | 申请(专利权)人: | 北京字节跳动网络技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京开阳星知识产权代理有限公司 11710 | 代理人: | 祝乐芳 |
地址: | 100041 北京市石景山区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 调用 回溯 方法 装置 设备 介质 | ||
本公开实施例涉及一种调用栈回溯方法、装置、设备和介质,其中,该方法包括:申请第一内存区域,并确定其目标子区域;执行构造功能模块对应的代码段,对目标子区域中存储的内容进行初始化;将初始化后的目标子区域中的存储内容更改为自定义虚拟功能模块表的地址;该表中的第三个功能模块地址为预设目标回调功能模块的地址;基于第一内存区域的首地址,执行栈回溯功能模块WalkStack对应的代码段,以启动调用栈的回溯;在调用栈的回溯过程中,执行预设目标回调功能模块对应的代码段,并确定执行次数;根据该执行次数,确定是否结束调用栈的回溯。本公开实施例实现了在程序运行过程中对栈回溯的有效控制,达到了控制栈回溯次数的效果,降低了栈回溯的耗时。
技术领域
本公开涉及计算机技术领域,尤其涉及一种调用栈回溯方法、装置、设备和介质。
背景技术
在应用程序的运行过程中,通常涉及到调用栈(Call stack)的回溯。通过栈回溯,可以获取需求的栈帧信息,以用于定位和分析程序运行过程中的异常。
在现有栈回溯方案中,通常直接调用系统函数getStackTrace来实现。然而,整个栈回溯过程不可控,需要执行所有栈帧的回溯(即全量栈回溯)后,才能结束,导致栈回溯耗时较长。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开实施例提供了一种调用栈回溯方法、装置、设备和介质。
第一方面,本公开实施例提供了一种调用栈回溯方法,包括:
申请第一内存区域,并确定所述第一内存区域中的目标子区域;其中,所述目标子区域是所述第一内存区域的首地址对应的区域;
获取上下文参数和当前线程指针;
基于所述第一内存区域的首地址、所述上下文参数和所述当前线程指针,执行构造功能模块对应的代码段,对所述目标子区域中存储的内容进行初始化;
将初始化后的目标子区域中的存储内容更改为自定义虚拟功能模块表的地址;其中,所述自定义虚拟功能模块表中的第三个功能模块地址为预设目标回调功能模块的地址;
基于所述第一内存区域的首地址,执行栈回溯功能模块WalkStack对应的代码段,以启动调用栈的回溯;
在所述调用栈的回溯过程中,执行所述预设目标回调功能模块对应的代码段,并确定所述预设目标回调功能模块对应的代码段的执行次数;
根据所述预设目标回调功能模块对应的代码段的执行次数,确定是否结束所述调用栈的回溯。
第二方面,本公开实施例还提供了一种调用栈回溯装置,包括:
内存区域申请模块,用于申请第一内存区域,并确定所述第一内存区域中的目标子区域;其中,所述目标子区域是所述第一内存区域的首地址对应的区域;
参数获取模块,用于获取上下文参数和当前线程指针;
内容初始化模块,用于基于所述第一内存区域的首地址、所述上下文参数和所述当前线程指针,执行构造功能模块对应的代码段,对所述目标子区域中存储的内容进行初始化;
内容更改模块,用于将初始化后的目标子区域中的存储内容更改为自定义虚拟功能模块表的地址;其中,所述自定义虚拟功能模块表中的第三个功能模块地址为预设目标回调功能模块的地址;
第一执行模块,用于基于所述第一内存区域的首地址,执行栈回溯功能模块WalkStack对应的代码段,以启动调用栈的回溯;
第二执行模块,用于在所述调用栈的回溯过程中,执行所述预设目标回调功能模块对应的代码段,并确定所述预设目标回调功能模块对应的代码段的执行次数;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京字节跳动网络技术有限公司,未经北京字节跳动网络技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110303889.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种工程造价用报表整理装置
- 下一篇:半导体管道用加热器