CN101599042A - 程序跑飞检测方法及其设备 - Google Patents
程序跑飞检测方法及其设备 Download PDFInfo
- Publication number
- CN101599042A CN101599042A CNA200810110011XA CN200810110011A CN101599042A CN 101599042 A CN101599042 A CN 101599042A CN A200810110011X A CNA200810110011X A CN A200810110011XA CN 200810110011 A CN200810110011 A CN 200810110011A CN 101599042 A CN101599042 A CN 101599042A
- Authority
- CN
- China
- Prior art keywords
- program
- code
- address
- fleet
- flies
- 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
公开了一种检测程序跑飞的方法及其设备,能够准确检测程序跑飞的具体的位置。该方法包括步骤:执行程序中包含的代码;判断与代码相关的程序计数器地址是否在事先计算的地址范围之内;以及在程序计数器地址在事先计算的地址范围之外的情况下,确定程序跑飞。根据本发明的实施例,在程序跑飞时,能够准确检测到程序跑飞,并且及时向程序员通知程序跑飞以及执行履历,提高了程序开发效率。
Description
技术领域
本发明涉及调试过程中程序跑飞(program runout)的检测,具体涉及一种程序跑飞检测方法及其设备,它能够准确检测并向用户通知程序跑飞。
背景技术
在程序开发过程中,需要对开发的程序进行调试,以便发现程序能否正常运行。所谓程序跑飞就是程序计数器(PC:program counter)指针因为某种原因没有按照预定的程序变更,或者PC指针指向一个不确定的或者根本就没有存放用户代码的程序存贮空间,造成PC指针根本无法恢复到用户代码空间之内。出现程序跑飞之后,通常是系统复位,重新开始执行程序。
用来检测程序跑飞的一种解决方案是判断执行的代码的地址是否在ROM的地址空间范围之内,例如0000H~FFFFH。如果在ROM的地址空间范围之内,则认为没有跑飞,否则认为出现了程序跑飞。但是,众所周知,ROM中既存储有程序代码,又存储有数据代码,还存在一些未使用的空间,如果执行的代码的所对应的地址在ROM内部,但是并没有按照想要的情况运行,则不容易判断出程序是否真正跑飞,或者说用户可能注意不到程序跑飞。
在这种情况下,只能通过程序执行的结果来判断程序是否跑飞,例如死机等等。一旦出现这样的情况,程序员无法确定到底是程序的什么地方出了问题,只能以枚举的形式或者试错的形式来发现问题,这要消耗大量的时间,并且并不能准确找到程序跑飞的位置和原因。
用来检测程序跑飞的另一种解决方案是利用‘看门狗’,它可以是软件形式的或者硬件形式的。‘看门狗(watchdog)’是通过要求执行的程序定期发送确认信号或者其他信息来判断程序是否跑飞。例如按照预定的规则,执行中的程序并未在设定的时刻发出确认信号,则认为出现了程序跑飞。
但是利用‘看门狗’同样无法解决准确定位程序跑飞的准确位置和保护程序跑飞的现场的问题。一旦发现了程序跑飞,程序员同样要花费大量的时间和精力来判断程序跑飞的位置和引起程序跑飞的原因。
发明内容
本发明的一个目的是提出一种检测程序跑飞的方法及其设备,它能够准确检测程序跑飞的位置,从而方便程序员判断引起程序跑飞的原因,大大提高了程序开发效率。
在本发明的一个方面,提出了一种检测程序跑飞的方法,包括步骤:执行程序中包含的代码;判断与代码相关的程序计数器地址是否在事先计算的地址范围之内;以及在程序计数器地址在事先计算的地址范围之外的情况下,确定程序跑飞。
根据本发明的实施例,所述方法还包括:在程序执行之前计算与该程序中的代码相关的地址范围,并以与所述代码相对应的形式存储所计算的地址范围。
根据本发明的实施例,所述方法还包括:在程序执行过程中,记忆程序中的代码的执行履历。
根据本发明的实施例,所述的方法还包括:在确定程序跑飞的情况下,通知用户程序跑飞。
根据本发明的实施例,所述的方法还包括:向用户显示到程序跑飞的位置之前的执行履历。
在本发明的第二方面,提出了一种检测程序跑飞的方法,包括步骤:执行程序中包含的代码;基于与所执行的代码的程序计数器地址,尝试从包括了至少部分代码的调试信息的文件中取得相应的调试信息;在取得相应调试信息的情况下,确定程序跑飞。
在本发明的第三方面,提出了一种检测程序跑飞的设备,包括:执行程序中包含的代码的装置;检测装置,判断与代码相关的程序计数器地址是否在事先计算的地址范围之内,以及在程序计数器地址在事先计算的地址范围之外的情况下,确定程序跑飞。
根据本发明的实施例,所述的设备还包括:地址计算装置,在程序执行之前计算与该程序中的代码相关的地址范围;以及地址范围存储装置,以与所述代码相对应的形式存储所计算的地址范围。
根据本发明的实施例,所述的设备还包括:执行履历记忆装置,在程序执行过程中,记忆程序中的代码的执行履历。
根据本发明的实施例,所述的设备还包括:通知装置,在确定程序跑飞的情况下,通知用户程序跑飞。
根据本发明的实施例,所述通知装置向用户显示到程序跑飞的位置之前的执行履历。
在本发明的第四方面,提供了一种检测程序跑飞的设备,包括:执行程序中包含的代码的装置;检测装置,基于与所执行的代码的程序计数器地址,尝试从包括了至少部分代码的调试信息的文件中取得相应的调试信息,以及在取得相应调试信息的情况下,确定程序跑飞。
利用上述方法和设备,由于能够准确地确定PC地址是否在预定的范围内,或者存在与该PC地址相对应的调试信息,使得在程序跑飞时,能够准确检测到程序跑飞,并且及时向程序员通知程序跑飞以及执行履历,提高了程序开发效率。
附图说明
从下面结合附图的详细描述中,本发明的上述特征和优点将更加明显,其中:
图1示出了根据本发明实施例的调试器的示意性结构框图;
图2是描述根据本发明实施例的检测程序跑飞的方法的流程图;
图3是描述通过比较PC地址与预先设定的范围来判断程序跑飞的过程的流程图;
图4是描述通过判断能够取得与该PC地址相对应的调试信息来判断程序是否跑飞的过程的流程图;
图5示出了在检测到程序跑飞后向用户通知程序跑飞的用户界面的示意图;以及
图6示出了在检测到程序跑飞后向用户显示执行履历(trace)的用户界面的示意图。
具体实施方式
下面,参考附图详细说明本发明的优选实施方式。为了清楚和简明,包含在这里的已知的功能和结构的详细描述将被省略,以防止它们使本发明的主题不清楚。
图1示出了根据本发明实施例的调试器的示意性结构框图。如图1所示,根据本发明实施例的调试器100包括检测部120,执行履历记忆部140,通知部130,地址计算部110和地址范围存储部150。
如图1所述,地址计算部110事先计算可执行文件中的代码的地址的正常范围,并且将代码与其地址范围相对应地存储在地址范围存储部150中。
在程序执行过程中执行履历记忆部140记忆所执行的代码(指令)的履历。这里执行履历是指程序执行的指令历史,以及程序的调用过程。
检测部120根据程序执行过程中程序计数器PC所反映的PC地址是否在相应的正常范围之内来判断程序是否跑飞。一旦检测到某代码(指令)的PC地址不在事先计算的正常范围之内,则认为程序跑飞。在这种情况下,停止执行程序,并且通知部130首先向用户通知程序跑飞,如图5所示,然后根据执行履历记忆部140中记忆的在该代码之前所执行的所有代码的执行履历,如图6所示。在检测到程序跑飞后,程序可以跳转到跑飞出,显示给用户,并且提示可能的原因。作为另一例子,在检测到程序跑飞后,可以直接向用户显示跑飞的代码所对应的源文件的名称以及相关代码行(段)的位置,并突出显示。
作为本发明的另一实施方式,检测部120也可以根据事先存储的调试信息文件来判断程序是否跑飞。调试信息文件中记录了在事先获得的指示程序是否有误的信息(如源文件文件名和行号等)。如果程序没有跑飞,则存在与相应的代码(指令)相对应的调试信息。因此,通过判断能否取得与PC地址相关联的调试信息就能够判断出程序是否跑飞。
下面对照流程图详细说明本发明实施例的调试器的详细构成和操作过程。
图2是描述根据本发明实施例的检测程序跑飞的方法的流程图。如图2所示,首先CPU(未示出)执行程序(S10)。在执行程序的过程中,执行履历记忆部140记忆所执行的每条指令(代码)的历史(S11),并且检测部120判断输入的PC地址是否能够满足预定的条件(S12),例如是否在事先计算并存储在地址范围存储部150中的地址范围之内,或者调试信息文件中是否存在相关的调试信息。
如果检测部120判断PC地址正常(S12:否),则认为程序未跑飞(S13)。如果检测部120判断PC地址异常(S14:是),则认为程序跑飞(S14)。此时,停止执行程序,并且通知部130向用户提示程序跑飞,进而提供到程序跑飞的位置为止的执行履历(S15)。
图3是描述通过比较PC地址与预先设定的范围来判断程序跑飞的过程的流程图。如图3所示,在程序执行之前,由地址计算部110事先计算程序中的代码或者指令相对应的正常PC地址范围,并且将计算的地址范围与该指令相对应地存储在地址范围存储部150中(S20)。
然后,CPU执行该程序。程序的执行过程中,检测部120比较PC地址是否在相应的代码的正常地址范围内(S21)。如果在该范围之内(S21:否),则判断程序未跑飞,继续执行(S23)。
如果检测部120通过比较判断该PC地址在相应代码的正常地址范围之外(S21:是),则判断程序已经跑飞(S24)。此时,停止执行程序,并且通知部130向用户提示程序跑飞,进而提供到程序跑飞的位置为止的执行履历。
图4是描述通过判断能够取得与该PC地址相对应的调试信息来判断程序是否跑飞的过程的流程图。如图4所示,调试信息文件中事先存储了指示程序是否存在错误的调试信息,这些信息与程序代码(指令)对应存储。在执行程序的过程中,检测部120根据PC地址来尝试从调试信息文件中取得相应的调试信息,例如文件名或行号等信息(S30)。
然后检测器120判断是否取得了相应的调试信息(S31)。如果取得了与该PC地址相对应的调试信息(S31:是),则意味着该程序到目前为止没有跑飞(S32)。如果未取得相应的调试信息(S31:否),则认为该程序已经跑飞(S33)。然后,停止执行程序,并且通知部130向用户提示程序跑飞,进而提供到程序跑飞的位置为止的执行履历。
图5示出了在检测到程序跑飞后向用户通知程序跑飞的用户界面的示意图。图6示出了在检测到程序跑飞后向用户显示执行履历(trace)的用户界面的示意图。如图5所示,在检测部120检测到程序跑飞后,通知部130向用户通知该程序跑飞。如图6所示,通知部显示到程序跑飞地址为止的执行履历,供用户分析出现问题的原因。
以上所虽然以功能模块的形式描述了调试器的构成及其功能,但是这并不意味着将本发明限定于上述的调试器。本领域的普通技术人员能够将其中的一个或者多个模块进行组合,或者将其中的一个模块的功能分别在两个或者更多个模块中实现。
另外,上述的调试器中的功能模块可以由软件来实现,也可以由硬件来实现,例如PC地址与正常地址范围的比较过程就可以在某个硬件中实现,例如在目标硬件或者与目标硬件关联的连接元件中实现该功能。
另外,虽然作为本发明实施例之一的调试器可以作为软件或者硬件来实现。但是在作为软件来实现的情况下,该调试器(调试程序)可被存储在记录介质上,例如光存储器件或者磁存储器器件等,通过CPU执行该程序来实现本发明的方法和调试器。
上面的描述仅用于实现本发明的实施方式,本领域的技术人员应该理解,在不脱离本发明的范围的任何修改或局部替换,均应该属于本发明的权利要求来限定的范围,因此,本发明的保护范围应该以权利要求书的保护范围为准。
Claims (18)
1、一种检测程序跑飞的方法,包括步骤:
执行程序中包含的代码;
判断与代码相关的程序计数器地址是否在事先计算的地址范围之内;以及
在程序计数器地址在事先计算的地址范围之外的情况下,确定程序跑飞。
2、如权利要求1所述的方法,还包括:
在程序执行之前计算与该程序中的代码相关的地址范围,并以与所述代码相对应的形式存储所计算的地址范围。
3、如权利要求1所述的方法,还包括:
在程序执行过程中,记忆程序中的代码的执行履历。
4、如权利要求1到3之一所述的方法,还包括:
在确定程序跑飞的情况下,通知用户程序跑飞。
5、如权利要求4所述的方法,还包括:
向用户显示到程序跑飞的位置之前的执行履历。
6、一种检测程序跑飞的方法,包括步骤:
执行程序中包含的代码;
基于与所执行的代码的程序计数器地址,尝试从包括了至少部分代码的调试信息的文件中取得相应的调试信息;
在取得相应调试信息的情况下,确定程序跑飞。
7、如权利要求6所述的方法,还包括:
在程序执行过程中,记忆程序中的代码的执行履历。
8、如权利要求6到7之一所述的方法,还包括:
在确定程序跑飞的情况下,通知用户程序跑飞。
9、如权利要求8所述的方法,还包括:
向用户显示到程序跑飞的位置之前的执行履历。
10、一种检测程序跑飞的设备,包括:
执行程序中包含的代码的装置;
检测装置,判断与代码相关的程序计数器地址是否在事先计算的地址范围之内,以及在程序计数器地址在事先计算的地址范围之外的情况下,确定程序跑飞。
11、如权利要求10所述的设备,还包括:
地址计算装置,在程序执行之前计算与该程序中的代码相关的地址范围;以及
地址范围存储装置,以与所述代码相对应的形式存储所计算的地址范围。
12、如权利要求10所述的设备,还包括:
执行履历记忆装置,在程序执行过程中,记忆程序中的代码的执行履历。
13、如权利要求10到12之一所述的设备,还包括:
通知装置,在确定程序跑飞的情况下,通知用户程序跑飞。
14、如权利要求13所述的设备,其中所述通知装置向用户显示到程序跑飞的位置之前的执行履历。
15、一种检测程序跑飞的设备,包括:
执行程序中包含的代码的装置;
检测装置,基于与所执行的代码的程序计数器地址,尝试从包括了至少部分代码的调试信息的文件中取得相应的调试信息,以及在取得相应调试信息的情况下,确定程序跑飞。
16、如权利要求15所述的设备,还包括:
执行履历记忆装置,在程序执行过程中,记忆程序中的代码的执行履历。
17、如权利要求15到16之一所述的设备,还包括:
通知装置,在确定程序跑飞的情况下,通知用户程序跑飞。
18、如权利要求17所述的设备,其中所述通知装置向用户显示到程序跑飞的位置之前的执行履历。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200810110011XA CN101599042A (zh) | 2008-06-02 | 2008-06-02 | 程序跑飞检测方法及其设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200810110011XA CN101599042A (zh) | 2008-06-02 | 2008-06-02 | 程序跑飞检测方法及其设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101599042A true CN101599042A (zh) | 2009-12-09 |
Family
ID=41420493
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA200810110011XA Pending CN101599042A (zh) | 2008-06-02 | 2008-06-02 | 程序跑飞检测方法及其设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101599042A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567774A (zh) * | 2010-12-27 | 2012-07-11 | 北京中电华大电子设计有限责任公司 | 一种智能卡安全防护电路和方法 |
CN102735323A (zh) * | 2012-05-31 | 2012-10-17 | 福州科迪电子技术有限公司 | 防止电子秤使用过程中数据丢失的方法 |
WO2016119398A1 (zh) * | 2015-01-26 | 2016-08-04 | 中兴通讯股份有限公司 | 一种被测设备挂起跑飞故障的检测方法、装置及系统 |
CN107665113A (zh) * | 2017-09-07 | 2018-02-06 | 广东博立科技有限公司 | 防程序因指针跑飞而令程序系统崩溃的软件方法 |
CN108874570A (zh) * | 2017-05-10 | 2018-11-23 | 鸿秦(北京)科技有限公司 | 一种cpu程序跑飞的鉴别方法、装置及soc系统 |
CN108984383A (zh) * | 2017-05-31 | 2018-12-11 | 芜湖美的厨卫电器制造有限公司 | 程序跑飞的检测方法、装置及家用电器 |
CN110059454A (zh) * | 2019-03-29 | 2019-07-26 | 网御安全技术(深圳)有限公司 | Cpu程序的安全加固方法、装置 |
CN115964249A (zh) * | 2022-12-29 | 2023-04-14 | 苏州市欧冶半导体有限公司 | 一种嵌入式系统软件拦截程序设计系统及方法 |
-
2008
- 2008-06-02 CN CNA200810110011XA patent/CN101599042A/zh active Pending
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567774A (zh) * | 2010-12-27 | 2012-07-11 | 北京中电华大电子设计有限责任公司 | 一种智能卡安全防护电路和方法 |
CN102735323A (zh) * | 2012-05-31 | 2012-10-17 | 福州科迪电子技术有限公司 | 防止电子秤使用过程中数据丢失的方法 |
CN102735323B (zh) * | 2012-05-31 | 2014-06-04 | 福州科迪电子技术有限公司 | 防止电子秤使用过程中数据丢失的方法 |
WO2016119398A1 (zh) * | 2015-01-26 | 2016-08-04 | 中兴通讯股份有限公司 | 一种被测设备挂起跑飞故障的检测方法、装置及系统 |
CN105893236A (zh) * | 2015-01-26 | 2016-08-24 | 中兴通讯股份有限公司 | 一种被测设备挂起跑飞故障的检测方法、装置及系统 |
CN108874570A (zh) * | 2017-05-10 | 2018-11-23 | 鸿秦(北京)科技有限公司 | 一种cpu程序跑飞的鉴别方法、装置及soc系统 |
CN108874570B (zh) * | 2017-05-10 | 2022-02-18 | 鸿秦(北京)科技有限公司 | 一种cpu程序跑飞的鉴别方法、装置及soc系统 |
CN108984383A (zh) * | 2017-05-31 | 2018-12-11 | 芜湖美的厨卫电器制造有限公司 | 程序跑飞的检测方法、装置及家用电器 |
CN107665113A (zh) * | 2017-09-07 | 2018-02-06 | 广东博立科技有限公司 | 防程序因指针跑飞而令程序系统崩溃的软件方法 |
CN110059454A (zh) * | 2019-03-29 | 2019-07-26 | 网御安全技术(深圳)有限公司 | Cpu程序的安全加固方法、装置 |
CN110059454B (zh) * | 2019-03-29 | 2020-08-18 | 网御安全技术(深圳)有限公司 | Cpu程序的安全加固方法、装置 |
CN115964249A (zh) * | 2022-12-29 | 2023-04-14 | 苏州市欧冶半导体有限公司 | 一种嵌入式系统软件拦截程序设计系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101599042A (zh) | 程序跑飞检测方法及其设备 | |
CN107391379B (zh) | 接口自动测试方法及装置 | |
US8250543B2 (en) | Software tracing | |
US7882495B2 (en) | Bounded program failure analysis and correction | |
EP2587379B1 (en) | System test apparatus | |
US20080052677A1 (en) | System and method for mitigating repeated crashes of an application resulting from supplemental code | |
CN103034575B (zh) | 崩溃分析方法和装置 | |
CN102222015A (zh) | 检测多线程程序中的死锁的方法及系统 | |
CN112486629B (zh) | 微服务状态检测方法、装置、电子设备和存储介质 | |
US20130091492A1 (en) | Method to automate running relevant automatic tests to quickly assess code stability | |
US20140068350A1 (en) | Self-checking system and method using same | |
CN106030512A (zh) | 计算装置的初始化跟踪 | |
US9430356B2 (en) | Automatic repairs of scripts | |
US7765434B2 (en) | Resource efficient software tracing for problem diagnosis | |
US20100083043A1 (en) | Information processing device, recording medium that records an operation state monitoring program, and operation state monitoring method | |
CN103186461A (zh) | 一种现场数据的保存方法和恢复方法以及相关装置 | |
CN103488563A (zh) | 并行程序的数据竞争检测方法、装置及多核处理系统 | |
CN103049373A (zh) | 一种崩溃的定位方法和装置 | |
CN101526907A (zh) | 避免电子产品开机错误的闪存管理方法 | |
CN103559431A (zh) | 安卓系统用户权限的检测方法、装置和系统 | |
CN101334744B (zh) | 一种检测多处理器系统故障的方法、系统和装置 | |
CN115620799A (zh) | 基于固件仿真的故障现场回溯方法、设备及可读存储介质 | |
CN110727602B (zh) | 覆盖率数据的处理方法、装置及存储介质 | |
CN101349994B (zh) | 一种定位程序错误的方法、系统及装置 | |
CN104461880A (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 | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20091209 |