CN1275155C - 嵌入式操作系统中异常故障定位方法 - Google Patents
嵌入式操作系统中异常故障定位方法 Download PDFInfo
- Publication number
- CN1275155C CN1275155C CN02136697.7A CN02136697A CN1275155C CN 1275155 C CN1275155 C CN 1275155C CN 02136697 A CN02136697 A CN 02136697A CN 1275155 C CN1275155 C CN 1275155C
- Authority
- CN
- China
- Prior art keywords
- information
- abnormal
- embedded
- stack
- function
- 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.)
- Expired - Lifetime
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种嵌入式操作系统中异常故障定位方法,包括以下步骤:截获操作系统的异常信息,定义异常处理函数;记录系统异常时的环境信息,包括:异常处理函数的入口参数信息、当前指针对应的前后若干条二进制指令信息、记录任务栈的有效内容;存储系统异常时的环境信息,在掉电或复位系统后该信息不丢失,需要保证存储区容量足够大;系统异常时的环境信息的读取、分析;本发明解决了嵌入式系统非调试环境下系统异常故障难以定位的问题。
Description
技术领域
本发明涉及一种在嵌入式系统中进行异常故障定位的方法。
背景技术
在嵌入式操作系统中,由于指针错误、数组越界等问题往往会引起系统异常跑飞。如果是调试环境,可以根据调试环境提供的详细信息分析堆栈、寄存器等内容从而定位问题所在。但是在非调试环境里,由于没有这些信息,如果出现程序跑飞的现象,则很难定位。对于这种现象,通常采用的方法是挂调试环境跟踪问题。在无法使用调试环境的时候,则根据实验总结规律,查找程序代码中的错误,修改认为有可能引起问题的代码段,然后再验证。这样很浪费时间,也很难肯定修改的代码就是引起系统异常的原因。尤其是对于那些偶然出现的问题,很难总结出规律,更很难解决。
发明内容
本发明所要解决的技术问题是克服上述的缺点,提供一种完善的系统异常时故障定位的处理方法,解决在嵌入式操作系统中非调试环境下系统异常时由于缺少异常信息而导致故障难以定位的问题,尤其在不方便使用调试环境时,能够方便程序问题的定位,节省查找问题的时间。
本发明的技术方案包括以下步骤:
1、截获操作系统的异常信息,定义异常处理函数;
a)根据操作系统手册得到截获异常处理的方法;
b)定义的异常处理函数尽量简短;
c)自定义的异常处理函数里不应当使用系统调用;
d)对于使用看门狗的系统,注意不要让看门狗导致系统复位而使异常处理函数无法正常执行完毕;
2、记录系统异常时的环境信息,包括:
a)异常处理函数的入口参数信息:主要是若干寄存器的值,包含异常错误原因、程序指针位置、栈指针位置、用户通用寄存器、特殊寄存器等信息;
b)当前指针对应的前后若干条二进制指令信息;
c)根据寄存器和任务栈的结构说明,计算出任务栈的起始位置和有效长度,将当前任务栈的所有有效内容完整的记录下来;
d)设置最大任务栈有效长度,防止任务栈被破坏时搜索不到栈底而出错;
3、存储系统异常时的环境信息,在掉电或复位系统后该信息不丢失,需要保证存储区容量足够大;
4、读取并分析在系统异常时的环境信息,
本步骤由如下步骤组成:
a)从存储区中读出所记录的寄存器参数信息,按照文本方式输出;分析可以得到异常类型、执行函数、上一级调用函数、硬件环境等信息;
b)从存储区中读出所记录的二进制指令,按照文本方式输出,翻译成汇编,得到当前执行指令和前后若干条汇编指令信息;
c)从存储区中读出所记录的二进制指令,按照文本方式输出;
根据任务栈的结构,分析出从任务的入口函数到当前执行函数的逐级调用关系、每一级的传递的参数和局部变量信息。
采用本发明所述的方法,解决了嵌入式系统非调试环境下系统异常故障难以定位的问题。
附图说明
图1是MPC860系统任务栈的结构。
图2是本发明的流程图。
图3是异常中断处理流程图。
图4是异常信息分析流程图。
具体实施方式
图1是MPC860系统任务栈的结构。为方便理解,列出MPC860系统系统任务栈的结构。实施例中使用的是这样的系统,任务栈里的内容包含有栈指针、调用函数指针、传递的参数、局部变量等内容。图中,SP是当前栈指针,Old SP是前一级栈指针,Initial SP是任务的初始栈指针,LR是函数调用的返回地址,不同系统可能排列会有所不同,对于其他的系统可以做参考。
参见图2,本发明包括四个步骤:首先是截获系统的异常处理中断,自定义处理函数;记录异常信息,如寄存器的值,指针,指令,任务栈等;存储信息到存储区;最后进行分析,得到异常时的函数执行位置,函数调用关系等信息。
参见图3,异常中断处理的流程包括:首先将入口参数里的信息和计算出的二进制指令记录到缓冲区里;然后根据任务栈结束标志计算任务栈的长度;根据任务栈开始地址和长度将任务栈的有效信息记录到缓冲区中;最后将这些缓冲区里的信息存储到存储区,以供后面分析使用。
参见图4,异常信息分析的流程包括:读取存储区里记录的异常复位信息,首先是关于寄存器的信息,将其取出以文本形式输出到文件或者终端,分析其内容,可以得到异常类型,当前指针等信息;其次是二进制指令的信息,将其取出以文本形式输出,翻译成汇编,可以得知当前的前后若干条指令;最后是任务栈的内容,将其取出以文本形式输出,分析可以得到函数逐级调用关系。
下面再以使用嵌入式系统PSOSystem,CPU是MPC860为例说明本发明的具体实施过程:
首先需要截获系统的异常中断:
在PSOSystem中,没有提供系统调用给用户用来实现系统异常中断的接管。通过读操作系统手册,发现可以通过以下方法截获系统异常中断
(1)修改系统的配置文件bspcfg.c,修改其中的中断向量表的安装函数,用用户自己定义的函数来替代系统的异常中断处理函数。
(2)定制自己的中断处理函数。其格式如下,格式是由操作系统决定。用户不可以改变
long ExcptHandle(unsigned long vector,C_EXCPT_FRAME*stk_frame)
其次需要记录异常中断时的环境信息:
在PSOSystem中,在进入用户的异常中断处理函数后,可以得到两个参数vector和stk_frame。前者记录了系统异常的原因,后者记录了若干寄存器的值。具体的内容请参照系统头文件。将vector和stk_frame的内容记录到存储区。stk_frame结构中的IP表示当前指针的值,根据当前指针,将当前指针对应的前后约20条指令的内容也记录到存储区中。另外需要记录栈的内容,stk_frame结构中r1寄存器里存储的是当前栈的指针。任务栈呈链表形式排列,当前栈指针位置的值记录的是上一级栈指针的位置。通过栈的链表关系,向上追溯到任务栈的初始指针位置。两个指针之间的内容就是任务栈的有效信息。
将上述的所有信息通过非易失性存储器(NVRAM)存储,记录的内容掉电以后不会丢掉,也不会被系统初始化冲掉。
对记录的内容进行分析:
当系统重新运行以后,可以对记录下来的信息进行分析,本实施例中采用TELNET触发执行的方式。用户需要看异常信息的时候,在TELNET终端敲入getcore的命令,信息全部输出到名称为core的文件中。打开core文件,就可以看到所有记录下来的信息。
首先是各个寄存器的值,从中可以得知当前指令执行的位置IP,上一级调用函数指针SPR8,通用寄存器r0-r31的值等信息。其次是指令的信息,可以根据2进制指令翻译成汇编,研究具体执行的指令是什么。最后是按照16个字节一行排列的栈的信息。参照附图1所示的栈结构,查找每一个栈指针后面的LR的值,就是一级一级调用的函数指针关系。对照编译时保留下来的MAP文件,根据指针查找函数名称。用户可以分析出系统跑飞时的函数是什么,函数的调用关系是什么,函数里执行到哪一行代码,当时的寄存器信息等内容,从而可以方便位原因。
Claims (5)
1、嵌入式操作系统中异常故障定位方法,包括以下步骤:
1)、截获操作系统的异常信息,定义异常处理函数;
2)、记录系统异常时的环境信息,包括:
a)异常处理函数的入口参数信息:主要是若干寄存器的值,包含异常错误原因、程序指针位置、栈指针位置、用户通用寄存器、特殊寄存器信息;
b)当前指针对应的前后若干条二进制指令信息;
c)记录任务栈的有效内容;
3)、存储系统异常时的环境信息,在掉电或复位系统后该信息不丢失,需要保证存储区容量足够大;
4)、读取并分析系统异常时的环境信息,包括:
a)从存储区中读出所记录的寄存器参数信息,按照文本方式输出;分析可以得到异常类型、执行函数、上一级调用函数、硬件环境信息;
b)从存储区中读出所记录的二进制指令,按照文本方式输出,翻译成汇编,得到当前执行指令和前后若干条汇编指令信息;
c)从存储区中读出所记录的二进制指令,按照文本方式输出;根据任务栈的结构,分析出从任务的入口函数到当前执行函数的逐级调用关系、每一级的传递的参数和局部变量信息。
2、如权利要求1所述的嵌入式操作系统中异常故障定位方法,其特征在于:所定义的异常处理函数里不应当使用系统调用。
3、如权利要求1所述的嵌入式操作系统中异常故障定位方法,其特征在于:对于使用看门狗的系统,注意不要让看门狗导致系统复位而使异常处理函数无法正常执行完毕。
4、如权利要求1所述的嵌入式操作系统中异常故障定位方法,其特征在于:所述的记录任务栈的有效内容是根据寄存器和任务栈的结构说明、结束标志,计算出任务栈的起始位置和有效长度。
5、如权利要求1所述的嵌入式操作系统中异常故障定位方法,其特征在于:设置最大任务栈有效长度,防止任务栈被破坏时搜索不到栈底而出错。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN02136697.7A CN1275155C (zh) | 2002-08-24 | 2002-08-24 | 嵌入式操作系统中异常故障定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN02136697.7A CN1275155C (zh) | 2002-08-24 | 2002-08-24 | 嵌入式操作系统中异常故障定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1477505A CN1477505A (zh) | 2004-02-25 |
CN1275155C true CN1275155C (zh) | 2006-09-13 |
Family
ID=34146618
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN02136697.7A Expired - Lifetime CN1275155C (zh) | 2002-08-24 | 2002-08-24 | 嵌入式操作系统中异常故障定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1275155C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010142121A1 (zh) * | 2009-06-12 | 2010-12-16 | 中兴通讯股份有限公司 | 一种嵌入式系统中的异常处理方法及装置 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1311337C (zh) * | 2004-06-24 | 2007-04-18 | 华为技术有限公司 | 设备的保护运行模式实现方法及维护方法 |
CN100344204C (zh) * | 2004-09-30 | 2007-10-17 | 华为技术有限公司 | 一种手持设备的监控方法及故障定位方法 |
CN100357908C (zh) * | 2005-01-21 | 2007-12-26 | 明基电通股份有限公司 | 电子装置程序的测试方法 |
CN100464312C (zh) * | 2006-08-25 | 2009-02-25 | 上海普元信息技术有限责任公司 | 构件化软件系统中实现非Java构件的调试的方法 |
CN101175109B (zh) * | 2006-10-31 | 2011-05-11 | 中兴通讯股份有限公司 | 系统异常信息处理方法和装置 |
CN101192192B (zh) * | 2006-11-21 | 2010-08-18 | 华为技术有限公司 | 用于实时操作系统的任务异常诊断方法及系统 |
CN101207408B (zh) * | 2006-12-22 | 2012-07-11 | 中兴通讯股份有限公司 | 一种用于主备倒换的综合故障检测装置和方法 |
CN101398781B (zh) * | 2007-09-30 | 2010-11-10 | 英业达股份有限公司 | 一种快速诊断系统软件缺陷的系统及方法 |
CN101231599B (zh) * | 2008-02-02 | 2010-07-14 | 中兴通讯股份有限公司 | 一种定位特定内存被函数非法改写的方法 |
CN101539883B (zh) * | 2009-05-05 | 2011-11-16 | 北京和利时系统工程有限公司 | 嵌入式系统的错误追踪方法和装置 |
CN101609429B (zh) * | 2009-07-22 | 2011-09-07 | 大唐微电子技术有限公司 | 一种调试嵌入式操作系统的方法和装置 |
CN104268067B (zh) * | 2014-09-24 | 2017-06-06 | 湖北盛天网络技术股份有限公司 | 用于获取操作系统的崩溃信息的方法和装置 |
CN105446806B (zh) * | 2014-09-28 | 2019-03-15 | 广州市动景计算机科技有限公司 | 一种应用程序无响应的处理方法及装置 |
CN107451045A (zh) * | 2016-05-31 | 2017-12-08 | 北京信威通信技术股份有限公司 | 一种异常信息定位的方法及装置 |
CN108984383A (zh) * | 2017-05-31 | 2018-12-11 | 芜湖美的厨卫电器制造有限公司 | 程序跑飞的检测方法、装置及家用电器 |
CN111949547A (zh) * | 2020-08-22 | 2020-11-17 | 深圳市捷诚技术服务有限公司 | 基于单片机异常的问题定位方法、单片机、设备以及系统 |
CN112232027A (zh) * | 2020-10-19 | 2021-01-15 | 腾讯科技(深圳)有限公司 | 一种符号翻译方法、装置、设备和计算机可读存储介质 |
CN116430835B (zh) * | 2023-06-13 | 2023-09-15 | 力高(山东)新能源技术股份有限公司 | 一种Cortex-M微控制器的故障存储与分析方法 |
-
2002
- 2002-08-24 CN CN02136697.7A patent/CN1275155C/zh not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010142121A1 (zh) * | 2009-06-12 | 2010-12-16 | 中兴通讯股份有限公司 | 一种嵌入式系统中的异常处理方法及装置 |
US8762785B2 (en) | 2009-06-12 | 2014-06-24 | Zte Corporation | Method and device for handling exceptions in embedded system |
Also Published As
Publication number | Publication date |
---|---|
CN1477505A (zh) | 2004-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1275155C (zh) | 嵌入式操作系统中异常故障定位方法 | |
US5938778A (en) | System and method for tracing instructions in an information handling system without changing the system source code | |
US8516444B2 (en) | Debugging a high performance computing program | |
EP0387172A2 (en) | Procedure call interface | |
SE520072C2 (sv) | Metod och system för exceptionshantering | |
JPH10301807A (ja) | コンピュータソフトウェアの評価のための高速トラップ | |
US20060161892A1 (en) | Systems and methods for determining software package identity during a system build | |
CN1885275A (zh) | 一种嵌入式系统及其实时内存监控处理方法 | |
US20120096434A1 (en) | System and method for detecting preventative maintenance operations in computer source code | |
CN1573713A (zh) | 可插元件上的断点调试 | |
CN103019787A (zh) | 函数调用关系确定方法、热补丁升级方法及装置 | |
US8122454B2 (en) | Managing memory resources in a shared memory system | |
CN101847096B (zh) | 包含栈变量函数的优化方法 | |
JP2526020B2 (ja) | 例外条件処理方法及び装置 | |
CN1485740A (zh) | 一种基于主机平台的嵌入式模块和子系统的通用测试装置 | |
CN111966390A (zh) | 项目构建方法、系统、终端设备及存储介质 | |
CN1896957A (zh) | 一种定位虚拟操作系统内存泄漏的方法 | |
US20130185602A1 (en) | Heap dump occurrence detection | |
CN113010116A (zh) | 一种数据处理方法、装置、终端设备及可读存储介质 | |
CN114968282A (zh) | 一种异常处理执行的优化方法和系统 | |
CN1400529A (zh) | 一种实时嵌入系统的故障定位方法 | |
CN114756284A (zh) | 变长指令集系统栈回溯的实现方法及装置 | |
CN114003269A (zh) | 组件处理方法、装置、电子设备及存储介质 | |
CN1695206A (zh) | 检测对持久存储器写错的方法与装置 | |
WO2023016485A1 (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 | ||
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20060913 |