CN101046765A - 一种定位软件故障的方法 - Google Patents
一种定位软件故障的方法 Download PDFInfo
- Publication number
- CN101046765A CN101046765A CN 200610066833 CN200610066833A CN101046765A CN 101046765 A CN101046765 A CN 101046765A CN 200610066833 CN200610066833 CN 200610066833 CN 200610066833 A CN200610066833 A CN 200610066833A CN 101046765 A CN101046765 A CN 101046765A
- Authority
- CN
- China
- Prior art keywords
- information
- fault
- internal memory
- software
- relevant information
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种定位软件故障的方法,包括:a)在内存中预留一区域,用于保存系统运行状态相关信息;b)在系统运行过程中,记录当前最新的相关信息,并保存在所述预留区域;c)在故障后重启时的初始化过程中,保留所述预留区域中保存的信息;d)读取并分析所述预留区域中保存的信息,重现故障前瞬间的系统状态。从而提高定位单板复位问题的效率。根据本发明提供的方法,不需要复杂的软件、硬件,能准确记录并保存单板复位瞬间的软件运行环境信息,不影响系统的性能,可以在绝大部分单板软件中实现。
Description
技术领域
本发明涉及计算机及信息技术领域,具体涉及一种定位软件故障的方法。
技术背景
随着网络通信技术的发展,系统设备功能越来越强大,使得系统程序趋于庞大和复杂,因此,在系统运行过程中,往往会出现一些异常情况,有时导致系统或功能单元(单板)复位。但对导致异常情况的故障进行定位却较为复杂。例如利用实时操作系统,在程序中设置断点跟踪程序的运行,每次执行到断点处可得到程序的状态、堆栈的情况、各寄存器的内容以及用户设置的变量等,以此来定位故障,这种方法用于程序调试过程中很有效,但在软件程序正常运行中故障定位效率不高,显然不适用。目前定位单板软件问题的手段有许多,如系统运行的日志信息、告警信息、性能统计信息等。但是目前仍缺乏定位导致单板复位的软件问题的有效手段,主要原因是由于系统运行时出现异常情况往往稍纵即逝且难以重现,因此无法获取单板复位前瞬间的软件运行环境及相关状态信息,如函数调用堆栈、当前处理的消息等等。
在系统运行过程中,引起单板复位的直接原因难以分析确定,单板复位的现象很难重现,导致单板复位的问题定位困难,使得难以排除单板中存在的故障隐患,不利于提高系统的稳定性。
定位单板软件的故障,最常见的方式是通过系统记录的运行日志或者调试日志。日志可以记录系统运行过程中的各种信息,如消息调度轨迹、函数调度轨迹、任务调试轨迹等等。为了能有效定位单板复位的故障,需要持续地记录系统运行日志,并通过网络或者硬盘予以保存,以方便在单板复位时获取相关信息。
然而现有技术存在如下缺点:
为了提高效率,系统在运行时通常使用缓存的方式,因此读取内存中的数据并写入文件或者通过网络发送数据时,系统很难做到真正的实时处理,而单板复位后,缓冲区中的信息无法保存,所记录的信息是单板复位前一段时间的信息,而不是单板复位瞬间的信息。
由于往硬盘写日志文件或者通过网络发送日志信息的速度慢,如果要记录信息量足够的内容,会严重影响系统正常使用硬盘与网络资源。
发明内容
鉴于上述现有技术中的情况,本发明的目的是提供一种简单、有效的单板定位软件故障的方法,以解决单板软件故障难以定位的问题。
本发明提供的一种定位软件故障的方法,包括:
a)在内存中预留一区域,用于保存系统运行状态相关信息;
b)在系统运行过程中,记录当前最新的相关信息,并保存在所述预留区域;
c)在故障后重启时的初始化过程中,保留所述预留区域中保存的信息;
d)读取并分析所述预留区域中保存的信息,重现故障前瞬间的系统状态。
其中所述内存中预留区域的空间容量根据所需记录的信息量确定。
所述系统运行状态相关信息包括当前处理的消息、函数调用的堆栈、消息调度轨迹、函数调度轨迹、任务调试轨迹、调试日志、告警信息中一项或多项。
在步骤b)中,采用循环覆盖的方式记录当前最新的相关信息。
在系统恢复后,读取预留内存中的信息之前,不记录新的信息。
由上述方案可知,本发明通过预留一段内存用于记录软件的运行状态信息,运行过程中,实时记录函数调用栈、收发的消息、任务调试轨迹、调试日志、告警信息等运行相关信息,保留预留内存中的数据,使得在系统复位后仍能读取单板复位前的信息,以获取故障瞬间的有关信息,分析确定故障原因,从而提高定位单板复位问题的效率。本发明提供的一种简单、有效的故障定位方法,不需要复杂的软件、硬件,能准确记录并保存单板复位瞬间的软件运行环境信息,不影响系统的性能,可以在绝大部分单板软件中实现。
附图说明
图1是根据现有技术的内存分区示意图;
图2是根据本发明的内存分区示意图;
图3是根据本发明实施例的方法流程图。
具体实施方式
为使本发明的目的、技术方案特性以及优点更加清楚,下面以单板软件为例对本发明予以详细描述。
单板软件的所用内存一般是由系统根据需要进行分配,一种典型的单板软件的所用内存分为保留区、管理内存区、应用程序存储区、补丁存储区以及空闲区,如图1所示。各存储区的空间大小根据具体情况分配,或通过动态分配。
因为软件在运行过程(包括初始化)中,如果不能对变量或者内存进行正确的初始化,变量或者内存中的值就可能会为随机值,导致系统的输出不可预知。由于问题出现的随机性,同时问题出现的代码和导致问题的初始化代码一般相距很远,这也导致了定位此类问题很困难。所以为了能及早地暴露这样的问题,并能有效地定位出问题,一般单板软件的使用的内存在单板复位后,需进行初始化。内存初始化值可采用下面两种方式:
1)将内存的初始值设置为0000,这样可以比较容易发现与定位问题。
2)把内存的初始值设置为0xCC,因为对于Intel处理器,0xCC是中断指令,如果出现问题可以很容易发现。
为了保存单板在由于故障导致复位前系统的状态信息,参照图3,本发明提供的方法包括:
步骤S01:在所述内存中增加了一预留存储区域,如图2所示专门用于记录单板运行状态信息。
预留存储区域的空间大小取决于所需要记录的信息内容的多少。可根据具体需求确定。收集系统及软件运行状态信息包括软件及其他操作信息对于判断、诊断故障原因,修复系统极为重要。为了定位单板软件的故障,需要记录当前最新的单板软件运行相关信息,如当前处理的消息、函数调用的堆栈等。所预留的内存空间应足以存储所需信息,以保证存储的信息完整。
步骤S02:记录当前最新的单板运行相关信息,并保存在所述内存预留存储区域。在系统运行过程中,为了分析确定单板软件故障及复位原因,需实时记录定位故障所需求的单板软件运行相关信息,如当前处理的消息、函数调用的堆栈、消息调度轨迹、函数调度轨迹、任务调试轨迹以及最后N条消息、最后N条告警、最后N条调试信息等分析判断故障原因所需的信息。由于所分配的内存空间有限,而且只需记录并保存当前最新的相关信息,故可以采用循环覆盖的方式记录所需相关信息,以减少对内存的需求量。由于内存容量有限,预留区域的空间容量也是限定的,不能也不必记录太多的相关信息,在预留区域被填满时,后续的信息覆盖较早记录的信息,如此循环,以使预留区域中始终保留所需的软件运行相关信息。
另外,可以重新定义记录的内存结构,只要保证在读取预留存储区域信息时使用的结构保持一致即可。
例如,将堆栈信息记录在预留的存储区域中的接口:
WriteStackInfoToLastWord
(char*pStatck,char*pLastWordForStack)
其中pStack为堆栈信息区,pLastWordForStack为保存堆栈信息的内存地址。
每次在函数调用前,调用WriteStackInfoToLastWord把函数的堆栈信息记录在故障瞬间信息区,如果函数实现存在问题,如非法操作,导致单板复位,在单板复位前,pLastWordForStack记录的就是导致问题出现的函数调用堆栈。这样就可以很容易的定位出问题函数。
步骤S03:保留所述预留存储区域中保存的信息。在单板复位重启后的初始化过程中,对内存的预留存储区域不进行初始化,即不使用0000这样的数值来设置内存的初始值,而是避开所预留存储区域的地址空间来设置内存的初始值,这样就保留预留存储区域中存储的单板复位前的运行状态信息,而其它内存区域使用通常的初始化方法清除内存信息。
在单板由于故障而重启初始化之后,可以通过各种方法获取记录在内存的预留存储区域中的信息,如记录在文件中,或者通过网络发送。
例如WriteStackInfoToFile
(char*pLastWordForStack,char*FileName),其中pLastWordForStack为预留存储区域的堆栈内存地址,FileName为保存的文件名。
步骤S04:读取并分析所述预留空间中保存的信息,重现故障前瞬间的系统状态。通过工具解析记录预留存储区域中保存的单板复位前的运行状态相关信息,重现复位前瞬间的系统状态,如调用堆栈信息。
在读取预留存储区域中的信息之前,不在预留存储区域中记录新的内容,以免覆盖用于定位故障的有效信息。在读取上次记录的预留存储区域中的信息并保存之后,才开始更新系统状态。
以上所述仅为说明本发明的原理,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。
Claims (5)
1、一种定位软件故障的方法,其特征在于,包括:
a)在内存中预留一区域,用于保存系统运行状态相关信息;
b)在系统运行过程中,记录当前最新的相关信息,并保存在所述预留区域;
c)在故障后重启时的初始化过程中,保留所述预留区域中保存的信息;
d)读取并分析所述预留区域中保存的信息,重现故障前瞬间的系统状态。
2、如权利要求1所述的定位软件故障的方法,其特征在于,其中所述内存中预留区域的空间容量根据所需记录的信息量确定。
3、如权利要求1所述的定位软件故障的方法,其特征在于,所述系统运行状态相关信息包括当前处理的消息、函数调用的堆栈、消息调度轨迹、函数调度轨迹、任务调试轨迹、调试日志、告警信息中一项或多项。
4、如权利要求1所述的定位软件故障的方法,其特征在于,步骤b)中,采用循环覆盖的方式记录当前最新的相关信息。
5、如权利要求1所述的定位软件故障的方法,其特征在于,在系统恢复后,读取预留内存中的信息之前,不记录新的信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610066833 CN101046765A (zh) | 2006-03-29 | 2006-03-29 | 一种定位软件故障的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610066833 CN101046765A (zh) | 2006-03-29 | 2006-03-29 | 一种定位软件故障的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101046765A true CN101046765A (zh) | 2007-10-03 |
Family
ID=38771393
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200610066833 Pending CN101046765A (zh) | 2006-03-29 | 2006-03-29 | 一种定位软件故障的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101046765A (zh) |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101989936A (zh) * | 2010-11-01 | 2011-03-23 | 中兴通讯股份有限公司 | 单板故障的测试方法及系统 |
CN102185710A (zh) * | 2011-04-26 | 2011-09-14 | 中兴通讯股份有限公司 | 一种单板日志的管理方法及日志管理系统 |
CN101526911B (zh) * | 2009-03-26 | 2011-09-14 | 成都市华为赛门铁克科技有限公司 | 一种系统崩溃时系统信息存储方法及装置 |
CN103246617A (zh) * | 2012-02-07 | 2013-08-14 | 宇龙计算机通信科技(深圳)有限公司 | 移动终端和基于Android系统的数据保存方法 |
CN103281209A (zh) * | 2013-06-05 | 2013-09-04 | 大唐移动通信设备有限公司 | 一种告警信息的处理方法及设备 |
CN103324582A (zh) * | 2013-06-17 | 2013-09-25 | 华为技术有限公司 | 一种内存迁移方法、装置及设备 |
CN103902454A (zh) * | 2014-04-08 | 2014-07-02 | 安一恒通(北京)科技有限公司 | 一种软件故障的定位方法和装置 |
CN103927240A (zh) * | 2014-05-06 | 2014-07-16 | 成都西加云杉科技有限公司 | 应对软件崩溃的信息转储方法和装置 |
CN104572417A (zh) * | 2015-01-20 | 2015-04-29 | 天津市英贝特航天科技有限公司 | 基于cmos存储器的操作系统故障跟踪分析方法 |
CN105389227A (zh) * | 2015-11-05 | 2016-03-09 | 上海斐讯数据通信技术有限公司 | 一种系统崩溃信息远程发送方法及网络设备 |
CN105630620A (zh) * | 2015-12-23 | 2016-06-01 | 浪潮集团有限公司 | 一种机器故障自动化处理方法 |
CN105786688A (zh) * | 2014-12-23 | 2016-07-20 | 华润半导体(深圳)有限公司 | 微控制器应用软件的调试方法 |
CN106294176A (zh) * | 2016-08-19 | 2017-01-04 | 暴风集团股份有限公司 | Mac OS系统中应用程序故障定位的方法及系统 |
CN108040159A (zh) * | 2017-11-30 | 2018-05-15 | 努比亚技术有限公司 | 基于硬件驱动的重启定位方法、移动终端及可读存储介质 |
CN108549602A (zh) * | 2018-03-30 | 2018-09-18 | 深圳市江波龙电子有限公司 | 一种软件调试方法 |
CN108563582A (zh) * | 2018-04-28 | 2018-09-21 | 努比亚技术有限公司 | 基于电源管理的重启定位方法、移动终端及可读存储介质 |
CN108664655A (zh) * | 2018-05-18 | 2018-10-16 | 上海赛治信息技术有限公司 | 嵌入式系统的日志存储方法及系统 |
CN108762961A (zh) * | 2018-05-14 | 2018-11-06 | 深圳Tcl新技术有限公司 | 显示终端的故障回溯方法、显示终端及可读存储介质 |
CN108984402A (zh) * | 2018-07-05 | 2018-12-11 | 北方工业大学 | 一种去除完美理解假设的软件故障定位系统 |
CN109442678A (zh) * | 2018-10-18 | 2019-03-08 | 珠海格力电器股份有限公司 | 电器控制方法、系统和空调 |
-
2006
- 2006-03-29 CN CN 200610066833 patent/CN101046765A/zh active Pending
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101526911B (zh) * | 2009-03-26 | 2011-09-14 | 成都市华为赛门铁克科技有限公司 | 一种系统崩溃时系统信息存储方法及装置 |
CN101989936A (zh) * | 2010-11-01 | 2011-03-23 | 中兴通讯股份有限公司 | 单板故障的测试方法及系统 |
CN102185710A (zh) * | 2011-04-26 | 2011-09-14 | 中兴通讯股份有限公司 | 一种单板日志的管理方法及日志管理系统 |
CN103246617A (zh) * | 2012-02-07 | 2013-08-14 | 宇龙计算机通信科技(深圳)有限公司 | 移动终端和基于Android系统的数据保存方法 |
CN103281209B (zh) * | 2013-06-05 | 2016-12-28 | 大唐移动通信设备有限公司 | 一种告警信息的处理方法及设备 |
CN103281209A (zh) * | 2013-06-05 | 2013-09-04 | 大唐移动通信设备有限公司 | 一种告警信息的处理方法及设备 |
CN103324582A (zh) * | 2013-06-17 | 2013-09-25 | 华为技术有限公司 | 一种内存迁移方法、装置及设备 |
CN103902454A (zh) * | 2014-04-08 | 2014-07-02 | 安一恒通(北京)科技有限公司 | 一种软件故障的定位方法和装置 |
US9983987B2 (en) | 2014-04-08 | 2018-05-29 | Iyuntian Co., Ltd. | Method, apparatus, and device for locating a software failure |
WO2015154517A1 (zh) * | 2014-04-08 | 2015-10-15 | 安一恒通(北京)科技有限公司 | 一种软件故障的定位方法、装置及设备 |
CN103927240A (zh) * | 2014-05-06 | 2014-07-16 | 成都西加云杉科技有限公司 | 应对软件崩溃的信息转储方法和装置 |
CN105786688A (zh) * | 2014-12-23 | 2016-07-20 | 华润半导体(深圳)有限公司 | 微控制器应用软件的调试方法 |
CN105786688B (zh) * | 2014-12-23 | 2018-10-12 | 华润半导体(深圳)有限公司 | 微控制器应用软件的调试方法 |
CN104572417B (zh) * | 2015-01-20 | 2018-02-23 | 天津市英贝特航天科技有限公司 | 基于cmos存储器的操作系统故障跟踪分析方法 |
CN104572417A (zh) * | 2015-01-20 | 2015-04-29 | 天津市英贝特航天科技有限公司 | 基于cmos存储器的操作系统故障跟踪分析方法 |
CN105389227A (zh) * | 2015-11-05 | 2016-03-09 | 上海斐讯数据通信技术有限公司 | 一种系统崩溃信息远程发送方法及网络设备 |
CN105630620A (zh) * | 2015-12-23 | 2016-06-01 | 浪潮集团有限公司 | 一种机器故障自动化处理方法 |
CN105630620B (zh) * | 2015-12-23 | 2019-04-16 | 浪潮集团有限公司 | 一种机器故障自动化处理方法 |
CN106294176A (zh) * | 2016-08-19 | 2017-01-04 | 暴风集团股份有限公司 | Mac OS系统中应用程序故障定位的方法及系统 |
CN106294176B (zh) * | 2016-08-19 | 2018-11-06 | 暴风集团股份有限公司 | Mac OS系统中应用程序故障定位的方法及系统 |
CN108040159A (zh) * | 2017-11-30 | 2018-05-15 | 努比亚技术有限公司 | 基于硬件驱动的重启定位方法、移动终端及可读存储介质 |
CN108040159B (zh) * | 2017-11-30 | 2021-01-29 | 江苏觅丰电商科技有限公司 | 基于硬件驱动的重启定位方法、移动终端及可读存储介质 |
CN108549602A (zh) * | 2018-03-30 | 2018-09-18 | 深圳市江波龙电子有限公司 | 一种软件调试方法 |
CN108549602B (zh) * | 2018-03-30 | 2022-03-08 | 深圳市江波龙电子股份有限公司 | 一种软件调试方法 |
CN108563582A (zh) * | 2018-04-28 | 2018-09-21 | 努比亚技术有限公司 | 基于电源管理的重启定位方法、移动终端及可读存储介质 |
CN108563582B (zh) * | 2018-04-28 | 2022-11-29 | 深圳市卓鸿威科技有限公司 | 基于电源管理的重启定位方法、移动终端及可读存储介质 |
CN108762961A (zh) * | 2018-05-14 | 2018-11-06 | 深圳Tcl新技术有限公司 | 显示终端的故障回溯方法、显示终端及可读存储介质 |
CN108664655A (zh) * | 2018-05-18 | 2018-10-16 | 上海赛治信息技术有限公司 | 嵌入式系统的日志存储方法及系统 |
CN108984402A (zh) * | 2018-07-05 | 2018-12-11 | 北方工业大学 | 一种去除完美理解假设的软件故障定位系统 |
CN109442678A (zh) * | 2018-10-18 | 2019-03-08 | 珠海格力电器股份有限公司 | 电器控制方法、系统和空调 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101046765A (zh) | 一种定位软件故障的方法 | |
CN100375060C (zh) | 一种嵌入式系统及其实时内存监控处理方法 | |
US20020073402A1 (en) | Method for inserting global breakpoints | |
US7389497B1 (en) | Method and system for tracing profiling information using per thread metric variables with reused kernel threads | |
US11188470B2 (en) | Dynamic identification of stack frames | |
US20030135789A1 (en) | Method and system for instruction tracing with enhanced interrupt avoidance | |
US8037529B1 (en) | Buffer overflow vulnerability detection and patch generation system and method | |
US20080162611A1 (en) | Methods and apparatus for marking objects for garbage collection in an object-based memory system | |
Cingolani et al. | Transparently mixing undo logs and software reversibility for state recovery in optimistic PDES | |
CN103399812A (zh) | 基于Xen硬件虚拟化的磁盘文件操作监控系统及监控方法 | |
CN101872323A (zh) | 一种基于虚拟机的故障注入测试方法 | |
Nguyen et al. | Detecting and eliminating memory leaks using cyclic memory allocation | |
CN108089971A (zh) | 基于嵌入式实时系统的日志服务方法和系统 | |
WO2022177696A1 (en) | Cache-based trace logging using tags in system memory | |
CN1896957A (zh) | 一种定位虚拟操作系统内存泄漏的方法 | |
US8489652B2 (en) | Tracking object fields using relocatable object watchpoints | |
US20240264951A1 (en) | Logging cache line lifetime hints when recording bit-accurate trace | |
US5701486A (en) | Tracing technique for application programs using protect mode addressing | |
US20230342282A1 (en) | Memory page markings as logging cues for processor-based execution tracing | |
US20150178168A1 (en) | Persistent Data Across Reboots | |
CN1924826A (zh) | 一种非法内存读写的检测方法 | |
US9329972B2 (en) | Implementing client based throttled error logging in a computing device | |
Fetzer et al. | Detecting heap smashing attacks through fault containment wrappers | |
CN117043754A (zh) | 执行追踪内的存储器地址压缩 | |
EP3721346B1 (en) | Bit-accurate-tracing analysis with applied memory region lifetimes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |