[发明专利]一种Linux软件在ARM芯片上的死机信息侦测方法及系统有效
申请号: | 201210369270.0 | 申请日: | 2012-09-27 |
公开(公告)号: | CN102880538A | 公开(公告)日: | 2013-01-16 |
发明(设计)人: | 刘建军 | 申请(专利权)人: | 邦讯技术股份有限公司 |
主分类号: | G06F11/30 | 分类号: | G06F11/30 |
代理公司: | 北京三友知识产权代理有限公司 11127 | 代理人: | 符浩 |
地址: | 100048 北京市海淀区首体*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 linux 软件 arm 芯片 死机 信息 侦测 方法 系统 | ||
技术领域
本发明涉及软件技术领域,特别是一种Linux软件在ARM芯片上的死机信息侦测方法及系统。
背景技术
目前,在ARM芯片上使用LINUX作为操作系统的产品越来越多。但是,对于LINUX上的多线程软件,一般都是使用gcc编译器,当gcc编译出来的软件出现死机问题的测试调试手段尚缺乏有效的工具。目前定位死机问题主要是靠输出的trace信息或者使用GDB来调试。而trace不能准确及时得到死机前的调用栈,由于不知道什么时候死机,因此需要打印很多信息,影响系统性能。而使用GDB来调试又依赖软件编译时打开选项支持,会影响软件运行速度,故此无法在真实运行(即保障实时性条件)场景下进行死机定位。
而死机问题作为软件稳定性的重要问题,我们必须要有技术手段才能有效解决此问题。有鉴于此,我们有必要设计一种无需任何附加编译选项,对系统运行性能无任何影响,即可实现真实场景下的死机定位的侦测方法及系统。
发明内容
本发明的主要目的在于解决现有技术中存在的问题,提供一种Linux软件在ARM芯片上的死机信息侦测方法及系统。
本发明的目的是通过下述技术方案予以实现的:
一种Linux软件在ARM芯片上的死机信息侦测方法,其特征在于,包括:
检测系统发生异常;
获取当前函数的返回地址;
判断所获取的返回地址是否在合理范围之内;如果不在,则舍弃该函数;如果在,则输出该返回地址;
跳转至下一个函数,并判断该下一个函数是否合法;如果不合法,则结束侦测;如果合法,则返回所述获取返回地址步骤。
所述的合理范围是从map里取得的[_executable_start,_etext]范围。
在所述输出返回地址后,还设有返回地址解析步骤,具体包括:
根据内建函数_builtin_frame_address查找与所输出返回地址相对应的函数,并输出该函数。
在所述检测系统发生异常步骤中,系统根据检测到的SIGILL、SIGFPE、SIGSEGV、SIGALRM、SIGXCPU或SIGXFSZ非法指令,检测系统所发生异常。
一种Linux软件在ARM芯片上的死机信息侦测系统,其特征在于,包括:异常检测单元、返回地址获取单元、返回地址判断单元和函数跳转单元;
所述异常检测单元,用于检测系统发生异常;
所述返回地址获取单元,用于获取当前函数的返回地址;
所述返回地址判断单元,用于判断所获得的返回地址是否在合理范围之内;如果不在,则舍弃该函数;如果在,则输出该返回地址;
所述函数跳转单元,用于跳转至下一个函数,并判断该下一个函数是否合法;如果不合法,则结束侦测;如果合法,则将该下一个函数信息发送至返回地址获取单元。
所述的合理范围是从map里取得的[__executable_start,__etext]范围。
还设有返回地址解析单元;
所述返回地址解析单元,与返回地址判断单元相连,用于根据内建函数__builtin_frame_address查找与所输出返回地址相对应的函数,并输出该函数。
所述异常检测单元中,系统根据检测到的SIGILL、SIGFPE、SIGSEGV、SIGALRM、SIGXCPU或SIGXFSZ非法指令,检测系统所发生异常。
通过本发明实施例,该死机信息侦测方法及系统是在系统发生异常后才开始对该软件函数执行顺序进行分析的,故此对系统运行性能无任何影响,可实现真实场景下的死机定位。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:
图1为ARM芯片上执行阶段内存分布示意图;
图2为栈帧结构示意图;
图3为Linux软件在ARM 芯片上的死机信息侦测方法流程图;
图4为Linux软件在ARM芯片上的死机信息侦测系统结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
在ARM芯片上,在执行阶段内存分布一般是如下图1所示。内存分为堆栈区、堆区、BSS区、数据段区和代码区五个部分。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于邦讯技术股份有限公司,未经邦讯技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210369270.0/2.html,转载请声明来源钻瓜专利网。