[发明专利]一种基于栈的异常检测方法和装置有效
申请号: | 201410797374.0 | 申请日: | 2014-12-18 |
公开(公告)号: | CN104536810B | 公开(公告)日: | 2018-05-11 |
发明(设计)人: | 张皓秋 | 申请(专利权)人: | 北京奇虎科技有限公司;奇智软件(北京)有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46;G06F8/41 |
代理公司: | 北京润泽恒知识产权代理有限公司 11319 | 代理人: | 赵娟 |
地址: | 100088 北京市西城区新*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 异常 检测 方法 装置 | ||
本发明实施例提供了一种基于栈的异常检测方法和装置,所述方法包括:生成标识信息;在第一业务对象将一个或多个参数压入栈之前,将所述标识信息压入栈;当第二业务对象调用在栈中的一个或多个参数完成时,提取当前位于栈顶的栈顶元素;检测所述栈顶元素与所述标识信息是否相同;以及当所述栈顶元素与所述标识信息不同时,判断所述栈出现异常。本发明实施例基于栈传递参数的原理,实现调用第二业务对象实时的异常检测,提高了检测栈异常的速度和准确率,同时提高了异常定位的精确度。并且,可以直观的在栈中看到崩溃时的参数以让后续开发人员进行崩溃分析,找到栈崩溃原因,提高开发效率。
技术领域
本发明涉及计算机技术领域,特别是涉及一种基于栈的异常检测方法方法和一种基于栈的异常检测装置。
背景技术
栈(Stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。
人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底。向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。
栈中存储着函数的局部变量等信息,在编译完成后,局部变量的位置是固定的,但是在调用其他业务对象时需要将参数压入栈(push),这会破坏顺序,所以在调用完毕后需要将压入栈的数据再弹出(pop)以恢复栈空间的顺序,否则因为读取变量是读取固定位置,导致读取的值不正确,此时就认为变量被破坏了。
若当前业务对象需要调用其他用户制作的业务对象,大多数情况下业务对象与业务对象之间是通过栈空间来交换数据的,将参数压入栈顶,然后调用函数,对方在内部从栈顶拿出参数。
由于读取的是固定位置,因此如果栈空间出现问题,可能操作某局部变量的时候操作到意外的值,如果该局部变量是个函数指针,甚至会导致执行意外的代码。
如果栈空间出现问题,当时并不会崩溃,而是当其他业务对象操作被破坏的局部变量时可能导致崩溃,难以定位出错的位置。比如向一个指针变量指向的地址写入数据,但是该变量被破坏,导致尝试向未知区域写入数据,此时可能因为写入不可写的地址而崩溃。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种基于栈的异常检测方法和相应的一种基于栈的异常检测装置。
依据本发明的一个方面,提供了一种基于栈的异常检测方法,包括:
生成标识信息;
在第一业务对象将一个或多个参数压入栈之前,将所述标识信息压入栈;
当第二业务对象调用在栈中的一个或多个参数完成时,提取当前位于栈顶的栈顶元素;
检测所述栈顶元素与所述标识信息是否相同;以及
当所述栈顶元素与所述标识信息不同时,判断所述栈出现异常。
可选地,所述方法还包括:
当所述栈顶元素与所述标识信息相同时,判断所述栈运行正常。
可选地,所述方法还包括:
生成所述栈出现异常的提示信息;
或者,
使用调试接口输出异常信息。
可选地,所述生成标识信息的步骤包括:
在第一时间针对标识对象生成第一信息;
将所述第一信息写入特征变量中;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京奇虎科技有限公司;奇智软件(北京)有限公司,未经北京奇虎科技有限公司;奇智软件(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410797374.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:提醒用户调整运动量的方法及装置
- 下一篇:原稿读取装置