CN108549602B - 一种软件调试方法 - Google Patents
一种软件调试方法 Download PDFInfo
- Publication number
- CN108549602B CN108549602B CN201810288880.5A CN201810288880A CN108549602B CN 108549602 B CN108549602 B CN 108549602B CN 201810288880 A CN201810288880 A CN 201810288880A CN 108549602 B CN108549602 B CN 108549602B
- Authority
- CN
- China
- Prior art keywords
- software
- abnormal
- zone bit
- debugging
- abnormal zone
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及软件测试技术领域,提供了一种软件调试方法。所述方法包括:在软件运行后,设置异常标志位并存储所述异常标志位;在软件重新运行后,判断所述异常标志位是否有效;若所述异常标志位有效,接入调试器将所述异常标志位清零,调试所述软件。本发明实施例不会破坏软硬件环境,对于需要有一定强度的调试才能复现的BUG有较好的调试效果。
Description
技术领域
本发明涉及软件测试技术领域,特别是涉及一种软件调试方法。
背景技术
软件产品例如固态硬盘固件(Solid State Drives FirmWare,SSD FW)测试过程中,容易出现FW跑飞或者人为断延(Assert)程序的情况,此时如果重新上电重跑FW,有可能FW会继续跑飞甚至破坏Nand闪存(Nand Flash)中的数据而影响测试。
现有技术中FW测试方法为:先下载FW代码,并在FW代码中设置若干个断点。测试时,根据断点分段运行FW代码,若该段运行结果能够实现预期功能,则认为该段代码不存在BUG,若该段代码运行结果不能实现预期的功能,则证明该段代码存在BUG,需要进行修正。接着对存在BUG的代码段进行单步运行,从而进一步确认出现BUG的异常代码位置。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:对于已经烧录有FW的硬件(例如SSD),当出现BUG时,现有的测试方法需要将FW代码重新下载至随机存取存储器(random access memory,RAM)区运行,而不能直接使用SSD内的代码进行测试。这样可能会破坏现场,无法检测出具体出现BUG的代码位置。因此,现有的测试方法的缺点是:需要重新下载代码以及可能会破坏软硬件环境。
发明内容
本发明实施例要解决的技术问题是现有技术的软件测试方法需要重新下载代码以及可能会破坏软硬件环境的问题。
本发明实施例采用如下技术方案:
本发明实施例提供了一种软件调试方法,包括:
在软件运行后,设置异常标志位并存储所述异常标志位;
在软件重新运行后,判断所述异常标志位是否有效;
若所述异常标志位有效,接入调试器将所述异常标志位清零,调试所述软件。
进一步地,所述在软件运行后,设置异常标志位并存储所述异常标志位包括:识别到软件运行异常时,设置异常标志位,将所述异常标志位写入非易失性存储介质。
进一步地,所述在软件重新运行后,判断所述异常标志位是否有效包括:
在软件运行异常后重新上电,软件重新运行;
在软件运行至软件安全区后,读取所述异常标志位;
判断所述异常标志位是否有效。
进一步地,所述若所述异常标志位有效,接入调试器将所述异常标志位清零,调试所述软件包括:
若异常标志位有效,将软件保持于当前位置;
接入调试器运行软件,当软件运行至所述当前位置时,解除对所述软件在当前位置的保持;
在软件继续运行后,将所述异常标志位清零,进入正常调试模式。
进一步地,所述软件安全区为位于调试代码区前且靠近所述调试代码区的没有异常的代码区域。
进一步地,所述调试代码区为出现软件异常的区域。
进一步地,所述将软件保持于当前位置具体包括:使用循环语句将软件卡住于当前位置。
进一步地,所述循环为while循环,设置一全局变量及其值,所述while循环的条件中包括所述全局变量,当所述全局变量的值不变时所述while循环的条件为真。
进一步地,所述解除对所述软件在当前位置的保持具体包括:改变所述全局变量的值,使所述while循环的条件为假。
进一步地,所述调试器为JTAG调试器。
本发明实施例的有益效果在于:本发明实施例通过设置异常标志位并存储,软件重新运行后,根据该异常标志位是否有效来确认软件是否需要调试,若有效则接入调试器将所述异常标志位清零后继续调试所述软件,无需重新下载待测软件的代码,不会破坏软硬件环境,对于需要有一定强度(例如需要执行较长时间)的调试才能复现的BUG有较好的调试效果,适用于需要不断掉电、上电重复跑的程序调试。
附图说明
图1是本发明实施例提供的软件调试方法的基本流程图;
图2是本发明实施例提供的软件调试方法的调试示意图;
图3是本发明另一实施例提供的软件调试方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例的软件调试方法基于联合测试工作组(Joint Test Action Group,JTAG),可用于各种不同软件的调试,例如系统软件(包括操作系统和支撑软件等)、应用软件、固件等。下面以固态硬盘固件(SSD FW)为例对本发明实施例进行详细说明。
如图1所示,同时请参考图2,本发明实施例的软件调试方法包括如下步骤:
步骤110:在软件运行后,设置异常标志位并存储所述异常标志位。
在一些实施例中,识别到软件运行异常时,设置异常标志位,将所述异常标志位写入非易失性存储介质(non-volatile memory,NVM)。
具体地,可以是在待测软件代码中添加监测该软件自身运行的监测程序,通过该监测程序识别什么时候出现软件异常。当监测程序识别到有异常发生时,设置异常标志位,并在软件发生异常的位置写入断言(Assert)语句,后续软件继续运行时,执行Assert语句会使软件跑飞。比如该待测软件代码正常运行的情况下,结果应该等于100,但在某个时刻其执行结果等于50了,此时监测程序判断结果为50而不是100,就会报错,也即识别到软件异常,则设置异常标志位,并在该位置写入Assert语句。
所述非易失性存储介质可以是串行外设接口闪存(Serial PeripheralInterface Flash,SPI Flash)。还可以是其他只读内存(Read-only memory,ROM)或者其他闪存(Flash memory)。将异常标志位存储在非易失性存储介质中,软件跑飞再次上电后,该异常标志位不会因为存储器掉电而消失,满足掉电再重新上电后的测试需求。该非易失性存储介质可以是待测软件所位于的硬件上的存储介质,例如本实施例用于调试SSD FW,则该非易失性存储介质位于SSD中。
步骤120:在软件重新运行后,判断所述异常标志位是否有效。
在一些实施例中,在软件运行异常后重新上电,软件重新运行;在软件运行至软件安全区后,读取所述异常标志位,并判断所述异常标志位是否有效。其中,所述软件安全区为位于调试代码区前且靠近所述调试代码区的没有异常的代码区域。所述调试代码区为出现软件异常的区域,通俗地说,就是有BUG,需要调试的区域。在软件异常之前的区域,即为软件安全区。
该软件安全区经过用户反复验证,确认在该区域不会有异常的代码。可以理解的是,软件安全区也需要相对地靠近调试代码区,或者尽可能地靠近调试代码区。这样,当软件跑飞再次上电后,重新调试时能快速地从靠近调试代码区的位置开始正式地调试。具体原因后续展开陈述。
在一些实施例中,当异常标志位存在时,其为有效;当异常标志位不存在时(例如被清除),其为无效。在另一些实施例中,还可以是当异常标志位的值为1时,其为有效;当异常标志位的值为0时,其为无效。或者,还可以是其他判断异常标志位是否有效的方式,此处不一一列举。
步骤130:若所述异常标志位有效,接入调试器将所述异常标志位清零,调试所述软件。
步骤110中设置了异常标志位,当异常标志位没被清除时,该异常标志位是持续保持在有效状态的。步骤110之后,因设置了Assert程序,软件继续运行后会跑飞。软件重新上电后运行,因异常标志位没被清除过,此时检测异常标志位,其是有效的。
通过对异常标志位是否有效的判断,软件已经确定了待测代码区就在该软件安全区的后面,相当于定位到了待测代码区。此时可以准备下一步的正式调试。
在一些实施例中,若异常标志位有效,将软件保持于当前位置;接入调试器运行软件,当软件运行至所述当前位置时,解除对所述软件在当前位置的保持;在软件继续运行后,将所述异常标志位清零,进入正常调试模式。
可以通过多种方式,将软件保持于当前位置。例如使用循环语句将软件卡住于当前位置。所述循环可以采用while循环,设置一全局变量及其值,所述while循环的条件中包括所述全局变量,当所述全局变量的值不变时所述while循环的条件为真。相应地,可通过如下方式解除对所述软件在当前位置的保持:改变所述全局变量的值,使所述while循环的条件为假。例如,在待测软件中定义一个全局变量Flag并设置Flag=1,接着通过while(Flag)卡住程序。可以在软件安全区定义和设置全局变量,并设置while循环以卡住程序在待测代码区前。
此外,还可以将Flag定义为某个具体的值,while循环的条件中包括Flag,且条件设计为当Flag的值不变时,while循环的条件为真,Flag
的值改变时,条件为假。例如,设Flag=0x55aa55aa,然后通过while(0x55aa55aa==Flag)卡住程序在当前位置。
本实施例中,所述调试器为JTAG调试器,例如Jlink。将Jlink接入软件,跑到软件卡住的地方,然后找到全局变量Flag的位置,将Flag的值清0,跳出while循环,继续往下执行代码,对待测代码区进行正式的软件调试,修复BUG,完成对待测代码区的调试。
步骤130若判断所述异常标志位无效,则结束本方法,无需再进行调试。
具体地,在上述跳出while循环,继续往下执行代码后,代码中加入了对异常标志位清零的程序,非易失性存储介质中的异常标志位清零后,异常标志位无效,下次再进行该位置异常标志位是否有效的判断时,判断异常标志位无效,所以无需再对后续的代码进行调试了。因为在前一次异常标志位清零的操作后,已经修复了BUG,完成了对待测代码区的调试,该待测代码区已不需要再调试。
步骤110和步骤120无需接入调试器,步骤130需接入调试器运行。
如图3所示,是本发明另一实施例提供的软件调试方法的流程图,以固态硬盘固件(SSD FW)的调试为例对本发明实施例进行详细说明。
该方法包括如下步骤:
步骤210:软件运行至调试处,将异常标志位写入SPI。
所述调试处是指软件出现异常的位置,位于调试代码区,SPI位于SSD中。除了设置异常标志位,还需要写入Assert语句。
步骤220:软件跑飞。
设置异常标志位并存储后,软件继续运行,因设置了Assert程序,因此软件会跑飞。
步骤230:软件重新上电。
软件跑飞后重新上电,并运行。
步骤240:软件在运行到调试处前,读取异常标志位。
软件运行到调试代码区前的软件安全区时,读取异常标志位。
步骤250:判断异常标志位是否有效,若有效,执行步骤260,否则,结束本方法。
异常标志位继续存在时,其是有效的。也即当调试区未被正式调试前,异常标志位是有效的。
步骤260:定义全局变量Flag并设置Flag=1,用while(Flag)卡住程序。
While循环语句的表达一般为:
while(条件)
{
语句;
}
当while循环开始后,先判断条件是否满足(为真),如果满足就执行循环体内的语句,执行完毕后再回来判断条件是否满足,如此无限重复;直到条件不满足(为假)时,执行while循环后边的语句。
因此当Flag值为1时,while循环一直执行,不会跳到后面执行while循环后面的语句。
步骤270:接入JTAG调试器,并将Flag的值清零。
Flag的值清零后,则跳出了while循环,转而执行循环后面的语句,也即需要调试的代码部分。
步骤280:进入正常调试模式。
进入正常调试模式后,正常执行代码,此时会将异常标志位清零。
后续再执行上述步骤250时,异常标志位被判断为无效,结束方法,无需再对后续的代码进行调试了。因为在前一次执行步骤280时,已经完成了代码调试和BUG修复,该待测代码区已不需要再调试。
本发明实施例通过设置异常标志位并存储,软件重新运行后,根据该异常标志位是否有效来确认软件是否需要调试,若有效则接入调试器将所述异常标志位清零后继续调试所述软件,无需重新下载待测软件的代码,不会破坏软硬件环境,对于需要有一定强度(例如需要执行较长时间)的调试才能复现的BUG有较好的调试效果,适用于需要不断掉电、上电重复跑的程序调试。
该调试方法简单易操作,调试效果直观明了。例如对那些需要执行很长时间(例如几天)才会跑出问题的软件,因该方法可以存储异常标志,因此重新上电后很容易定位到问题代码区,检测到问题代码区后直接进行调试即可。因此,本实施例的方法特别适用于需要不断掉电、上电重复跑的程序调试。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程,其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (6)
1.一种软件调试方法,其特征在于,包括:
识别到软件运行异常时,设置异常标志位,将所述异常标志位写入非易失性存储介质包括:
在所述软件的代码中添加监测程序,以监测所述软件自身运行;
当监测程序识别到有异常发生时,设置异常标志位,并在所述异常的位置写入断言语句;
在软件重新运行后,判断所述异常标志位是否有效;
所述在软件重新运行后,判断所述异常标志位是否有效包括:
在软件运行异常后重新上电,软件重新运行;
在软件运行至软件安全区后,读取所述异常标志位;
判断所述异常标志位是否有效;
若所述异常标志位有效,接入JTAG调试器将所述异常标志位清零,调试所述软件,其中,通过所述异常标志位来定位待测代码区;
其中,所述若所述异常标志位有效,接入调试器将所述异常标志位清零,调试所述软件包括:
若异常标志位有效,将软件保持于当前位置;
接入调试器运行软件,当软件运行至所述当前位置时,解除对所述软件在当前位置的保持;
在软件继续运行后,将所述异常标志位清零,进入正常调试模式。
2.如权利要求1所述的方法,其特征在于,所述软件安全区为位于调试代码区前且靠近所述调试代码区的没有异常的代码区域。
3.如权利要求2所述的方法,其特征在于,所述调试代码区为出现软件异常的区域。
4.如权利要求1所述的方法,其特征在于,所述将软件保持于当前位置具体包括:使用循环语句将软件卡住于当前位置。
5.如权利要求4所述的方法,其特征在于,所述循环为while循环,设置一全局变量及其值,所述while循环的条件中包括所述全局变量,当所述全局变量的值不变时所述while循环的条件为真。
6.如权利要求5所述的方法,其特征在于,所述解除对所述软件在当前位置的保持具体包括:改变所述全局变量的值,使所述while循环的条件为假。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810288880.5A CN108549602B (zh) | 2018-03-30 | 2018-03-30 | 一种软件调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810288880.5A CN108549602B (zh) | 2018-03-30 | 2018-03-30 | 一种软件调试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108549602A CN108549602A (zh) | 2018-09-18 |
CN108549602B true CN108549602B (zh) | 2022-03-08 |
Family
ID=63513897
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810288880.5A Active CN108549602B (zh) | 2018-03-30 | 2018-03-30 | 一种软件调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108549602B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109933996A (zh) * | 2019-02-12 | 2019-06-25 | 山东中医药高等专科学校 | 一种计算机软件加密保护装置及方法 |
CN113808655B (zh) * | 2021-09-23 | 2023-10-03 | 长江存储科技有限责任公司 | 用于进行掉电测试的方法、装置和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1704908A (zh) * | 2004-05-26 | 2005-12-07 | 华为技术有限公司 | 定位程序异常的方法 |
CN101046765A (zh) * | 2006-03-29 | 2007-10-03 | 华为技术有限公司 | 一种定位软件故障的方法 |
CN101122880A (zh) * | 2007-09-17 | 2008-02-13 | 福建星网锐捷网络有限公司 | 内嵌调试器的嵌入式系统及嵌入式系统调试方法 |
CN105959128A (zh) * | 2015-08-11 | 2016-09-21 | 杭州迪普科技有限公司 | 故障处理方法、装置以及网络设备 |
CN106970878A (zh) * | 2017-03-27 | 2017-07-21 | 北京深思数盾科技股份有限公司 | 一种调试事件监测方法以及调试事件监测系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040040013A1 (en) * | 2002-08-26 | 2004-02-26 | Mohit Kalra | Time-based breakpoints in debuggers |
FR2921172B1 (fr) * | 2007-09-14 | 2015-09-04 | Airbus France | Procede de debogage d'un logiciel de fonctionnement d'un systeme embarque a bord d'un aeronef et dispositif de mise en oeuvre |
US20160196131A1 (en) * | 2014-07-07 | 2016-07-07 | Symphony Teleca Corporation | Remote Embedded Device Update Platform Apparatuses, Methods and Systems |
CN106557418B (zh) * | 2015-09-30 | 2019-07-02 | 中国航发商用航空发动机有限责任公司 | 用于软件测试的方法和装置 |
CN105959802A (zh) * | 2016-05-27 | 2016-09-21 | 深圳Tcl数字技术有限公司 | 智能电视故障信息收集方法及装置 |
CN106933742A (zh) * | 2017-03-17 | 2017-07-07 | 数据通信科学技术研究所 | 一种程序错误定位方法 |
CN107656872B (zh) * | 2017-10-09 | 2020-09-29 | 平安普惠企业管理有限公司 | 软件测试方法、装置、设备和计算机存储介质 |
-
2018
- 2018-03-30 CN CN201810288880.5A patent/CN108549602B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1704908A (zh) * | 2004-05-26 | 2005-12-07 | 华为技术有限公司 | 定位程序异常的方法 |
CN101046765A (zh) * | 2006-03-29 | 2007-10-03 | 华为技术有限公司 | 一种定位软件故障的方法 |
CN101122880A (zh) * | 2007-09-17 | 2008-02-13 | 福建星网锐捷网络有限公司 | 内嵌调试器的嵌入式系统及嵌入式系统调试方法 |
CN105959128A (zh) * | 2015-08-11 | 2016-09-21 | 杭州迪普科技有限公司 | 故障处理方法、装置以及网络设备 |
CN106970878A (zh) * | 2017-03-27 | 2017-07-21 | 北京深思数盾科技股份有限公司 | 一种调试事件监测方法以及调试事件监测系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108549602A (zh) | 2018-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108549602B (zh) | 一种软件调试方法 | |
CN104657247B (zh) | 基于jtag调试方式实现通用型故障注入系统和故障注入方法 | |
US8271958B2 (en) | Remapping debuggable code | |
US8898645B2 (en) | Handling breakpoints in an asynchronous debug model | |
US9817974B1 (en) | Anti-malware program with stalling code detection | |
US20090125889A1 (en) | System and program product for executing program to thereby test the program | |
JP3961478B2 (ja) | プログラマブルコントローラ用ユニット及びメモリ自動復旧方法 | |
CN105589765A (zh) | 一种实现程序备份的方法 | |
KR20080017089A (ko) | 플래시 프로그램 메모리를 구비한 마이크로컨트롤러에서프로그램 브레이크 포인트를 제공하는 메커니즘 | |
WO2015184732A1 (zh) | 引导程序的存储方法、故障恢复方法及设备、计算机存储介质 | |
CN111273928B (zh) | 一种自升级的bootloader设计方法 | |
US7574585B1 (en) | Implementing software breakpoints and debugger therefor | |
JP4484074B2 (ja) | プログラマブルコントローラ用ユニット及びメモリ自動復旧方法 | |
CN104239781A (zh) | 避免进程被注入的方法和装置 | |
CN110222501B (zh) | 一种运行时代码的检查方法、存储介质 | |
US20060126799A1 (en) | Fault injection | |
TWI715201B (zh) | 開機錯誤資訊記錄方法 | |
CN110826114B (zh) | 基于ssd安全擦除后的用户数据测试方法和装置 | |
CN115599645A (zh) | 一种linux驱动模块稳定性测试方法及装置 | |
CN110727577B (zh) | 嵌入式系统软件中概率复现问题的调试方法、系统及介质 | |
US11733879B2 (en) | Data processing system and method for reading instruction data of instruction from memory including a comparison stage for preventing execution of wrong instruction data | |
JP2008210059A (ja) | 情報処理装置、デバッグ支援方法及びプログラム | |
JP2010079686A (ja) | データ処理装置、メモリ制御回路およびメモリ制御方法 | |
CN118796235A (zh) | 程序升级方法、装置、设备及计算机可读存储介质 | |
JP2011150383A (ja) | ファームウェア書き込み方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 518000 A, B, C, D, E, F1, 8 Building, Financial Services Technology Innovation Base, No. 8 Kefa Road, Nanshan District, Shenzhen City, Guangdong Province Applicant after: Shenzhen jiangbolong electronic Limited by Share Ltd Address before: 518000 A, B, C, D, E, F1, 8 Building, Financial Services Technology Innovation Base, No. 8 Kefa Road, Nanshan District, Shenzhen City, Guangdong Province Applicant before: Shenzhen jiangbolong Electronic Co., Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |