CN100388234C - 一种基于有限状态机的对内存变量改写进行监控的方法 - Google Patents
一种基于有限状态机的对内存变量改写进行监控的方法 Download PDFInfo
- Publication number
- CN100388234C CN100388234C CNB2005101304560A CN200510130456A CN100388234C CN 100388234 C CN100388234 C CN 100388234C CN B2005101304560 A CNB2005101304560 A CN B2005101304560A CN 200510130456 A CN200510130456 A CN 200510130456A CN 100388234 C CN100388234 C CN 100388234C
- Authority
- CN
- China
- Prior art keywords
- monitoring
- state machine
- finite state
- monitoring unit
- variable
- 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 - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于有限状态机的对内存变量改写进行监控的方法,包含:根据要监控的内存变量的监控参数,以及监控条件,设置监控单元;在有限状态机的不同位置设置若干监控点;当程序运行到监控点时,判断监控单元中记录的相应的监控条件是否已满足;如果所述监控条件已经满足,则在有限状态机的监控点输出监控信息。本发明的优点在于:在硬件CPU不具有数据调试寄存器的情况下,将非堆栈变量被改写的故障定位到FSM的状态和事件级,大大提高了调试效率,定位准确,实时性好,也可进一步通过本方案将非堆栈变量被改写定位到FSM内的函数级。
Description
技术领域
本发明涉及一种在有限状态机的嵌入式软件环境中,引入监测非堆栈内存变量被改写的方法,提供一种基于共享全局内存的多任务运行环境下定位非堆栈变量被改写的手段,尤其涉及一种基于有限状态机的对内存变量改写进行监控的方法。
背景技术
在嵌入式多任务环境中,如何定位非堆栈变量被错误改写是调试过程以及版本运行过程中最费神的一项工作,多任务情况下同一时间有多个任务并发执行,如何确定非堆栈变量何时被错误改写、被谁错误改写、如何捕捉错误改写是软件调试或软件故障定位中首先要考虑的问题。
在现有的非堆栈内存变量读写监控方法中,一般是通过硬件手段来定位非堆栈内存变量被错误改写的故障。现有很多商用仿真器或调试器利用中央处理器(CPU-Central Process Unit)提供的数据调试寄存器,设置数据读写硬件断点,实现对读写变量的监控。该方式的优点是能够进行准确定位,实时性好,但该方式也存在缺陷:它要依赖于CPU硬件,当CPU硬件不提供数据调试寄存器时,就无法完成对非堆栈变量被改写的监视;另外,该方法也受限于CPU的数据断点寄存器个数,一次监控的变量个数不能超过数据断点寄存器的个数,使其应用范围受到限制。
另一种对非堆栈变量错误改写的监控方法主要是依赖变量改写后引起CPU异常,然后利用堆栈回溯的方法进行定位,如在专利CN02136697“嵌入式操作系统中异常故障定位方法”中所述。该方法的缺陷在于,在共享全局内存的多任务处理环境中,由于多个任务处在统一编址的地址空间内,当一个任务错误地更改另一个任务的非堆栈状态变量后,并不一定会或不会立即造成CPU内存读写异常,常常出现一个任务运行了很长时间后,可能由于其它部分的内存读写,引起CPU异常中断的现象。由于这种迟滞效应,使非堆栈变量被错误改写的故障定位难度加大。
在嵌入式软件领域中,软件常常被建模为若干个有限状态机(FSM-FiniteState Machine)之间的交互,每个FSM又被抽象为一个五元组,即输入集、输出集、状态集、初始状态和映射函数。正常运行的FSM一般由输入和当前状态决定其动作和输出;在具体实现时,这些FSM又常常被映射到一个操作系统的进程或任务来实现,这些进程或任务收到一个事件(消息)后,执行动作,并输出相应的结果。非堆栈变量被错误改写可充分利用嵌入式软件的这种特点,进行有效的故障定位。
发明内容
本发明所要解决的技术问题在于提供一种充分利用软件由有限状态机进行建模处理的特点,通过对FSM的当前状态和事件进行跟踪,监测该FSM在执行动作中是否对所监控的非堆栈变量,即任意非堆栈范围内的变量,进行了不希望的更改,如果发现更改,则记录并输出当前状态和事件信息,力求在尽可能早的时间完成对非堆栈变量被错误改写的监控。
为了解决上述技术问题,本发明利用FSM的调度,将非堆栈变量被改写操作定位到某一FSM的状态和事件,提供一种基于有限状态机的对内存变量改写进行监控的方法,所述方法包含:(1)根据要监控的内存变量的监控参数,以及监控条件,设置监控单元;(2)在有限状态机的不同位置设置若干监控点;(3)当程序运行到监控点时,判断监控单元中记录的相应的监控条件是否已满足;(4)如果所述监控条件已经满足,则在有限状态机的监控点输出监控信息。
本发明的优点在于:在硬件CPU不具有数据调试寄存器的情况下,将非堆栈变量被改写的故障定位到FSM的状态和事件级,大大提高了调试效率,定位准确,实时性好,也可进一步通过本方案将非堆栈变量被改写定位到FSM内的函数级。
附图说明
图1为本发明实施例1在监控点对监控单元进行监控的方法流程图;
图2为本发明实施例1中监控点的设置流程图;
图3为本发明实施例2的监控流程图。
具体实施方式
下面结合附图,对本发明的实施例进行详细说明。
实施例1
如图1所示,本发明提供一种基于有限状态机的对内存变量改写进行监控的方法,具体包含:
首先,根据要监控的内存变量的监控参数,以及监控条件,设置监控单元(步骤101)。然后,在有限状态机的不同位置设置若干监控点(步骤102)。当程序运行到监控点时,判断监控单元中记录的相应的监控条件是否已经满足(步骤103)。如果所述监控条件已经满足,则在有限状态机的监控点输出监控信息(步骤104)。接着,对下一个监控单元进行监控(步骤105)。如果所述监控条件没有满足,则直接对下一个监控单元进行监控(步骤105)。
如图2所示,设置监控单元的具体步骤如下:
a、确定要监控的变量的内存地址(步骤201)。
b、确定要监控变量的数据类型和数据长度(步骤202)。变量长度与变量类型相对应,如BYTE型变量长度为1,WORD型变量长度为2,DWORD型变量长度为4等。变量长度可以是任意长度,内存数据变量长度可以任意指定。
c、确定内存监控条件(步骤203)。监控条件包括监控值和监控逻辑。监控值就是判定条件使用的值,监控逻辑包括但不限于等于、大于、小于、不等于,不大于、不小于、大于等于、小于等于以及各种组合条件。
d、生成新的监控单元(步骤204)。
e、根据需要监控的变量信息设置监控单元(步骤205)。每次设置一个监控单元,通过多次设置可以对多个单元进行设置,不限制变量个数。
f、把新的监控单元放入监控队列(步骤206)。在实现中,采用链表来存储监控单元,使用一个变量记录监控单元的个数,当有新单元插入到监控单元的链表中,监控个数累加一。
监控点就是在何时进行内存监控的条件判断,当监控条件成立时,在该点记录或输出相应的信息。监控点可以设置在有限状态机的入口处;有限状态机的出口处;有限状态机的内部处理流程中。在通常的嵌入式操作系统中,可以在任务或进程的上下文切换时设置控制点。一般实现时均是以上几种情况的综合应用。
在各监控点输出的监控信息如下所示:
在有限状态机的入口处,如果有设置的条件满足,则记录并输出前次状态机的状态、当前收到的事件及其内容;
在有限状态机的出口处,如果有设置的条件满足,则记录并输出本次状态机的状态、处理的事件及其内容、发生的时间。
在有限状态机的内部处理流程中,即在特定的状态下执行某事件的处理流程,如果设置的条件满足,则可以记录运行程序的位置,在具体实现时可以把程序断住,以方便观察调试。
在通常的嵌入式操作系统中,在任务或进程的切换时,如果有设置的条件满足,则可以记录上下文切换前后的任务或进程的信息。
实施例2
如图3所示,在本发明中,当不能确定监控点及监控单元是否设置时,具体流程如下:
首先,判断监控点是否设置(步骤301),如果监控点没有设置,则退出监控程序。如果已经设置监控点,则判断监控单元是否设置(步骤302);如果已经设置监控单元,则取出一个监控单元,判断是否已监控完毕(步骤303);如果没有监控完毕,则判断该监控单元监控条件是否满足(步骤304);如果监控条件满足,则标记该单元监控完毕标志,并记录监控信息(步骤305),判断监控单元是否扫描结束(步骤306);而在上述过程中,没有检测到监控单元或发现该监控单元已经监控完毕或该监控单元的监控条件没有满足,都将直接判断监控单元是否扫描结束(步骤306)。如果没有结束对监控单元的扫描,则重复对监控单元的判断,如果监控单元扫描结束,则完成本次监控程序。
在基站软件的设计过程中,各业务软件模块抽象成一个个FSM,每个FSM被映射到一个规范描述语言(SDL-Specification Description Language)进程来实现。
本发明具有一定的通用性,其使用并不局限于基于有限状态机的多任务环境,还可以推广应用于很多其他环境中,如:进程上下文切换共享内存的非堆栈变量监视、基于消息的中间件中非堆栈内存变量的监视处理等。
在基站软件调试过程中,采用本发明时,可监测到小区管理进程的全局变量被数据库装载进程在执行增量同步时越界改写。
Claims (8)
1.一种基于有限状态机的对内存变量改写进行监控的方法,其特征在于,包括如下步骤:
(1)根据要监控的内存变量的监控参数,以及监控条件,设置监控单元;
(2)在有限状态机的不同位置设置若干监控点;
(3)当程序运行到监控点时,判断监控单元中记录的相应的监控条件是否已满足;
(4)如果所述监控条件已经满足,则在有限状态机的监控点输出监控信息。
2.如权利要求1所述的方法,其特征在于,所述监控参数包括:内存地址、数据类型、数据长度。
3.如权利要求1所述的方法,其特征在于,所述监控条件包括监控值与监控逻辑。
4.如权利要求1所述的方法,其特征在于,所述步骤(2)中,监控点设置的位置包括以下位置的组合:
有限状态机的入口处;
有限状态机的出口处;
有限状态机的内部处理流中;
在任务或进程的上下文切换处。
5.如权利要求4所述的方法,其特征在于,如果在有限状态机的入口处、有限状态机的出口处、有限状态机的内部处理流中或在任务、进程的上下文切换处没有检测到监控点,则退出监控程序。
6.如权利要求1所述的方法,其特征在于,所述步骤(3)中,如果当程序运行到监控点时,没有检测到监控单元,则退出监控程序。
7.如权利要求1所述的方法,其特征在于,所述步骤(3)中,如果在当前监控单元中记录的相应的监控条件没有满足,则退出当前监控单元的监控,而监控下一个监控单元。
8.如权利要求1所述的方法,其特征在于,所述步骤(4)包括:
在有限状态机的入口处,如果设置的监控条件满足,则记录并输出前次状态机的状态、当前收到的事件及其内容;
在有限状态机的出口处,如果设置的监控条件满足,则记录并输出本次状态机的状态、处理的事件及其内容、发生的时间;
在有限状态机的内部处理流程中,如果设置的监控条件满足,则记录运行程序的位置;
在任务或进程的上下文切换处,如果设置的监控条件满足,则记录上下文切换前后的任务或进程的信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005101304560A CN100388234C (zh) | 2005-12-09 | 2005-12-09 | 一种基于有限状态机的对内存变量改写进行监控的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005101304560A CN100388234C (zh) | 2005-12-09 | 2005-12-09 | 一种基于有限状态机的对内存变量改写进行监控的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1776644A CN1776644A (zh) | 2006-05-24 |
CN100388234C true CN100388234C (zh) | 2008-05-14 |
Family
ID=36766161
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005101304560A Expired - Fee Related CN100388234C (zh) | 2005-12-09 | 2005-12-09 | 一种基于有限状态机的对内存变量改写进行监控的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100388234C (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063368B (zh) * | 2010-12-16 | 2013-03-27 | 国网电力科学研究院 | 基于命名变量的全景数据在线实时调试方法 |
CN102306109B (zh) * | 2011-07-18 | 2014-02-19 | 深圳市康必达中创科技有限公司 | 一种实现通讯管理机内部逻辑可编程方法 |
US9363621B2 (en) | 2012-11-12 | 2016-06-07 | Huawei Technologies Co., Ltd. | System and method adopting a reliable stop-and-wait hybrid automatic repeat request protocol |
CN103198012A (zh) * | 2013-04-25 | 2013-07-10 | 李姮乐 | 一种基于扩展状态机图的测试用例自动产生方法 |
CN104239201B (zh) * | 2013-06-20 | 2018-08-24 | 上海博达数据通信有限公司 | 一种软单步系统中内存读写监控方法 |
CN104731696B (zh) | 2013-12-19 | 2017-10-10 | 腾讯科技(深圳)有限公司 | 定位程序代码中bug的方法及相关装置 |
CN105159809B (zh) * | 2015-09-29 | 2018-11-16 | 杭州华为数字技术有限公司 | 基于状态机故障定位方法以及装置 |
CN107657316B (zh) * | 2016-08-12 | 2020-04-07 | 北京深鉴智能科技有限公司 | 通用处理器与神经网络处理器的协同系统设计 |
CN109918265A (zh) * | 2019-02-28 | 2019-06-21 | 沈阳天眼智云信息科技有限公司 | 嵌入式微处理器运行内存的监测方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1266228A (zh) * | 1999-03-04 | 2000-09-13 | 英业达股份有限公司 | 文件系统的动态监控方法 |
CN1310395A (zh) * | 2000-02-24 | 2001-08-29 | 英业达股份有限公司 | 登记库的动态监控方法 |
US20030014694A1 (en) * | 2001-07-03 | 2003-01-16 | Francois Draperi | Process monitor module |
-
2005
- 2005-12-09 CN CNB2005101304560A patent/CN100388234C/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1266228A (zh) * | 1999-03-04 | 2000-09-13 | 英业达股份有限公司 | 文件系统的动态监控方法 |
CN1310395A (zh) * | 2000-02-24 | 2001-08-29 | 英业达股份有限公司 | 登记库的动态监控方法 |
US20030014694A1 (en) * | 2001-07-03 | 2003-01-16 | Francois Draperi | Process monitor module |
Also Published As
Publication number | Publication date |
---|---|
CN1776644A (zh) | 2006-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100388234C (zh) | 一种基于有限状态机的对内存变量改写进行监控的方法 | |
US8949671B2 (en) | Fault detection, diagnosis, and prevention for complex computing systems | |
CN101976217B (zh) | 网络处理器异常检测方法及系统 | |
CN100442245C (zh) | 用于分析运行时存储器访问错误的方法和系统 | |
US7950001B2 (en) | Method and apparatus for instrumentation in a multiprocessing environment | |
CN101719090A (zh) | 对计算机软件系统崩溃原因进行自动分析的方法 | |
US8140908B2 (en) | System and method of client side analysis for identifying failing RAM after a user mode or kernel mode exception | |
CN101458652B (zh) | 微控制器嵌入式在线仿真调试系统 | |
WO2005013053A2 (en) | Apparatus and method for software debugging | |
US20130159977A1 (en) | Open kernel trace aggregation | |
CN103109276B (zh) | 系统测试方法 | |
CN102521098B (zh) | Cpu死机监控的处理方法和装置 | |
CN103034575B (zh) | 崩溃分析方法和装置 | |
CN101446918A (zh) | 一种实现用户态调试器调试单个函数的方法及系统 | |
CN103268277A (zh) | 一种输出日志信息的方法及系统 | |
CN103049373B (zh) | 一种崩溃的定位方法和装置 | |
CN108549591A (zh) | 一种嵌入式系统的黑匣子装置及其实现方法 | |
CN101458725B (zh) | 微控制器芯片及其调试方法 | |
CN101154185A (zh) | 软件运行时执行恢复与重放方法 | |
CN103034577B (zh) | 一种定位关机慢的方法及装置 | |
CN112765032A (zh) | 程序调试方法、装置、设备及存储介质 | |
CN101685420B (zh) | 多线程调试方法和装置 | |
Ezzati-Jivan et al. | Depgraph: Localizing performance bottlenecks in multi-core applications using waiting dependency graphs and software tracing | |
CN105095079B (zh) | 一种热点模块指令跟踪的方法及设备 | |
CN101237350B (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080514 Termination date: 20171209 |
|
CF01 | Termination of patent right due to non-payment of annual fee |