一种Linux软件在ARM芯片上的死机信息侦测方法及系统的制作方法

文档序号:6377980阅读:717来源:国知局

专利名称::一种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非法指令,检测系统所发生异常。·通过本发明实施例,该死机信息侦测方法及系统是在系统发生异常后才开始对该软件函数执行顺序进行分析的,故此对系统运行性能无任何影响,可实现真实场景下的死机定位。此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中图I为ARM芯片上执行阶段内存分布示意图;图2为栈帧结构示意图;图3为Linux软件在ARM芯片上的死机信息侦测方法流程图;图4为Linux软件在ARM芯片上的死机信息侦测系统结构图。具体实施例方式为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。在ARM芯片上,在执行阶段内存分布一般是如下图I所示。内存分为堆栈区、堆区、BSS区、数据段区和代码区五个部分。堆栈区(stack):在编译和链接阶段根据总内存大小和各其它段的大小决定的;存放函数的参数值,局部变量的值,函数返回地址和一些寄存器的值等。操作方式类似于数据结构中的栈(LIF0),其分配可以向高地址增长也可以向低地址增长,一般都是向低地址增长。我们一般在ARM中都是向低地址增长表示栈申请了更多空间。堆区(heap):堆在链接阶段确定大小,在运行阶段交给系统内存管理。然后,由程序员通过标准接口分配(malloc,new)和释放(free,delete)。BSS区(BlockStartedbySymbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。代码中没有初始化的全局变量都放在该区,一般在boot阶段自动清零。数据段区(data)用来存放可执行文件中已初始化全局变量,也就是存放程序静态分配的变量和全局变量。代码区(text)用来存放代码,该段为只读。每个函数执行,都会在堆栈区拥有自己专有的一个栈帧。栈帧的结构如下图2所示。如果某个函数调用到其他函数,那将在ret下面把fp(framepointer,即函数堆栈信息指针)保存起来,同时将栈底指针下移。新函数马上建立自己的栈帧,这时候下移的栈底指针作为了新的栈顶,栈底根据参数和局部变量等去移动。这样,在程序运行过程中,函数调用的关系将在栈中形成一系列连续的栈帧。每个栈帧的内容可能不同,其起止为栈顶到栈底。而在ARM芯片上,由于内建函数_1311;[11:;[11_;1^^1116_3(1(1代88返回且仅返回I级调用地址(即当前的返回),因此我们可以利用这个地址去回溯所调用的相应函数。本发明正是利用了这一点设计了一种Linux软件在ARM芯片上的死机信息侦测方法及系统图3为本发明Linux软件在ARM芯片上的死机信息侦测方法流程图。如图所示,该Linux软件在ARM芯片上的死机信息侦测方法,包括101:检测系统发生异常。102:获取当前函数的返回地址。该返回地址也就是前述内建函数_builtin_frame_address返回的I级调用地址。103:判断所获取的返回地址是否在合理范围之内?如果不在,则舍弃该函数;如果在,则输出该返回地址。这里,所述的合理范围为代码执行地址范围。具体地,是从map(即编译器在链接阶段产生的内存映射文件)里取得的[—executable_start,—etext]范围。这里,—executable_start、—etext是从map文件中的两个地址值。合理范围即大于_executablestart并同时小于—etext的地址范围。如果返回地址在该合理范围内,则说明该返回地址所对应的函数为执行函数;如果返回地址不在该合理范围内,则说明该返回地址是运行地址,并非执行函数返回地址,因此需要过滤掉。104:跳转至下一个函数,并判断该下一个函数是否合法?如果不合法,则结束侦测;如果合法,则返回步骤102。本发明所设计的死机信息侦测方法,在检测到系统发生异常后,通过回溯递推输出执行函数的返回地址,并依赖执行函数与返回地址之间的一一对应关系,则可输出该软件函数执行顺序的记录,以供分析人员分析对该软件死机进行定位。该死机信息侦测方法是在系统发生异常后才开始对该软件函数执行顺序进行分析的,在软件运行过程中并不会如GDB需要打开选项支持,故此对系统运行性能无任何影响,可实现真实场景下的死机定位。本发明在所述步骤103输出返回地址后,还设有返回地址解析步骤,具体包括根据内建函数—builtin_frame_address查找与所输出返回地址相对应的函数,并输出该函数。通过该步骤可以在系统内自动完成对返回地址所对应函数的解析,从而直接输出相对应函数,以方便分析人员进行死机定位。另外,所述步骤101检测系统发生异常中,可以根据需要自己控制在不同场合下去捕获并查看调用栈。具体来说,本实施例提供根据系统检测到的SIGILL、SIGFPE、SIGSEGV、SIGALRM、SIGXCPU或SIGXFSZ非法指令,检测系统所发生异常。并根据所检测到的系统异常启动本发明Linux软件在ARM芯片上的死机信息侦测方法。图4为本发明Linux软件在ARM芯片上的死机信息侦测系统结构图。如图所示,该Linux软件在ARM芯片上的死机信息侦测系统,包括异常检测单元、返回地址获取单元、返回地址判断单元和函数跳转单元。所述异常检测单元,用于检测系统发生异常。所述返回地址获取单元,用于获取当前函数的返回地址。该返回地址也就是前述内建函数_builtin_frame_address返回的I级调用地址。所述返回地址判断单元,用于判断所获得的返回地址是否在合理范围之内?如果不在,则舍弃该函数;如果在,则输出该返回地址。这里,所述的合理范围为代码执行地址范围。具体地,是从map里取得的[―executable_start,—etext]范围。如果返回地址在该合理范围内,贝U说明该返回地址所对应的函数为执行函数;如果返回地址不在该合理范围内,则说明该返回地址是运行地址,并非执行函数返回地址,因此需要过滤掉。所述函数跳转单元,用于跳转至下一个函数,并判断该下一个函数是否合法?如果不合法,则结束侦测;如果合法,则将该下一个函数信息发送至返回地址获取单元。如图4所示,本发明死机信息侦测系统中还设有返回地址解析单元。所述返回地址解析单元,与返回地址判断单元相连,用于根据内建函数—builtin_frame_address查找与所输出返回地址相对应的函数,并输出该函数。通过该返回地址解析单元可以在系统内自动完成对返回地址所对应函数的解析,从而直接输出相对应函数,以方便分析人员进行死机定位。另外,所述异常检测单元中,可以根据需要自己控制在不同场合下去捕获并查看调用栈。具体来说,本实施例提供根据系统检测到的SIGILL、SIGFPE、SIGSEGV、SIGALRM、SIGXCPU或SIGXFSZ非法指令,检测系统所发生异常。并根据所检测到的系统异常启动本发明Linux软件在ARM芯片上的死机信息侦测方法。综上所述,本发明提供了一种Linux软件在ARM芯片上的死机信息侦测方法及系统。该死机信息侦测方法及系统通过回溯递推输出执行函数的返回地址,并依赖执行函数与返回地址之间的一一对应关系,则可输出该软件函数执行顺序的记录,以供分析人员分析对该软件死机进行定位。该死机信息侦测方法及系统是在系统发生异常后才开始对该软件函数执行顺序进行分析的,在软件运行过程中并不会如GDB需要打开选项支持,故此对系统运行性能无任何影响,可实现真实场景下的死机定位。本领域技术人员在此设计思想之下所做任何不具有创造性的改造,均应视为在本发明的保护范围之内。权利要求1.一种Linux软件在ARM芯片上的死机信息侦测方法,其特征在于,包括检测系统发生异常;获取当前函数的返回地址;判断所获取的返回地址是否在合理范围之内;如果不在,则舍弃该函数;如果在,则输出该返回地址;跳转至下一个函数,并判断该下一个函数是否合法;如果不合法,则结束侦测;如果合法,则返回所述获取返回地址步骤。2.如权利要求I所述的Linux软件在ARM芯片上的死机信息侦测方法,其特征在于所述的合理范围是从map里取得的[—executable_start,—etext]范围。3.如权利要求I所述的Linux软件在ARM芯片上的死机信息侦测方法,其特征在于在所述输出返回地址后,还设有返回地址解析步骤,具体包括根据内建函数—builtin_frame_address查找与所输出返回地址相对应的函数,并输出该函数。4.如权利要求I所述的Linux软件在ARM芯片上的死机信息侦测方法,其特征在于在所述检测系统发生异常步骤中,系统根据检测到的SIGILL、SIGFPE、SIGSEGV、SIGALRM、SIGXCPU或SIGXFSZ非法指令,检测系统所发生异常。5.一种Linux软件在ARM芯片上的死机信息侦测系统,其特征在于,包括异常检测单v元、返回地址获取单元、返回地址判断单元和函数跳转单元;所述异常检测单元,用于检测系统发生异常;所述返回地址获取单元,用于获取当前函数的返回地址;所述返回地址判断单元,用于判断所获得的返回地址是否在合理范围之内;如果不在,则舍弃该函数;如果在,则输出该返回地址;所述函数跳转单元,用于跳转至下一个函数,并判断该下一个函数是否合法;如果不合法,则结束侦测;如果合法,则将该下一个函数信息发送至返回地址获取单元。6.如权利要求5所述的Linux软件在ARM芯片上的死机信息侦测系统,其特征在于所述的合理范围是从map里取得的[_executable_start,_etext]范围。7.如权利要求5所述的Linux软件在ARM芯片上的死机信息侦测系统,其特征在于还设有返回地址解析单元;所述返回地址解析单元,与返回地址判断单元相连,用于根据内建函数—builtin_frame_address查找与所输出返回地址相对应的函数,并输出该函数。8.如权利要求5所述的Linux软件在ARM芯片上的死机信息侦测系统,其特征在于所述异常检测单元中,系统根据检测到的SIGILL、SIGFPE,SIGSEGV,SIGALRM、SIGXCPU或SIGXFSZ非法指令,检测系统所发生异常。全文摘要本发明提供了一种Linux软件在ARM芯片上的死机信息侦测方法及系统,包括检测系统发生异常;获取当前函数的返回地址;判断所获取的返回地址是否在合理范围之内;如果不在,则舍弃该函数;如果在,则输出该返回地址;跳转至下一个函数,并判断该下一个函数是否合法;如果不合法,则结束侦测;如果合法,则返回所述获取返回地址步骤。该死机信息侦测方法及系统是在系统发生异常后才开始对该软件函数执行顺序进行分析的,故此对系统运行性能无任何影响,可实现真实场景下的死机定位。文档编号G06F11/30GK102880538SQ201210369270公开日2013年1月16日申请日期2012年9月27日优先权日2012年9月27日发明者刘建军申请人:邦讯技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1