CN101169753A - 一种记录导致系统异常的函数的方法 - Google Patents
一种记录导致系统异常的函数的方法 Download PDFInfo
- Publication number
- CN101169753A CN101169753A CNA2007101875509A CN200710187550A CN101169753A CN 101169753 A CN101169753 A CN 101169753A CN A2007101875509 A CNA2007101875509 A CN A2007101875509A CN 200710187550 A CN200710187550 A CN 200710187550A CN 101169753 A CN101169753 A CN 101169753A
- Authority
- CN
- China
- Prior art keywords
- function
- task
- address
- pointer
- internal memory
- 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.)
- Granted
Links
Images
Landscapes
- Retry When Errors Occur (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种记录导致系统死机或复位的函数的方法,首先,在内存记录区为每一任务分配一个用于记录函数地址的函数指针数组元素,并定义一个跟踪当前运行任务的全局函数指针,在系统要运行的文件中加入函数调用钩子函数;任务切换时,在任务切换钩子函数里将所述全局函数指针赋值为新切入的任务对应的函数指针数组元素的地址;在函数调用钩子函数处把当前任务当前调用的函数地址记录到所述全局函数指针里。应用本发明可以捕获到导致系统复位或者死机的函数,并捕获到运行该函数的任务,从而为事后定位系统故障提供有效的记录信息,缩小了故障查找范围,以便于定位系统问题。
Description
技术领域
本发明涉及数据通信技术领域,尤其涉及一种记录导致系统异常的函数的方法。
背景技术
在数据通信领域中,产品在应用时会由于某种原因导致系统异常,例如导致系统复位或者死机。由于系统已经重新启动或死机,所以在重新启动后已经不能使用通常的定位手段来查看诸如内存变量、任务状态、或者CPU占用率等来定位原因,这就造成事后很难确切找到系统的故障原因,也就不容易定位产品的问题,从而提高产品稳定性。
数据通信产品一般都是实时的嵌入式系统,都是基于任务或者进程来调度的,换句话说,任务或者进程是集合各种系统资源实现特定功能的最小运行单元。在系统复位或者死机时,若能捕获最后一个运行的任务以及它的运行时间,那么,就能为事后定位复位或死机的原因提供信息,缩小查找范围。
但是,有时仅捕捉到导致系统死机或复位的任务还是很难找到根本原因。为了更进一步缩小查找范围,若可以记录导致系统死机或复位的函数,那么就能把导致故障的原因定位到函数一级,更加有利于查找到导致死机或复位故障的根本原因。由于函数的调用在一个实时性系统里非常的频繁,如果所采取的监控手段过于占用系统资源,就必然会导致系统性能下降,进而也会影响系统主要功能的运行。
发明内容
本发明所要解决的技术问题在于,提供一种记录导致系统异常的函数的方法,实现记录导致系统死机或复位等异常的函数,以及记录调用所述函数的任务的目的,用于根据记录信息缩小故障查找范围,以便定位系统问题提高系统稳定性。
本发明提供一种记录导致系统死机或复位的函数的方法,包括如下步骤:
在内存记录区为每一任务分配一个用于记录函数地址的函数指针数组元素,并定义一个跟踪当前运行任务的全局函数指针,在系统要运行的文件中加入函数调用钩子函数;
任务切换时,在任务切换钩子函数里将所述全局函数指针赋值为新切入的任务对应的函数指针数组元素的地址;
在函数调用钩子函数处把当前任务当前调用的函数地址记录到所述全局函数指针里。
所述方法进一步包括:
在系统重新启动后,将所述内存记录区中保存的任务、函数信息复制保存到别处供分析使用。
所述方法进一步包括:
在复制保存后,将所述内存记录区清零用于捕获本次系统运行的信息。
所述方法进一步包括:
在分析过捕获的上次系统复位或死机的信息后,将所述信息用文件形式保存在掉电不丢失的介质上。
所述内存记录区是系统为用户保留而系统并不控制的内存区。
应用本发明,可以利用数据通信产品软硬件的某些特性来捕获到导致系统复位或者死机的函数及运行该函数的任务,从而为事后定位系统故障提供有效的记录信息,缩小了故障查找范围,以便于定位系统问题,提高产品在市场中的稳定性。
附图说明
图1是本发明实施例中记录导致系统死机或复位的函数的流程图;
图2是本发明实施例中全局的记录函数指针随任务切换赋值的变化示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,以下结合附图对本发明作进一步地详细说明。
为实现本发明的目的,需要利用数据通信产品软硬件的某些特性来捕获到导致系统复位或者死机的函数及运行该函数的任务。在数据通信产品中,通常具有如下的软硬件特性:
(1)数据通信产品的内存在非断电复位或死机时,内存具有非断电内容不丢失的特性。
产品设备所使用的内存在设备非断电复位并再次启动后,内存中所记录的信息是不会丢失的,还是保持复位前保留的原值,这就为捕获一些定位死机或复位的故障信息,提供了一个高速的媒质,而且内存不会因为加入监控信息而影响系统的正常运行。
(2)嵌入式系统具有可为用户保留部分内存的特性。
数据通信产品中使用的操作系统,通常为嵌入式系统,一般会为用户保留一部分内存给用户自己使用,操作系统不会控制这块内存。那么,在设备非断电复位或死机并再次启动后,在复位或者死机前捕获的任务和其运行时间就不会被操作系统清理掉,为用户根据这些关于任务相关信息确定导致上次复位或死机的任务及其启动时间提供了支撑。
(3)嵌入式系统一般会为用户提供一些钩子函数接口来监控嵌入式系统内部运行的一些关键事件。
虽然用户不能通过直接更改嵌入式系统的源码来加入调试手段,但可以通过嵌入式系统所提供的钩子函数加入用户检测所需的定位代码,从而通过钩子函数及加入其中的用户定位代码来捕获一些系统运行的信息。
在本发明的实施例中,对于任务或进程的相关信息,可以利用现有的“任务切换钩子函数接口”来捕获非断电复位或者死机前运行的任务及其运行时间。只要在任务切换钩子函数里记录要切换到的那个任务就可以了,每次切换总是把以前记录的覆盖掉,这样记录到的永远只是最后一个运行的任务。
为了能够利用钩子函数查找并获取导致死机或复位的原因,本发明不但要记录当前运行的任务及相关信息,还要记录该任务最后运行或调用的函数及相关信息。
本发明提供一种记录导致系统异常的函数的方法,其主要实现思路为:
利用系统的任务切换钩子函数接口,并在系统中通过工具加入函数调用钩子函数,在任务切换钩子函数里更新记录当前正在运行的函数的全局函数指针为当前任务对应的记录区,每次切换总是将记录当前正在运行的函数的全局函数指针更新为记录本任务的函数,这样在函数调用钩子函数里只要把函数指针记录到这个记录当前正在运行的函数的全局函数指针里就可以了,这样不会因为加入函数钩子导致系统性能大幅下降,提高了监控的高效性。
如图1所示,给出了本发明的技术方案的一个具体实施例,分为如下步骤:
步骤101:在系统中加入函数调用和返回钩子处理函数。加入时,使用工具把系统要运行的文件中加入函数调用钩子函数,在函数调用钩子函数里把本函数的地址记录到事先定义的一个全局的函数指针里。本发明中,系统只会提供任务切换钩子加入的函数,必须执行才能加入切换钩子函数,加入函数调用钩子函数可以根据可执行文件特点替换一些指令即可。
步骤102:操作系统启动时保留一块内存区A用于记录信息。操作系统在初始化时保留一块内存区域留给系统记录最后一个任务及其运行时间的信息,操作系统不会控制这部分内容。
步骤103:系统启动后,把内存A保存的信息复制到内存B供以后分析,内存A清零。系统启动后将复位前系统捕获信息从内存A中复制一份到别处以供分析使用,然后,先将记录区A清零用来捕获本次系统运行的信息。
步骤104:在记录区A为每个任务分配一个记录函数指针地址,再分配一个全局地址。在记录区A上构造一个函数指针数组用来记录函数地址,然后把这个数组的每个元素和一个任务一一对应,同时定义一个全局的函数指针用来跟踪当前运行的任务。
步骤105:在任务切换钩子里刷新全局记录地址为本任务用于记录当前函数的记录地址。
具体地,在任务切换钩子函数里把定义的用来跟踪当前任务的那个全局函数指针赋值为新切入的任务对应的指针数组元素的地址,这样就能保证永远跟踪当前运行的任务。
步骤106:在函数调用钩子里把当前任务当前调用或使用的函数地址记录到全局记录函数指针里,这样就能确保能监控到本任务当前调用的函数。
步骤107:分析内存B中保存的捕获的上次系统复位或死机的信息,得出复位或死机前最后运行的任务和函数并形成文件,保存在掉电不丢失的介质(例如flash)上。
如图2所示,给出了本实施例中全局的记录函数指针随任务切换赋值的变化情况。
本发明的应用范围并不限于定位系统复位或死机的故障,也可以参照上述实施方式来监控系统的其它异常,所监控到的故障信息都是任务和/或函数级的。
本文所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。因此,凡在本发明的精神和原则之内所作的任何修改、等同替换、改进以及更新等等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种记录导致系统死机或复位的函数的方法,其特征在于,包括如下步骤:
在内存记录区为每一任务分配一个用于记录函数地址的函数指针数组元素,并定义一个跟踪当前运行任务的全局函数指针,在系统要运行的文件中加入函数调用钩子函数;
任务切换时,在任务切换钩子函数里将所述全局函数指针赋值为新切入的任务对应的函数指针数组元素的地址;
在函数调用钩子函数处把当前任务当前调用的函数地址记录到所述全局函数指针里。
2.如权利要求1所述的方法,其特征在于,所述方法进一步包括:
在系统重新启动后,将所述内存记录区中保存的任务、函数信息复制保存到别处供分析使用。
3.如权利要求2所述的方法,其特征在于,所述方法进一步包括:
在复制保存后,将所述内存记录区清零用于捕获本次系统运行的信息。
4.如权利要求2所述的方法,其特征在于,所述方法进一步包括:
在分析过捕获的上次系统复位或死机的信息后,将所述信息用文件形式保存在掉电不丢失的介质上。
5.如权利要求1所述的方法,其特征在于:
所述内存记录区是系统为用户保留而系统并不控制的内存区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101875509A CN100530126C (zh) | 2007-11-26 | 2007-11-26 | 一种记录导致系统异常的函数的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101875509A CN100530126C (zh) | 2007-11-26 | 2007-11-26 | 一种记录导致系统异常的函数的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101169753A true CN101169753A (zh) | 2008-04-30 |
CN100530126C CN100530126C (zh) | 2009-08-19 |
Family
ID=39390385
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007101875509A Active CN100530126C (zh) | 2007-11-26 | 2007-11-26 | 一种记录导致系统异常的函数的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100530126C (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101950260A (zh) * | 2010-09-10 | 2011-01-19 | 中兴通讯股份有限公司 | 一种处理器程序调度方法及装置 |
CN102141947A (zh) * | 2011-03-30 | 2011-08-03 | 东方通信股份有限公司 | 一种对采用嵌入式操作系统的计算机应用系统中异常任务的处理方法及系统 |
CN102622300A (zh) * | 2012-04-18 | 2012-08-01 | 迈普通信技术股份有限公司 | 多任务系统中死循环或类死循环的检测方法 |
CN103123601A (zh) * | 2011-11-17 | 2013-05-29 | 北京神州泰岳软件股份有限公司 | 基于Symbian系统的软件开发故障查找的方法和装置 |
CN106371996A (zh) * | 2016-09-07 | 2017-02-01 | 东信和平科技股份有限公司 | 一种断电测试方法及系统 |
CN107590015A (zh) * | 2017-09-11 | 2018-01-16 | 北京京东尚科信息技术有限公司 | 监测主线程的阻塞的方法和装置 |
CN112434045A (zh) * | 2020-12-10 | 2021-03-02 | 深圳市亿联无限科技有限公司 | 一种嵌入式系统进程间大数据通信的方法及装置 |
CN113672424A (zh) * | 2021-08-19 | 2021-11-19 | 支付宝(杭州)信息技术有限公司 | 修复异常任务的方法及装置 |
-
2007
- 2007-11-26 CN CNB2007101875509A patent/CN100530126C/zh active Active
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101950260A (zh) * | 2010-09-10 | 2011-01-19 | 中兴通讯股份有限公司 | 一种处理器程序调度方法及装置 |
CN101950260B (zh) * | 2010-09-10 | 2014-04-30 | 中兴通讯股份有限公司 | 一种处理器程序调度方法及装置 |
CN102141947A (zh) * | 2011-03-30 | 2011-08-03 | 东方通信股份有限公司 | 一种对采用嵌入式操作系统的计算机应用系统中异常任务的处理方法及系统 |
CN102141947B (zh) * | 2011-03-30 | 2013-04-24 | 东方通信股份有限公司 | 一种对采用嵌入式操作系统的计算机应用系统中异常任务的处理方法及系统 |
CN103123601B (zh) * | 2011-11-17 | 2016-05-25 | 北京神州泰岳软件股份有限公司 | 基于Symbian系统的软件开发故障查找的方法和装置 |
CN103123601A (zh) * | 2011-11-17 | 2013-05-29 | 北京神州泰岳软件股份有限公司 | 基于Symbian系统的软件开发故障查找的方法和装置 |
CN102622300B (zh) * | 2012-04-18 | 2015-03-25 | 迈普通信技术股份有限公司 | 多任务系统中死循环或类死循环的检测方法 |
CN102622300A (zh) * | 2012-04-18 | 2012-08-01 | 迈普通信技术股份有限公司 | 多任务系统中死循环或类死循环的检测方法 |
CN106371996A (zh) * | 2016-09-07 | 2017-02-01 | 东信和平科技股份有限公司 | 一种断电测试方法及系统 |
CN106371996B (zh) * | 2016-09-07 | 2019-05-28 | 东信和平科技股份有限公司 | 一种断电测试方法及系统 |
CN107590015A (zh) * | 2017-09-11 | 2018-01-16 | 北京京东尚科信息技术有限公司 | 监测主线程的阻塞的方法和装置 |
CN112434045A (zh) * | 2020-12-10 | 2021-03-02 | 深圳市亿联无限科技有限公司 | 一种嵌入式系统进程间大数据通信的方法及装置 |
CN113672424A (zh) * | 2021-08-19 | 2021-11-19 | 支付宝(杭州)信息技术有限公司 | 修复异常任务的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN100530126C (zh) | 2009-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100530126C (zh) | 一种记录导致系统异常的函数的方法 | |
CN100517249C (zh) | 一种捕获导致内存被野指针改写的函数的方法 | |
JP5140633B2 (ja) | 仮想化環境において生じる障害の解析方法、管理サーバ、及びプログラム | |
Wang et al. | Hybrid checkpointing for MPI jobs in HPC environments | |
CN103019888B (zh) | 备份方法与装置 | |
RU2671049C2 (ru) | Выгрузка в файловой системе | |
JP4530059B2 (ja) | ディスクアレイ装置、ファームウェア交換方法およびファームウェア交換プログラム | |
US7243266B2 (en) | Computer system and detecting method for detecting a sign of failure of the computer system | |
US20110191556A1 (en) | Optimization of data migration between storage mediums | |
US7900003B2 (en) | System, method and computer program product for storing an information block | |
CN106776147B (zh) | 一种差异数据备份方法和差异数据备份装置 | |
CN101420459B (zh) | 一种管理应用配置信息的方法、应用系统和存储设备 | |
CN102567184A (zh) | 一种基于Flash的日志存储方法 | |
CN103019890A (zh) | 一种块级别的磁盘数据保护系统及其方法 | |
US10990312B2 (en) | Method, apparatus, device and storage medium for processing data location of storage device | |
CN105607973B (zh) | 一种虚拟机系统中设备故障处理的方法、装置及系统 | |
Wu et al. | Proactive data migration for improved storage availability in large-scale data centers | |
JP6522168B2 (ja) | ストレージデバイスを管理するための方法および装置 | |
JP2007133544A (ja) | 障害情報解析方法及びその実施装置 | |
CN110413565A (zh) | 一种多台存储设备同步快照的方法、设备及介质 | |
US20120011319A1 (en) | Mass storage system and method of operating thereof | |
EP3602301B1 (en) | Anticipatory collection of metrics and logs | |
US8479040B2 (en) | Storage system and control method | |
US20060168479A1 (en) | Real time event logging and analysis in a software system | |
CN109582497A (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 |