CN102880538B - 一种Linux软件在ARM芯片上的死机信息侦测方法及系统 - Google Patents

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

Info

Publication number
CN102880538B
CN102880538B CN201210369270.0A CN201210369270A CN102880538B CN 102880538 B CN102880538 B CN 102880538B CN 201210369270 A CN201210369270 A CN 201210369270A CN 102880538 B CN102880538 B CN 102880538B
Authority
CN
China
Prior art keywords
return address
function
detecting
unit
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210369270.0A
Other languages
English (en)
Other versions
CN102880538A (zh
Inventor
刘建军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
BOOMSENSE TECHNOLOGY Co Ltd
Original Assignee
BOOMSENSE TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by BOOMSENSE TECHNOLOGY Co Ltd filed Critical BOOMSENSE TECHNOLOGY Co Ltd
Priority to CN201210369270.0A priority Critical patent/CN102880538B/zh
Publication of CN102880538A publication Critical patent/CN102880538A/zh
Application granted granted Critical
Publication of CN102880538B publication Critical patent/CN102880538B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种Linux软件在ARM芯片上的死机信息侦测方法及系统,包括:检测系统发生异常;获取当前函数的返回地址;判断所获取的返回地址是否在合理范围之内;如果不在,则舍弃该函数;如果在,则输出该返回地址;跳转至下一个函数,并判断该下一个函数是否合法;如果不合法,则结束侦测;如果合法,则返回所述获取返回地址步骤。该死机信息侦测方法及系统是在系统发生异常后才开始对该软件函数执行顺序进行分析的,故此对系统运行性能无任何影响,可实现真实场景下的死机定位。

Description

一种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区、数据段区和代码区五个部分。
堆栈区(stack):在编译和链接阶段根据总内存大小和各其它段的大小决定的;存放函数的参数值,局部变量的值,函数返回地址和一些寄存器的值等。操作方式类似于数据结构中的栈(LIFO),其分配可以向高地址增长也可以向低地址增长,一般都是向低地址增长。我们一般在ARM中都是向低地址增长表示栈申请了更多空间。
堆区(heap):堆在链接阶段确定大小,在运行阶段交给系统内存管理。然后,由程序员通过标准接口分配(malloc,new)和释放(free,delete)。
BSS区(BlockStartedbySymbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。代码中没有初始化的全局变量都放在该区,一般在boot阶段自动清零。
数据段区(data)用来存放可执行文件中已初始化全局变量,也就是存放程序静态分配的变量和全局变量。
代码区(text)用来存放代码,该段为只读。
每个函数执行,都会在堆栈区拥有自己专有的一个栈帧。栈帧的结构如下图2所示。如果某个函数调用到其他函数,那将在ret下面把fp(framepointer,即函数堆栈信息指针)保存起来,同时将栈底指针下移。新函数马上建立自己的栈帧,这时候下移的栈底指针作为了新的栈顶,栈底根据参数和局部变量等去移动。这样,在程序运行过程中,函数调用的关系将在栈中形成一系列连续的栈帧。每个栈帧的内容可能不同,其起止为栈顶到栈底。
而在ARM芯片上,由于内建函数_builtin_frame_address返回且仅返回1级调用地址(即当前的返回),因此我们可以利用这个地址去回溯所调用的相应函数。本发明正是利用了这一点设计了一种Linux软件在ARM芯片上的死机信息侦测方法及系统
图3为本发明Linux软件在ARM芯片上的死机信息侦测方法流程图。如图所示,该Linux软件在ARM芯片上的死机信息侦测方法,包括:
101:检测系统发生异常。
102:获取当前函数的返回地址。该返回地址也就是前述内建函数_builtin_frame_address返回的1级调用地址。
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返回的1级调用地址。
所述返回地址判断单元,用于判断所获得的返回地址是否在合理范围之内?如果不在,则舍弃该函数;如果在,则输出该返回地址。
这里,所述的合理范围为代码执行地址范围。具体地,是从map里取得的[__executable_start,__etext]范围。如果返回地址在该合理范围内,则说明该返回地址所对应的函数为执行函数;如果返回地址不在该合理范围内,则说明该返回地址是运行地址,并非执行函数返回地址,因此需要过滤掉。
所述函数跳转单元,用于跳转至下一个函数,并判断该下一个函数是否合法?如果不合法,则结束侦测;如果合法,则将该下一个函数信息发送至返回地址获取单元。
如图4所示,本发明死机信息侦测系统中还设有返回地址解析单元。
所述返回地址解析单元,与返回地址判断单元相连,用于根据内建函数__builtin_frame_address查找与所输出返回地址相对应的函数,并输出该函数。
通过该返回地址解析单元可以在系统内自动完成对返回地址所对应函数的解析,从而直接输出相对应函数,以方便分析人员进行死机定位。
另外,所述异常检测单元中,可以根据需要自己控制在不同场合下去捕获并查看调用栈。具体来说,本实施例提供根据系统检测到的SIGILL、SIGFPE、SIGSEGV、SIGALRM、SIGXCPU或SIGXFSZ非法指令,检测系统所发生异常。并根据所检测到的系统异常启动本发明Linux软件在ARM芯片上的死机信息侦测方法。
综上所述,本发明提供了一种Linux软件在ARM芯片上的死机信息侦测方法及系统。该死机信息侦测方法及系统通过回溯递推输出执行函数的返回地址,并依赖执行函数与返回地址之间的一一对应关系,则可输出该软件函数执行顺序的记录,以供分析人员分析对该软件死机进行定位。该死机信息侦测方法及系统是在系统发生异常后才开始对该软件函数执行顺序进行分析的,在软件运行过程中并不会如GDB需要打开选项支持,故此对系统运行性能无任何影响,可实现真实场景下的死机定位。本领域技术人员在此设计思想之下所做任何不具有创造性的改造,均应视为在本发明的保护范围之内。

Claims (2)

1.一种Linux软件在ARM芯片上的死机信息侦测方法,其特征在于,包括:
检测系统发生异常;
获取当前函数的返回地址;
判断所获取的返回地址是否在合理范围之内;如果不在,则舍弃该函数;如果在,则输出该返回地址;
所述的合理范围是从map里取得的[__executable_start,__etext]范围;
跳转至下一个函数,并判断该下一个函数是否合法;如果不合法,则结束侦测;如果合法,则返回所述获取返回地址步骤;
在所述输出返回地址后,还设有返回地址解析步骤,具体包括:
根据内建函数__builtin_frame_address查找与所输出返回地址相对应的函数,并输出该函数;
在所述检测系统发生异常步骤中,系统根据检测到的SIGILL、SIGFPE、SIGSEGV、SIGALRM、SIGXCPU或SIGXFSZ非法指令,检测系统所发生异常。
2.一种Linux软件在ARM芯片上的死机信息侦测系统,其特征在于,包括:异常检测单元、返回地址获取单元、返回地址判断单元、返回地址解析单元和函数跳转单元;
所述异常检测单元,用于检测系统发生异常;
所述返回地址获取单元,用于获取当前函数的返回地址;
所述返回地址判断单元,用于判断所获得的返回地址是否在合理范围之内;如果不在,则舍弃该函数;如果在,则输出该返回地址;所述的合理范围是从map里取得的[__executable_start,__etext]范围;
所述函数跳转单元,用于跳转至下一个函数,并判断该下一个函数是否合法;如果不合法,则结束侦测;如果合法,则将该下一个函数信息发送至返回地址获取单元;
所述返回地址解析单元,与返回地址判断单元相连,用于根据内建函数__builtin_frame_address查找与所输出返回地址相对应的函数,并输出该函数;
所述异常检测单元中,系统根据检测到的SIGILL、SIGFPE、SIGSEGV、SIGALRM、SIGXCPU或SIGXFSZ非法指令,检测系统所发生异常。
CN201210369270.0A 2012-09-27 2012-09-27 一种Linux软件在ARM芯片上的死机信息侦测方法及系统 Active CN102880538B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210369270.0A CN102880538B (zh) 2012-09-27 2012-09-27 一种Linux软件在ARM芯片上的死机信息侦测方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210369270.0A CN102880538B (zh) 2012-09-27 2012-09-27 一种Linux软件在ARM芯片上的死机信息侦测方法及系统

Publications (2)

Publication Number Publication Date
CN102880538A CN102880538A (zh) 2013-01-16
CN102880538B true CN102880538B (zh) 2015-12-16

Family

ID=47481873

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210369270.0A Active CN102880538B (zh) 2012-09-27 2012-09-27 一种Linux软件在ARM芯片上的死机信息侦测方法及系统

Country Status (1)

Country Link
CN (1) CN102880538B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101211309A (zh) * 2006-12-29 2008-07-02 中兴通讯股份有限公司 嵌入式系统中进程异常跟踪定位的方法
CN101539883A (zh) * 2009-05-05 2009-09-23 北京和利时系统工程有限公司 嵌入式系统的错误追踪方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8677194B2 (en) * 2006-11-29 2014-03-18 Red Hat, Inc. Method and system for site configurable error reporting

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101211309A (zh) * 2006-12-29 2008-07-02 中兴通讯股份有限公司 嵌入式系统中进程异常跟踪定位的方法
CN101539883A (zh) * 2009-05-05 2009-09-23 北京和利时系统工程有限公司 嵌入式系统的错误追踪方法和装置

Also Published As

Publication number Publication date
CN102880538A (zh) 2013-01-16

Similar Documents

Publication Publication Date Title
Cui et al. Efficient deterministic multithreading through schedule relaxation
US5987250A (en) Transparent instrumentation for computer program behavior analysis
Cui Stable deterministic multithreading through schedule memoization
CN111756575A (zh) 存储服务器的性能分析方法及装置、电子设备
JPH07152611A (ja) エラー解析用のトレーサシステム
CN101446918B (zh) 一种实现用户态调试器调试单个函数的方法及系统
CN102063328B (zh) 一种用于检测中断驱动型程序数据竞争的系统
US9489286B2 (en) Method and system for computer assisted hot-tracing mechanism
CN105184166A (zh) 基于内核的安卓程序实时行为分析方法及系统
CN105718374A (zh) 一种热点模块指令跟踪的方法及系统
CN104850411A (zh) 存储系统基准评测程序生成方法及装置
CN103514072A (zh) 一种用于可视化编程的图形化业务的调试方法及装置
Romano et al. An empirical study of bugs in webassembly compilers
CN111027054A (zh) 基于安卓系统判断应用程序在多开环境中运行方法、系统
CN115357515B (zh) 一种多核系统的调试方法、装置、计算机设备及存储介质
CN101458630B (zh) 一种基于硬件模拟器的自修改代码识别方法
CN109885489B (zh) 驱动程序中数据竞争检测方法及装置
Li et al. Effectively manifesting concurrency bugs in android apps
Seo et al. A profiling method by PCB hooking and its application for memory fault detection in embedded system operational test
CN105095079B (zh) 一种热点模块指令跟踪的方法及设备
US8607204B2 (en) Method of analyzing single thread access of variable in multi-threaded program
CN102880538B (zh) 一种Linux软件在ARM芯片上的死机信息侦测方法及系统
US11520682B2 (en) Code coverage method for embedded system on chip
CN101329650B (zh) 智能卡仿真器
CN112965845A (zh) 延迟分析方法、电子设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant