CN105786688B - 微控制器应用软件的调试方法 - Google Patents
微控制器应用软件的调试方法 Download PDFInfo
- Publication number
- CN105786688B CN105786688B CN201410813832.5A CN201410813832A CN105786688B CN 105786688 B CN105786688 B CN 105786688B CN 201410813832 A CN201410813832 A CN 201410813832A CN 105786688 B CN105786688 B CN 105786688B
- Authority
- CN
- China
- Prior art keywords
- state
- program
- application software
- adjustment method
- storehouse
- 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.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种微控制器应用软件的调试方法,包括如下步骤:将所述应用软件的程序根据业务功能划分为多个程序段,并设置状态记录单元;当所述应用软件的程序运行时,将每个程序段运行结束时的状态存入所述状态记录单元;当应用软件的程序运行出错时,将程序的状态恢复到所述状态记录单元中保存的其中一个状态。上述方法,通过保存应用软件运行过程中的状态,进行调试时可恢复到所保存的其中一个状态,不需要每次都从头开始执行整个程序,因此提高了调试效率。
Description
技术领域
本发明涉及微控制器技术领域,特别是涉及一种微控制器应用软件的调试方法。
背景技术
微控制器的应用软件,需要针对不同的应用需编写不同的程序,而在程序编写完成后软件工程师必须进行调试、查找程序漏洞(BUG)。传统的软件调试的方式有单步执行、全速执行、指定地址运行和断点调试等四种。
传统的调试方式在运行时出现BUG后仅能确定其存在于程序段中的某个大范围内,需要设置不同的执行方式逐步缩小范围并从头开始重新运行程序调试。这个过程中,反复地设置和重新运行的工作耗费了大量时间,降低了调试效率。
发明内容
基于此,有必要提供一种提高调试效率的微控制器应用软件的调试方法。
一种微控制器应用软件的调试方法,包括如下步骤:
将所述应用软件的程序根据业务功能划分为多个程序段,并设置状态记录单元;
当所述应用软件的程序运行时,将每个程序段运行结束时的状态存入所述状态记录单元;
当应用软件的程序运行出错时,将程序的状态恢复到所述状态记录单元中保存的其中一个状态。
在其中一个实施例中,所述状态记录单元为状态堆栈。
在其中一个实施例中,所述状态堆栈中的状态采用向量保存。
在其中一个实施例中,在所述应用软件开始运行时,将所述状态堆栈进行初始化,并设置所述状态堆栈的最大级数。
在其中一个实施例中,所述将每个程序段运行结束时的状态存入所述状态记录单元的步骤中,判断所述状态堆栈是否溢出,若是,则将所述状态堆栈底部的状态向量丢弃。
在其中一个实施例中,所述将程序的状态恢复到出错前的状态的步骤中,判断所述状态堆栈是否为空,若否,则将所述状态堆栈顶部的状态向量读出,根据该顶部的状态向量恢复程序,之后将所述状态堆栈顶部的状态向量丢弃。
在其中一个实施例中,所述将程序的状态恢复到所述状态记录单元中保存的其中一个状态之前,判断是否执行恢复操作,是则进行恢复。
在其中一个实施例中,还包括:从恢复的状态开始,运行至出现程序漏洞的程序段、定位程序漏洞。
在其中一个实施例中,所述运行出现程序漏洞的程序段,定位程序漏洞的步骤包括:
运行出现程序漏洞的程序段的一段子程序,并保存状态;
若无漏洞,则执行下一段子程序;若有漏洞,则执行恢复操作并以出现漏洞的子程序段缩小范围重复上述步骤。
在其中一个实施例中,所述运行出现程序漏洞的程序段,定位程序漏洞的步骤还采用逐步执行和设置断点执行的调试方式。
上述方法,通过保存应用软件运行过程中的状态,进行调试时可恢复到所保存的其中一个状态,不需要每次都从头开始执行整个程序,因此提高了调试效率。
附图说明
图1为一实施例的微控制器应用软件的调试方法流程图;
图2为调试过程在改进前后对比图。
具体实施方式
如图1所示,为一实施例的微控制器应用软件的调试方法流程图。该方法包括如下步骤。
步骤S101:将所述应用软件的程序根据业务功能划分为多个程序段,并设置状态记录单元。所述应用软件可以为微控制器仿真软件。根据业务功能划分为多个程序段时,可以是按照程序的功能模块进行划分。设置状态记录单元用于保存应用软件的状态。
步骤S102:当所述应用软件运行时,将每个程序段运行结束时的状态存入所述状态记录单元。在应用软件运行时,每个功能模块运行之后,应用软件都会处于某一个状态。该状态包括软件仿真的诸多关键量,可采用向量形式进行保存,称为状态向量。
本实施例中,所述状态记录单元为状态堆栈。状态堆栈是所述状态向量的集合,首先生成的状态向量保存在所述状态堆栈的底部,并且在随后的运行过程中逐个在所述状态堆栈顶部添加。
在所述应用软件开始运行时,将所述状态堆栈进行初始化,并设置所述状态堆栈的最大级数。将状态堆栈初始化是为了保证应用软件能够正常引用。状态堆栈的最大级数是指其最多能够保存多少个状态向量,可根据实际情况进行设置。优选地,以既能够保证使用、又不会占用过多空间为原则进行设置。
进一步地,在保存状态向量到所述状态堆栈之前,还判断所述状态堆栈是否溢出,若是,则将所述状态堆栈底部的状态向量丢弃。在设置了所述状态堆栈的最大级数之后,仍然会存在将状态堆栈填满的情况。此时可以将最开始的状态向量丢弃,以便能够保存最近的状态向量。当应用软件运行到一定程度之后,若中间均没有出错,则表明之前运行的程序段不存在程序漏洞,即使后面再出现运行错误,也不需要恢复到较早的状态,因此可以将最初的状态向量丢弃。
步骤S103:当应用软件运行出错时,将程序的状态恢复到所述状态记录单元中保存的其中一个状态。当应用软件运行出错时,也即是进入了存在漏洞的程序段,由于该程序段存在漏洞,因此无法执行成功,便不会产生运行该程序段的状态。此时状态记录单元中保存的状态均为正常状态,可恢复到其中一个状态。应用软件恢复到其中任一个状态均比从头开始执行效率更高。优选地,恢复到最近一个状态。
当采用状态堆栈保存状态向量时,采用所述状态堆栈顶部的状态向量执行恢复。进一步地,所述将程序的状态恢复到出错前的状态的步骤中,判断所述状态堆栈是否为空,若否,则将所述状态堆栈顶部的状态向量读出,根据该顶部的状态向量恢复程序,之后将所述状态堆栈顶部的状态向量丢弃。
若状态堆栈为空,就无法用状态堆栈中的状态向量进行恢复,这很可能是因为应用软件执行的第一个程序段即存在漏洞。此时可以执行重新程序,并集中在第一个程序段中查找漏洞。
进一步地,所述将程序的状态恢复到所述状态记录单元中保存的其中一个状态之前,判断是否执行恢复操作,是则进行恢复。这样可以给用户提供选择:是采用本实施例的方法进行调试,还是采用传统方法进行调试。
步骤S104:从恢复的状态开始,运行至出现程序漏洞的程序段、定位程序漏洞。当确定包含程序漏洞的程序段后,就可以集中在包含程序漏洞的程序段中查找该程序漏洞,将其最终定位。具体定位方法如下:
S141:运行出现程序漏洞的程序段的一段子程序,并保存状态。该段子程序可长可短。
S142:若无漏洞则执行下一段子程序,有漏洞时执行恢复操作并缩小范围重复上述步骤S141。直到定位程序漏洞。在此过程也可以采用传统的调试方法,例如逐步执行、设置断点等。
上述实施例的方法,通过保存应用软件运行过程中的状态,进行调试时可恢复到所保存的其中一个状态,不需要每次都从头开始执行整个程序,因此提高了调试效率。参考图2,传统方法每次进行调试时都要回到状态向量A之前,也即重新开始执行整个程序,而本实施例的方法在大概确定BUG出现的范围后,可以回到状态向量D之前,就不需要执行状态向量A、B、C所对应的程序段,大大提高了调试的效率。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (9)
1.一种微控制器应用软件的调试方法,包括如下步骤:
将所述应用软件的程序根据业务功能划分为多个程序段,并设置状态记录单元;所述状态记录单元为状态堆栈;
当所述应用软件的程序运行时,将每个程序段运行结束时的状态存入所述状态记录单元;
当应用软件的程序运行出错时,将程序的状态恢复到所述状态记录单元中保存的其中一个状态。
2.根据权利要求1所述的微控制器应用软件的调试方法,其特征在于,所述状态堆栈中的状态采用向量保存。
3.根据权利要求1所述的微控制器应用软件的调试方法,其特征在于,在所述应用软件开始运行时,将所述状态堆栈进行初始化,并设置所述状态堆栈的最大级数。
4.根据权利要求3所述的微控制器应用软件的调试方法,其特征在于,所述将每个程序段运行结束时的状态存入所述状态记录单元的步骤中,判断所述状态堆栈是否溢出,若是,则将所述状态堆栈底部的状态向量丢弃。
5.根据权利要求1所述的微控制器应用软件的调试方法,其特征在于,所述将程序的状态恢复到出错前的状态的步骤中,判断所述状态堆栈是否为空,若否,则将所述状态堆栈顶部的状态向量读出,根据该顶部的状态向量恢复程序,之后将所述状态堆栈顶部的状态向量丢弃。
6.根据权利要求1所述的微控制器应用软件的调试方法,其特征在于,所述将程序的状态恢复到所述状态记录单元中保存的其中一个状态之前,判断是否执行恢复操作,是则进行恢复。
7.根据权利要求1所述的微控制器应用软件的调试方法,其特征在于,还包括:从恢复的状态开始,运行至出现程序漏洞的程序段、定位程序漏洞。
8.根据权利要求7所述的微控制器应用软件的调试方法,其特征在于,所述运行出现程序漏洞的程序段,定位程序漏洞的步骤包括:
运行出现程序漏洞的程序段的一段子程序,并保存状态;
若无漏洞,则执行下一段子程序;若有漏洞,则执行恢复操作并以出现漏洞的子程序段缩小范围重复上述步骤。
9.根据权利要求8所述的微控制器应用软件的调试方法,其特征在于,所述运行出现程序漏洞的程序段,定位程序漏洞的步骤还采用逐步执行和设置断点执行的调试方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410813832.5A CN105786688B (zh) | 2014-12-23 | 2014-12-23 | 微控制器应用软件的调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410813832.5A CN105786688B (zh) | 2014-12-23 | 2014-12-23 | 微控制器应用软件的调试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105786688A CN105786688A (zh) | 2016-07-20 |
CN105786688B true CN105786688B (zh) | 2018-10-12 |
Family
ID=56377351
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410813832.5A Active CN105786688B (zh) | 2014-12-23 | 2014-12-23 | 微控制器应用软件的调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105786688B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107102940A (zh) * | 2017-03-16 | 2017-08-29 | 浙江大学 | 一种结合全量型检查点与增量型重做的目标程序逆向执行实现方法 |
CN111949984B (zh) * | 2020-08-24 | 2021-10-15 | 北京天融信网络安全技术有限公司 | 一种漏洞防御方法及电子装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046765A (zh) * | 2006-03-29 | 2007-10-03 | 华为技术有限公司 | 一种定位软件故障的方法 |
CN101211309A (zh) * | 2006-12-29 | 2008-07-02 | 中兴通讯股份有限公司 | 嵌入式系统中进程异常跟踪定位的方法 |
CN102467446A (zh) * | 2010-11-11 | 2012-05-23 | 上海华虹集成电路有限责任公司 | 可设置程序指针值的处理器芯片仿真器 |
CN103729288A (zh) * | 2013-11-01 | 2014-04-16 | 华中科技大学 | 一种嵌入式多核环境下应用程序的调试方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001331465A (ja) * | 2000-05-18 | 2001-11-30 | Hitachi Ltd | マルチプロセスの表示方法及び装置並びに表示プログラムを格納した記録媒体 |
JP2005174045A (ja) * | 2003-12-12 | 2005-06-30 | Sharp Corp | ソースプログラム変換装置、ソースプログラム変換方法、ソースプログラム変換プログラム、および、プログラム記録媒体 |
-
2014
- 2014-12-23 CN CN201410813832.5A patent/CN105786688B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046765A (zh) * | 2006-03-29 | 2007-10-03 | 华为技术有限公司 | 一种定位软件故障的方法 |
CN101211309A (zh) * | 2006-12-29 | 2008-07-02 | 中兴通讯股份有限公司 | 嵌入式系统中进程异常跟踪定位的方法 |
CN102467446A (zh) * | 2010-11-11 | 2012-05-23 | 上海华虹集成电路有限责任公司 | 可设置程序指针值的处理器芯片仿真器 |
CN103729288A (zh) * | 2013-11-01 | 2014-04-16 | 华中科技大学 | 一种嵌入式多核环境下应用程序的调试方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105786688A (zh) | 2016-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Mossberg et al. | Manticore: A user-friendly symbolic execution framework for binaries and smart contracts | |
US8239404B2 (en) | Identifying entries and exits of strongly connected components | |
CN109144515B (zh) | Dcs图形化算法组态的离线仿真方法和装置 | |
US20090037885A1 (en) | Emulating execution of divergent program execution paths | |
US20120159091A1 (en) | Directed graphs pertaining to read/write operations | |
Jacob | Implementation of randomized test pattern generation strategy | |
US7404107B2 (en) | Fault injection selection | |
CN105786688B (zh) | 微控制器应用软件的调试方法 | |
US8875074B1 (en) | Formal fault detection | |
Chawdhary et al. | Ranking abstractions | |
US20140019939A1 (en) | Iterative Generation of Symbolic Test Drivers for Object-Oriented Languages | |
CN104536870A (zh) | 一种进程监控方法和装置 | |
KR20150130298A (ko) | 컨트랙트에 대한 운영 체제 지원 기법 | |
US7596780B2 (en) | System and method for virtual catching of an exception | |
US20110029953A1 (en) | System and Method for Scalable Handling of Debug Information | |
JP7056139B2 (ja) | ソフトウェアプログラム修復のためのメソッド呼び出し合成 | |
KR102110735B1 (ko) | 취약점 탐색을 위한 바이너리 재생성 방법 및 시스템 | |
Albert et al. | Actor-and task-selection strategies for pruning redundant state-exploration in testing | |
Yu et al. | Simlatte: A framework to support testing for worst-case interrupt latencies in embedded software | |
US20060126799A1 (en) | Fault injection | |
CN107291617B (zh) | 一种基于隐式污点传播的漏洞分析方法 | |
CN102799434B (zh) | 一种利用软件保护装置实现自动代码移植的方法 | |
Han et al. | A heuristic model-based test prioritization method for regression testing | |
Park et al. | Property-based code slicing for efficient verification of osek/vdx operating systems | |
US8060783B2 (en) | Distributed runtime diagnostics in hierarchical parallel environments |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210428 Address after: No.180-6, Linghu Avenue, Taihu International Science and Technology Park, Xinwu District, Wuxi City, Jiangsu Province, 214135 Patentee after: China Resources micro integrated circuit (Wuxi) Co., Ltd Address before: 518040 Guangdong city in Shenzhen Province, Futian District Shennan Road, Che Kung Temple Tian An Digital City Tienhsiang building 8A Patentee before: CHINA RESOURCES SEMICONDUCTOR (SHENZHEN) Co.,Ltd. |