[发明专利]用于确定调用栈栈帧的对象的方法、装置、设备和介质在审
申请号: | 202110302483.0 | 申请日: | 2021-03-22 |
公开(公告)号: | CN112925717A | 公开(公告)日: | 2021-06-08 |
发明(设计)人: | 刘洪凯 | 申请(专利权)人: | 北京字节跳动网络技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京开阳星知识产权代理有限公司 11710 | 代理人: | 祝乐芳 |
地址: | 100041 北京市石景山区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 用于 确定 调用 栈栈帧 对象 方法 装置 设备 介质 | ||
1.一种用于确定调用栈栈帧的对象的方法,其特征在于,包括:
申请第一内存区域,并确定所述第一内存区域中的目标子区域;其中,所述目标子区域是所述第一内存区域的首地址对应的区域;
获取上下文参数和当前线程指针;
基于所述第一内存区域的首地址、所述上下文参数和当前线程指针,执行构造功能模块对应的代码段,对所述目标子区域中存储的内容进行初始化;
将初始化后的目标子区域中的存储内容更改为自定义虚拟功能模块表的地址;其中,所述自定义虚拟功能模块表中的第三个功能模块地址为预设目标回调功能模块的地址;
基于所述第一内存区域的首地址,执行栈回溯功能模块WalkStack对应的代码段,以启动调用栈的回溯;
如果回溯出所述调用栈中的一个栈帧,则执行所述预设目标回调功能模块对应的代码段;
在执行所述预设目标回调功能模块对应的代码段的过程中,基于所述第一内存区域的首地址,执行栈帧对象获取功能模块GetThisObject对应的代码段;
基于执行所述栈帧对象获取功能模块GetThisObject对应的代码段得到的结果,确定所述栈帧的当前对象。
2.根据权利要求1所述的方法,其特征在于,基于所述第一内存区域的首地址,执行栈帧对象获取功能模块GetThisObject对应的代码段之前,还包括:
基于所述第一内存区域的首地址,执行栈帧字符串描述信息获取功能模块DescribeLocation对应的代码段,获取栈帧字符串描述信息;
检测所述栈帧字符串描述信息中是否包括预设字符串,以在所述栈帧字符串描述信息中不包括所述预设字符串的情况下,执行所述栈帧对象获取功能模块GetThisObject对应的代码段;其中,所述预设字符串用于标记不需要获取当前对象的栈帧。
3.根据权利要求1所述的方法,其特征在于,基于执行所述栈帧对象获取功能模块GetThisObject对应的代码段得到的结果,确定所述栈帧的当前对象,包括:
基于执行所述栈帧对象获取功能模块GetThisObject对应的代码段得到的结果,执行对象转换功能模块NewLocalRef对应的代码段,得到所述栈帧的当前对象。
4.根据权利要求1所述的方法,其特征在于,还包括:
将所述栈帧的当前对象从本地服务层传输至预设编程语言层,以在所述预设编程语言层对所述栈帧的当前对象进行处理;其中,所述预设编程语言层包括java层。
5.根据权利要求1所述的方法,其特征在于,还包括:
申请第二内存区域;其中,所述第二内存区域用于存储各个栈帧的当前对象。
6.根据权利要求1所述的方法,其特征在于,还包括:
在执行所述预设目标回调功能模块对应的代码段的过程中,如果满足预设条件,则确定执行所述预设目标回调功能模块对应的代码段得到的目标结果,并基于所述目标结果结束所述调用栈的回溯;
其中,所述预设条件包括:所述预设目标回调功能模块对应的代码段的执行次数达到执行次数阈值,或者,所述栈帧的当前对象类型属于需求类型。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京字节跳动网络技术有限公司,未经北京字节跳动网络技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110302483.0/1.html,转载请声明来源钻瓜专利网。