[发明专利]程序死循环检测方法、装置、电子设备及存储介质在审
申请号: | 202010784325.9 | 申请日: | 2020-08-06 |
公开(公告)号: | CN113760700A | 公开(公告)日: | 2021-12-07 |
发明(设计)人: | 蒋俊弛 | 申请(专利权)人: | 北京京东振世信息技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京同立钧成知识产权代理有限公司 11205 | 代理人: | 张娜;刘芳 |
地址: | 100086 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 程序 循环 检测 方法 装置 电子设备 存储 介质 | ||
1.一种程序死循环检测方法,其特征在于,包括:
获取程序源代码中的目标循环函数;
根据所述目标循环函数,确定控制流图,其中,所述控制流图用于表征所述目标循环函数的循环结构;
根据所述控制流图检测所述目标循环函数中的死循环。
2.根据权利要求1所述的方法,其特征在于,根据所述目标循环函数,确定控制流图,包括:
利用预设编译器对所述目标循环函数进行编译,生成中间代码文件;
对所述中间代码文件进行解析,得到所述目标循环函数的循环结构数据;
根据所述循环结构数据,生成控制流图。
3.根据权利要求2所述的方法,其特征在于,所述预设编译器为GCC编译器,利用预设编译器对所述目标循环函数进行编译,生成中间代码文件,包括:
利用所述GCC编译器的fdump-tree选项对所述目标循环函数进行编译处理,并利用cfg子选项生成所述中间代码文件。
4.根据权利要求2所述的方法,其特征在于,所述中间代码文件包括函数代码块和跳转语句,所述函数代码块用于表征所述目标循环函数的运算内容,所述跳转语句用于表征所述目标循环函数中所述函数代码块的执行顺序;对所述中间代码文件进行解析,得到所述目标循环函数的循环结构数据,包括:
根据预设的第一正则表达式规则,解析所述中间代码文件,得到所述函数代码块和所述跳转语句;
根据所述函数代码块和所述跳转语句,确定执行节点和执行顺序,其中,所述执行节点与所述函数代码块一一对应;所述执行顺序用于表征所述目标循环函数中执行预设执行路径上执行节点的顺序;
根据所述执行节点和所述执行顺序,确定目标循环函数的循环结构数据。
5.根据权利要求4所述的方法,其特征在于,所述循环结构数据为键/值对结构,根据所述执行节点和所述执行顺序,确定目标循环函数的循环结构数据,包括:
获取所述目标循环函数中预设执行路径上的执行节点和对应的执行顺序;
将所述目标循环函数中预设执行路径上的执行节点和对应的执行顺序转换为通过键/值对结构,生成循环结构数据。
6.根据权利要求4所述的方法,其特征在于,在根据所述执行节点和所述执行顺序,确定目标循环函数的循环结构数据之后,还包括:
将所述循环数据结构转换为预设的字典结构,其中,所述字典结构为一个基于键/值对结构的可变容器模型,所述字典结构的键用于表征执行路径上的起始执行节点;所述字典结构的值用于表征所述执行路径上的结束执行节点组成的列表。
7.根据权利要求1-6任一项所述的方法,其特征在于,根据所述控制流图检测所述目标循环函数中的死循环,包括:
根据所述控制流图,获取循环终止条件;
若所述控制流图对应的循环结构无法满足所述循环终止条件,则确定所述目标循环函数内含有死循环。
8.根据权利要求1-6任一项所述的方法,其特征在于,在获取程序源代码中的目标循环函数后,还包括:
根据预设的第二正则表达式规则,判断所述目标循环函数中是否包含绝对死循环。
9.根据权利要求8所述的方法,其特征在于,根据预设的第二正则表达式规则,判断所述目标循环函数中是否包含绝对死循环,包括:
根据预设的第二正则表达式规则,判断所述目标循环函数的循环结构内,是否存在跳出指令;若不存在所述跳出指令,则确定所述目标循环函数中包含所述绝对死循环。
10.一种程序死循环检测装置,其特征在于,包括:
获取模块,用于获取程序源代码中的目标循环函数;
确定模块,用于根据所述目标循环函数,确定控制流图,其中,所述控制流图用于表征所述目标循环函数的循环结构;
检测模块,用于根据所述控制流图检测所述目标循环函数中的死循环。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京京东振世信息技术有限公司,未经北京京东振世信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010784325.9/1.html,转载请声明来源钻瓜专利网。