CN109522144A - VxWorks系统下软件死机的故障定位方法 - Google Patents

VxWorks系统下软件死机的故障定位方法 Download PDF

Info

Publication number
CN109522144A
CN109522144A CN201811348127.7A CN201811348127A CN109522144A CN 109522144 A CN109522144 A CN 109522144A CN 201811348127 A CN201811348127 A CN 201811348127A CN 109522144 A CN109522144 A CN 109522144A
Authority
CN
China
Prior art keywords
task
function
int
vxworks
failure
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.)
Pending
Application number
CN201811348127.7A
Other languages
English (en)
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.)
Tianjin Jinhang Computing Technology Research Institute
Original Assignee
Tianjin Jinhang Computing Technology Research Institute
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 Tianjin Jinhang Computing Technology Research Institute filed Critical Tianjin Jinhang Computing Technology Research Institute
Priority to CN201811348127.7A priority Critical patent/CN109522144A/zh
Publication of CN109522144A publication Critical patent/CN109522144A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0787Storage of error reports, e.g. persistent data storage, storage using memory protection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种VxWorks系统下软件死机的故障定位方法,属于VxWorks系统下实时软件开发技术领域。本发明利用ED&R工具诊断故障,采用全局重定向和任务重定向输出系统故障和任务故障,设计任务监控获取出错任务的名称和状态,并采用异常处理钩子函数在用户定义的异常处理程序中保存异常现场。本发明采用的故障定位方法可以有效的记录系统死机和复位时系统级和任务级的故障信息,便于软件开发人员快速定位故障发生点,引导软件开发人员向着正确的排故方向进行故障原因分析。

Description

VxWorks系统下软件死机的故障定位方法
技术领域
本发明属于VxWorks系统下实时软件开发技术领域,具体涉及一种VxWorks系统下软件死机的故障定位方法。
背景技术
在VxWorks系统下开发实时软件的过程中,由于开发者的经验和技术的限制,开发的软件在运行过程中经常会出现原因不明的死机或者复位,通常是由于堆栈溢出、内存泄漏、任务死循环、非法指针操作等原因导致系统崩溃。由于出现这些故障的现象不一,而且往往很难故障复现,造成故障定位异常困难。
通常情况下采用在线调试(通过网络或是串口)的手段对VxWorks系统下出现的软件故障进行跟踪调试。但是一旦VxWorks系统出现死机或者复位时,就无法进行在线调试了。现有的解决VxWorks系统下死机或复位的方法有基于堆栈异常定位故障、任务死循环定位、堆栈回溯分析法、看门狗电路等。这些方法大多只是针对某一种故障现象提出定位方法,或者只是能够检测软件出现故障,不能定位故障,对于VxWorks系统下死机和复位故障定位提供的帮助有限。
为了实现对VxWorks系统下软件死机和复位问题的快速有效故障定位,需要设计一种新的VxWorks系统下软件死机的故障定位方法。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何设计一种VxWorks系统下软件死机的故障定位方,能够定位操作系统内核异常,也能定位上层应用软件异常,提高软件的容错性和可维护性。
(二)技术方案
为了解决上述技术问题,本发明提供了一种VxWorks系统下软件死机的故障定位方法,包括以下步骤:
S1:利用ED&R工具诊断故障,采用全局重定向和任务重定向输出系统故障和任务故障;
S2:设计任务监控获取出错任务的名称和状态;
S3:采用异常处理钩子函数在用户定义的异常处理程序中保存异常现场。
优选地,步骤S1中,利用VxWorks提供的ED&R工具在系统发生异常时记录故障类型、故障位置、预设关键寄存器值以及任务堆栈使用情况。
优选地,步骤S1中,利用全局重定向和任务重定向输出ED&R工具检测的VxWorks系统级故障信息,并将输出的故障信息保存在文件中。
优选地,步骤S1中,使用VxWorks下操作系统的ioGlobalStdSet()函数进行全局输出重定向,函数原型为:
void ioGlobalStdSet(int stdFd,int newFd);
其中,stdFd为STD_OUT或者STD_ERR,newFd为重定向的文件描述符,利用这个函数实现系统输出信息的捕获;
使用VxWorks下操作系统的ioTaskStdSet()函数进行任务输出重定向,函数原型为:
void ioTaskStdSet(int taskId,int stdFd,int newFd);
其中,taskId为任务的ID号,stdFd为STD_OUT或者STD_ERR,newFd为重定向的文件描述符,利用这个函数实现每个任务输出信息的捕获。
优选地,步骤S1中,通过进行如下设置将VxWorks系统内存使用情况、堆栈使用情况和ED&R故障诊断信息保存到文件中:
优选地,步骤S2中,创建任务监控用于周期性地监测VxWorks系统中所有运行的任务状态,当发现某个任务出错时,记录该任务的相关信息。
优选地,步骤S2中,使用VxWorks系统的两个接口函数实现任务监控功能:
int taskIdListGet(int idList[],int maxTasks);
STATUS taskStatusString(int tid,char*pString);
taskIdListGet()函数用于获得当前操作系统中运行的所有任务,idList存放获取的任务id的数组,maxTasks为数组大小;taskStatusString用于获取任务状态名称,tid是任务id,pString为任务状态名称;
在发现时任务出错时通过回调函数输出出错任务情况,出错任务数据结构为:
所述回调函数的原型为:
typedef void(*TroubleTaskFuncPtr)(const TroubleTaskStructtroubleTaskVector,int troubleTaskNum);
在调用taskStatusString函数检测到有出错的任务后,调用所述回调函数实现对异常任务的监控,在回调函数中将异常任务信息保存在日志文件中。
优选地,步骤S2中,在对每个任务进行监控时,还调用checkStack(inttaskNameOrId)函数检查每个任务的堆栈情况,调用memShow(int taskNameOrId)函数检查内存使用情况。
优选地,步骤S3中,采用VxWorks系统提供的异常处理钩子函数,将异常处理钩子函数和用户定义的异常处理程序相挂接,当发生异常时直接转入用户定义的异常处理程序。
优选地,步骤S3中,采用VxWorks系统的excHookAdd()钩子函数对系统异常进行处理,该函数的原型为:
Void excHookAdd(FUNCPTR excepHook);
其中,excepHook指向用户定义的异常处理程序,当系统检测到异常时,执行用户定义的异常处理程序。
(三)有益效果
本发明利用ED&R工具诊断故障,采用全局重定向和任务重定向输出系统故障和任务故障,设计任务监控获取出错任务的名称和状态,并采用异常处理钩子函数在用户定义的异常处理程序中保存异常现场。本发明采用的故障定位方法可以有效的记录系统死机和复位时系统级和任务级的故障信息,便于软件开发人员快速定位故障发生点,引导软件开发人员向着正确的排故方向进行故障原因分析。
附图说明
图1是本发明的方法总体流程图。
具体实施方式
为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
如图1所示,本发明提供的一种VxWorks系统下软件死机的故障定位方法,包括以下步骤:
S1:利用ED&R工具诊断故障,采用全局重定向和任务重定向输出系统故障和任务故障
VxWorks提供的ED&R工具可以在系统发生异常时记录故障类型、故障位置、关键寄存器值以及任务堆栈使用情况,全局重定向和任务重定向用于输出ED&R工具检测的VxWorks系统级故障信息,并将输出的故障信息保存在文件中。
因此,本步骤中,在VxWorks下操作系统下添加INCLUDE_EDR_SHOW组件,调用edrShow()函数查看异常故障记录。
使用VxWorks下操作系统的ioGlobalStdSet()函数进行全局输出重定向,函数原型为:
void ioGlobalStdSet(int stdFd,int newFd);
其中,stdFd为STD_OUT或者STD_ERR,newFd为重定向的文件描述符。利用这个函数就可以实现系统输出信息的捕获。
使用VxWorks下操作系统的ioTaskStdSet()函数进行任务输出重定向,函数原型:
void ioTaskStdSet(int taskId,int stdFd,int newFd);
其中,taskId为任务的ID号,stdFd为STD_OUT或者STD_ERR,newFd为重定向的文件描述符。利用这个函数就可以实现每个任务输出信息的捕获。
然后通过进行如下设置将VxWorks系统内存使用情况、堆栈使用情况和ED&R故障诊断信息保存到文件中,则:
在VxWorks系统的TaskID任务出现异常时,系统会自动将该任务的内存异常、堆栈异常和ED&R故障信息保存在errlog.txt文件中。本步骤采用将异常信息保存文件的方法,保护了异常现场,避免了系统死机或者复位后数据丢失。
S2:设计任务监控获取出错任务的名称和状态
本步骤中,创建任务监控用于周期性地监测VxWorks系统中所有运行的任务状态,当发现某个任务出错时,记录该任务的相关基本信息。
使用VxWorks系统的两个接口函数实现任务监控功能:
int taskIdListGet(int idList[],int maxTasks);
STATUS taskStatusString(int tid,char*pString);
taskIdListGet()函数用于获得当前操作系统中运行的所有任务,idList存放
获取的任务id的数组,maxTasks为数组大小;taskStatusString用于获取任务状态名称,tid是任务id,pString为任务状态名称。
在发现时任务出错时通过回调函数输出出错任务情况,出错任务数据结构为:
所述回调函数的原型为:
typedef void(*TroubleTaskFuncPtr)(const TroubleTaskStructtroubleTaskVector,int troubleTaskNum);
在调用taskStatusString函数检测到有出错的任务后,调用所述回调函数实现对异常任务的监控,在回调函数中将异常任务信息保存在日志文件中,便于事后分析。
在对每个任务进行监控时,还可以调用checkStack(int taskNameOrId)函数检查每个任务的堆栈情况,调用memShow(int taskNameOrId)函数检查内存使用情况。
本步骤采用任务监控的方法,可以实现对VxWorks系统下所有任务的实时监控。
S3:采用异常处理钩子函数在用户定义的异常处理程序中保存异常现场
本步骤中,采用VxWorks系统提供的异常处理钩子函数,将异常处理钩子函数和用户定义的异常处理程序相挂接,当发生异常时直接转入用户定义的异常处理程序。
具体地,采用VxWorks系统的excHookAdd()钩子函数对系统异常进行处理,该函数的原型为:
Void excHookAdd(FUNCPTR excepHook);
其中,excepHook指向用户定义的异常处理程序,当系统检测到异常时,会自动执行用户定义的异常处理程序。excHookAdd()钩子函数也是针对每个任务进行异常处理的,用户可以在自定义的异常处理程序中将当前任务中的关键和重要信息保存到文件中。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (10)

1.一种VxWorks系统下软件死机的故障定位方法,其特征在于,包括以下步骤:
S1:利用ED&R工具诊断故障,采用全局重定向和任务重定向输出系统故障和任务故障;
S2:设计任务监控获取出错任务的名称和状态;
S3:采用异常处理钩子函数在用户定义的异常处理程序中保存异常现场。
2.如权利要求1所述的方法,其特征在于,步骤S1中,利用VxWorks提供的ED&R工具在系统发生异常时记录故障类型、故障位置、预设关键寄存器值以及任务堆栈使用情况。
3.如权利要求2所述的方法,其特征在于,步骤S1中,利用全局重定向和任务重定向输出ED&R工具检测的VxWorks系统级故障信息,并将输出的故障信息保存在文件中。
4.如权利要求3所述的方法,其特征在于,步骤S1中,使用VxWorks下操作系统的ioGlobalStdSet()函数进行全局输出重定向,函数原型为:
void ioGlobalStdSet(int stdFd,int newFd);
其中,stdFd为STD_OUT或者STD_ERR,newFd为重定向的文件描述符,利用这个函数实现系统输出信息的捕获;
使用VxWorks下操作系统的ioTaskStdSet()函数进行任务输出重定向,函数原型为:
void ioTaskStdSet(int taskId,int stdFd,int newFd);
其中,taskId为任务的ID号,stdFd为STD_OUT或者STD_ERR,newFd为重定向的文件描述符,利用这个函数实现每个任务输出信息的捕获。
5.如权利要求4所述的方法,其特征在于,步骤S1中,通过进行如下设置将VxWorks系统内存使用情况、堆栈使用情况和ED&R故障诊断信息保存到文件中:
FILE*fstream=fopen("/ata0/errlog.txt","a+");
memShow(taskId);
checkStack(taskId);
edrFatal Show(taskId);
ioGlobalStdSet(STD_OUT,fileno(fstream));
ioGlobalStdSet(STD_ERR,fileno(fstream));
ioTaskStdSet(TaskID,STD_ERR,fileno(fstream))。
6.如权利要求5所述的方法,其特征在于,步骤S2中,创建任务监控用于周期性地监测VxWorks系统中所有运行的任务状态,当发现某个任务出错时,记录该任务的相关信息。
7.如权利要求6所述的方法,其特征在于,步骤S2中,使用VxWorks系统的两个接口函数实现任务监控功能:
int taskIdListGet(int idList[],int maxTasks);
STATUS taskStatusString(int tid,char*pString);
taskIdListGet()函数用于获得当前操作系统中运行的所有任务,idList存放获取的任务id的数组,maxTasks为数组大小;taskStatusString用于获取任务状态名称,tid是任务id,pString为任务状态名称;
在发现时任务出错时通过回调函数输出出错任务情况,出错任务数据结构为:
所述回调函数的原型为:
typedef void(*TroubleTaskFuncPtr)(const TroubleTaskStructtroubleTaskVector,int troubleTaskNum);
在调用taskStatusString函数检测到有出错的任务后,调用所述回调函数实现对异常任务的监控,在回调函数中将异常任务信息保存在日志文件中。
8.如权利要求7所述的方法,其特征在于,步骤S2中,在对每个任务进行监控时,还调用checkStack(int taskNameOrId)函数检查每个任务的堆栈情况,调用memShow(inttaskNameOrId)函数检查内存使用情况。
9.如权利要求8所述的方法,其特征在于,步骤S3中,采用VxWorks系统提供的异常处理钩子函数,将异常处理钩子函数和用户定义的异常处理程序相挂接,当发生异常时直接转入用户定义的异常处理程序。
10.如权利要求9所述的方法,其特征在于,步骤S3中,采用VxWorks系统的excHookAdd()钩子函数对系统异常进行处理,该函数的原型为:
Void excHookAdd(FUNCPTR excepHook);
其中,excepHook指向用户定义的异常处理程序,当系统检测到异常时,执行用户定义的异常处理程序。
CN201811348127.7A 2018-11-13 2018-11-13 VxWorks系统下软件死机的故障定位方法 Pending CN109522144A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811348127.7A CN109522144A (zh) 2018-11-13 2018-11-13 VxWorks系统下软件死机的故障定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811348127.7A CN109522144A (zh) 2018-11-13 2018-11-13 VxWorks系统下软件死机的故障定位方法

Publications (1)

Publication Number Publication Date
CN109522144A true CN109522144A (zh) 2019-03-26

Family

ID=65776226

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811348127.7A Pending CN109522144A (zh) 2018-11-13 2018-11-13 VxWorks系统下软件死机的故障定位方法

Country Status (1)

Country Link
CN (1) CN109522144A (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105786456A (zh) * 2014-12-22 2016-07-20 迈普通信技术股份有限公司 一种实现VxWorks任务钩子函数功能的方法及装置
CN107070694A (zh) * 2017-01-16 2017-08-18 重庆金美通信有限责任公司 一种在分布式通信网络中远程批量调试交换路由设备的方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105786456A (zh) * 2014-12-22 2016-07-20 迈普通信技术股份有限公司 一种实现VxWorks任务钩子函数功能的方法及装置
CN107070694A (zh) * 2017-01-16 2017-08-18 重庆金美通信有限责任公司 一种在分布式通信网络中远程批量调试交换路由设备的方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
王景彬等: "基于VxWorks的噪声采集系统的稳定性设计", 《运输噪声的预测与控制——2009全国环境声学学术会议论文集》 *
苏玉强等: "VxWorks下的任务监控方法及其应用", 《工业控制计算机》 *
边聚广等: "基于异常处理的控制系统软件故障定位方法", 《微处理机》 *

Similar Documents

Publication Publication Date Title
Yuan et al. Be conservative: Enhancing failure diagnosis with proactive logging
CN109284269B (zh) 异常日志分析方法、装置、存储介质及服务器
Iyer et al. Hardware-related software errors: measurement and analysis
Rodríguez et al. MAFALDA: Microkernel assessment by fault injection and design aid
Han et al. {FRAPpuccino}: Fault-detection through Runtime Analysis of Provenance
US6944796B2 (en) Method and system to implement a system event log for system manageability
Pham et al. Failure diagnosis for distributed systems using targeted fault injection
US7024592B1 (en) Method for reducing catastrophic failures in continuously operating software systems
US7930684B2 (en) System and method for logging and replaying asynchronous events
Mirgorodskiy et al. Problem diagnosis in large-scale computing environments
Xu et al. POD-Diagnosis: Error diagnosis of sporadic operations on cloud applications
WO2017124808A1 (zh) 一种故障信息的重现方法和重现装置
US20070220370A1 (en) Mechanism to generate functional test cases for service oriented architecture (SOA) applications from errors encountered in development and runtime
Pattabiraman et al. Application-based metrics for strategic placement of detectors
CN108255716B (zh) 一种基于云计算技术的软件测评方法
CN106537351B (zh) 用于诊断无线通信设备中的电源故障的方法
US20070083792A1 (en) System and method for error detection and reporting
CN110266544B (zh) 一种云平台微服务化服务失败的原因定位的装置及方法
US20030084376A1 (en) Software crash event analysis method and system
Buckley et al. Vax/vms event monitoring and analysis
Tendolkar et al. Automated diagnostic methodology for the IBM 3081 processor complex
CN103425576A (zh) 信息反馈的方法及终端
CN113094269A (zh) 应用程序测试异常分析方法及装置
US9990273B2 (en) Methods and systems for anomaly detection
CN109522144A (zh) VxWorks系统下软件死机的故障定位方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20190326