CN117370214B - 一种控制器的程序调试方法、装置和存储介质 - Google Patents
一种控制器的程序调试方法、装置和存储介质 Download PDFInfo
- Publication number
- CN117370214B CN117370214B CN202311635834.5A CN202311635834A CN117370214B CN 117370214 B CN117370214 B CN 117370214B CN 202311635834 A CN202311635834 A CN 202311635834A CN 117370214 B CN117370214 B CN 117370214B
- Authority
- CN
- China
- Prior art keywords
- debugging
- program
- debugger
- controller
- debug
- 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
- 238000000034 method Methods 0.000 title claims abstract description 49
- 230000001680 brushing effect Effects 0.000 claims abstract description 9
- 230000006870 function Effects 0.000 claims description 34
- 238000004891 communication Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 3
- 230000006978 adaptation Effects 0.000 abstract description 4
- 238000012360 testing method Methods 0.000 description 31
- 230000008569 process Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 7
- 238000012986 modification Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 7
- 230000002159 abnormal effect Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 4
- 230000006872 improvement Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000013102 re-test Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种控制器的程序调试方法、装置和存储介质,在控制器的主控板上设置有与调试器连接的调试接口,调试器通过调试接口连接主控板,能够读取程序调试输出的日志文件和/或调试信息并存储;方法包括:预先根据调试需求将调试宏定义和预编译指令插入调试程序中,并将调试日志输出指令插入需要进行调试的位置的预编译模块内和/或将预设的调试函数插入调试程序中,对调试程序进行编译并刷写至控制器中;在控制器与调试器连接后,查询调试程序中是否存在调试宏定义;若查询到存在调试宏定义,则启动控制器运行调试程序;通过调试器存储运行调试程序产生的日志文件和/或调试信息。本发明方案能够降低不同芯片需要不同适配调试器的成本。
Description
技术领域
本发明涉及程序调试技术领域,尤其涉及一种控制器的程序调试方法、装置和存储介质。
背景技术
在软件开发过程中,经常需要调试程序主程序以了解程序运转的鲁棒性,进而排除程序运行中的各种错误。但是控制器的程序往往需要写入到单片机内部来进行测试,而单片机的调试器价格高昂且适配范围狭窄,因此就造成程序在调试过程存在着许多困难。每更换一块不同场景的芯片,都需要适配不同的调试软件,需要开发人员重新熟悉,调试步骤繁琐,调试效率低下。
发明内容
本发明的主要目的在于克服上述相关技术的缺陷,提供一种控制器的程序调试方法、装置和存储介质,以解决相关技术中各调试器的适配软件存在着差异不通用的问题。
本发明一方面提供了一种控制器的程序调试方法,在所述控制器的主控板上设置有与所述调试器连接的调试接口,所述调试器通过所述调试接口连接所述主控板,能够读取进行所述程序调试输出的日志文件和/或调试信息并存储;所述程序调试方法,包括:预先根据调试需求将调试宏定义和预编译指令插入调试程序中,并将调试日志输出指令插入需要进行调试的位置的预编译模块内和/或将预设的调试函数插入调试程序中,对所述调试程序进行编译并刷写至所述控制器中;在所述控制器与所述调试器连接后,启动所述控制器运行所述调试程序;通过所述调试器存储运行所述调试程序产生的日志文件和/或调试信息,以通过分析所述日志文件和/或调试信息,进行所述调试程序的修改和重新调试。
可选地,还包括:在所述控制器与所述调试器连接后,查询所述调试程序中是否存在所述调试宏定义;若查询到所述程序中存在所述调试宏定义,则启动所述控制器运行所述调试程序。
可选地,还包括:若查询到所述调试程序中存在宏定义,则在启动所述控制器运行所述调试程序之前,先启动日志记录程序;和/或,若查询到所述调试程序中不存在宏定义,则直接运行所述控制器的程序,以便观测程序是否存在运转问题。
可选地,分析所述日志文件,包括:按照调试时间对所述日志文件进行分割,以得到每次的调试日志;对每次进行分割时的停滞位置进行判断,若每次的程序停滞位置相同,则确定程序的错误存在于程序停滞位置或所述停滞位置附近的代码中;若每次的程序停滞位置存在跳变,则根据跳变的位置进行分析,确定程序中存在的错误,以对所述存在的错误进行修改后,再次进行调试。
可选地,所述调试器的内部设置有用于记录程序输出的日志文件的存储介质;所述调试器通过所述调试接口与所述主控板的直接存储器访问模块连接,通过所述直接存储器访问模块将所述日志文件传输至所述调试器的所述存储介质中;和/或,所述调试器通过所述调试接口与所述主控板通过SCI、SPI和I2C中的至少一种通信方式连接,以将所述日志文件传输至所述调试器的所述存储介质中。
本发明另一方面提供了一种控制器的程序调试装置,在所述控制器的主控板上设置有与调试器连接的调试接口,所述调试器通过所述调试接口连接所述主控板,能够读取进行所述程序调试输出的日志文件和/或调试信息并存储;预先根据调试需求将调试宏定义和预编译指令插入调试程序中,并将调试日志输出指令插入需要进行调试的位置的预编译模块内和/或将预设的调试函数插入调试程序中,对所述调试程序进行编译并刷写至所述控制器中;所述程序调试装置,包括:启动单元,用于在所述控制器与所述调试器连接后,启动所述控制器运行所述调试程序;存储单元,用于通过所述调试器存储运行所述调试程序产生的日志文件和/或调试信息,以通过分析所述日志文件和/或调试信息,进行所述调试程序的修改和重新调试。
可选地,还包括:查询单元,用于在所述控制器与所述调试器连接后,查询所述调试程序中是否存在所述调试宏定义;所述启动单元,进一步用于:若所述查询单元查询到所述程序中存在所述调试宏定义,则启动所述控制器运行所述调试程序。
可选地,所述启动单元,还用于:若所述查询单元查询到所述调试程序中存在宏定义,则在启动所述控制器运行所述调试程序之前,先启动日志记录程序;和/或,所述启动单元,还用于:若所述查询单元查询到所述调试程序中不存在宏定义,则直接运行所述控制器的程序,以便观测程序是否存在运转问题。
可选地,分析所述日志文件,包括:按照调试时间对所述日志文件进行分割,以得到每次的调试日志;对每次进行分割时的停滞位置进行判断,若每次的程序停滞位置相同,则确定程序的错误存在于程序停滞位置或所述停滞位置附近的代码中;若每次的程序停滞位置存在跳变,则根据跳变的位置进行分析,确定程序中存在的错误,以对所述存在的错误进行修改后,再次进行调试。
可选地,所述调试器的内部设置有用于记录程序输出的日志文件的存储介质;所述调试器通过所述调试接口与所述主控板的直接存储器访问模块连接,通过所述直接存储器访问模块将所述日志文件传输至所述调试器的所述存储介质中;和/或,所述调试器通过所述调试接口与所述主控板通过SCI、SPI和I2C中的至少一种通信方式连接,以将所述日志文件传输至所述调试器的所述存储介质中。
本发明又一方面提供了一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现前述任一所述方法的步骤。
根据本发明的技术方案,采用软件和硬件相结合的调试方法,将调试日志通过调试宏定义内置到程序内部,将运行时的调试日志逐步输出到调试器并记录。通用性强,适用于任何一款芯片,不需要采用价格高昂的调试器设备既能定位到程序中的错误位置,提高调试工作的效率。调试器适配于任何具有串行接口的芯片,可重复利用,设备成本低。采用的设备为即插即用行和离线记录时,调试人员仅需更新程序即可,不用重复学习软件,且能释放调试人员的时间,能大幅度的提高工作效率。
根据本发明技术方案,能够降低调试过程中不同芯片需要不同适配调试器的价格成本;减少各种调试器软件的学习过程,实现一种调试方法通用,提高调试的工作效率;通过程序和硬件模拟复现程序调试器功能,提高程序调试简便性和方式多样性。采用条件编译和宏定义结合完成程序中易出错位置日志输出程序的编写,便于后续确定程序的BUG(缺陷)所在。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明提供的控制器的程序调试方法的一实施例的方法示意图;
图2示出了调试器整体结构示意图;
图3示出了根据本发明一具体实施例的调试器运转流程图;
图4示出了根据本发明一具体实施例的调试程序流程图;
图5示出了根据本发明一具体实施例的程序调试过程中日志分析流程图;
图6是本发明提供的控制器的程序调试装置的一实施例的结构框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明具体实施例及相应的附图对本发明技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
当主控程序在芯片内运行卡死,不易分析问题程序错误所在位置;各种芯片调试器价格昂贵,且适用范围限制大;各调试器的适配软件存在着差异,换一款主控芯片需要重新熟悉调试软件,调试步骤繁琐,调试效率低下;调试器调试存在若调试器不是在芯片运转介入,程序卡死后不能介入等问题。
本发明提供一种控制器的程序调试方法。
在所述控制器的主控板上设置有与调试器连接的调试接口,所述调试器通过所述调试接口连接所述主控板,能够读取进行所述程序调试输出的调试日志文件和/或调试信息。
图2示出了调试器整体结构示意图。如图2所示,控制器的主控板上设置有与调试器连接的调试接口。具体地,调试器的调试接口内置在所述主控板的电子元器件布局板(PCB板)上,所述调试接口具体可以为针座;所述调试器通过所述调试接口连接所述主控板,能够读取进行所述程序调试输出的调试日志文件和/或调试信息。优选地,在所述调试器的内部设置有存储介质,所述存储介质可以用于记录进行所述程序调试输出的日志文件,所述存储介质,例如为内存卡。所述调试器可以跟调试设备(例如电脑)连接,将所述存储介质中存储的日志文件传输到所述调试设备中,例如,可以通过USB连接线直接将内存卡中存储的日志文件直接传输到调试电脑中。
调试器与主控板之间通过调试接口连接,调试接口例如为针座接口,针座在PCB板上不可以移动,针座接口通过卡座和排线与调试器(日志记录器)直接相连,可以在调试完成后进行拆除,用于其他的待调试的控制器或调试程序。
在一种具体实施方式中,所述调试器通过所述调试接口与所述主控板的直接存储器访问模块(DMA)连接,通过所述直接存储器访问模块将所述日志文件传输至所述调试器的所述存储介质中。例如,如图2所示, PCB板上的针座与主控芯片的DMA(直接存储器访问模块)相关引脚连接到一块,DMA控制器向所述控制器的CPU发出数据传输请求,CPU放弃数据总线的控制权限, DMA获取接管数据总线的权限,将数据整合并打包成日志文件完成输出,完成日志文件的传输工作后,将总线的控制权交还给CPU。
在另一种具体实施方式中,所述调试器通过所述调试接口与所述主控板通过SCI、SPI和I2C中的至少一种通信方式连接,以将所述日志文件传输至所述调试器的所述存储介质中。即,可以通过SCI、SPI和I2C中的任意一种通信方式将所述日志文件传输至所述调试器的所述存储介质中。
图1是本发明提供的控制器的程序调试方法的一实施例的方法示意图。
如图1所示,根据本发明的一个实施例,所述控制器的程序调试方法至少包括步骤S110、步骤S120、步骤S130。
步骤S110,预先根据调试需求将调试宏定义和预编译指令插入调试程序中,并将调试日志输出指令插入需要进行调试的位置的预编译模块内和/或将预设的调试函数插入调试程序中,对所述调试程序进行编译并刷写至所述控制器中。
具体地,所述预编译指令用于将调试程序中需要进行调试的位置写入所述调试程序中,所述测试宏定义用于确定启动所述调试程序中需要进行调试的位置的调试。即通过测试宏定义来确定是否启动需要进行调试位置的调试。进一步地,预先将调试日志输出指令插入需要进行调试的位置的预编译模块内,从而在执行所述调试程序时,能够输出相应位置的日志文件。 所述调试日志输出指令即输出所述需要进行调试的位置的日志的指令。所述需要进行调试的位置例如为程序中易出错位置。每处调试的位置都具有相应的预编译模块(预编译的程序模块),且每处预编译模块输出的日志是不同的,以便于后续程序错误位置的定位。在设计好调试程序,并确定所述测试宏定义中有调试模式,将对所述调试程序进行编译并刷写到需要进行程序调试的控制器中。
将预设的测试函数插入调试程序中,即将调试程序直接写成函数的形式,在程序调试的时候就直接调用测试函数,不使用时删除测试函数。测试函数可以与宏定义和预编译同时使用,也可以不使用调试的宏定义和预编译。测试函数即是将调试日志的输出程序封装成一个函数,然后在需要进行调试的位置(如程序可能出现问题的位置)插入此函数,每次只用给函数不同的参数即可。即是将输出指令综合成一个固定的程序,每次只用给函数不同的参数即可。如果不联合预编译指令使用,可以在在调试完成后的将此函数整体删除。
步骤S120,在所述控制器与所述调试器连接后,启动所述控制器运行所述调试程序。
具体地,调试器接入到PCB板上的调试针座后,启动控制器来运行整个调试程序,若预先根据调试需求将调试宏定义和预编译指令插入调试程序中,则在所述控制器与所述调试器连接后,查询所述调试程序中是否存在宏定义。若查询到所述调试程序中存在宏定义,则启动所述控制器运行所述调试程序。
优选地,在启动所述控制器运行所述调试程序之前,先启动日志记录程序,然后开始运行所述调试程序。若查询到所述调试程序中不存在宏定义,则直接运行所述控制器的程序,以便观测程序是否存在运转问题,而不进行日志输出程序。
步骤S130,通过所述调试器存储运行所述调试程序产生的日志文件和/或调试信息,以通过分析所述日志文件和/或调试信息,进行所述调试程序的修改和重新调试。
具体地,在运行所述调试程序的过程中,检测是否存在日志文件,若存在日志文件,则实时记录程序的运转位置,通过调试器存储所述日志文件,以用于后续进行日志文件的分析,并进行重新调试;若无日志文件,则程序直接退出(可能程序编写出现问题),并反馈无调试日志文件输出,和/或,在运行调试程序时,在测试处输出调试信息,直接通过所述调试器存储测试位置的调试信息。
在一种具体实施方式中,按照调试时间对所述日志文件进行分割,以得到每次的调试日志;对每次进行分割时的停滞位置进行判断,若每次的程序停滞位置相同,则确定程序的错误存在于程序停滞位置或所述停滞位置附近的代码中;若每次的程序停滞位置存在跳变,则根据跳变的位置进行分析,确定程序中存在的错误,以对所述存在的错误进行修改后,再次进行调试。其中若跳变的位置集中,则对所有跳变的位置进行分析,检测程序中存在的错误,以便修改后,再次进行调试;若跳变的位置不集中,则可能存在日志文件定位不准,则需要在调试程序中增加调试的位置,细化日志的记录程序,然后重新记录日志文件在对程序进行分析工作。
图5示出了根据本发明一具体实施例的程序调试过程中日志分析流程图。
如图5所示,首先将调试器取下取出内部的存储卡或者直接通过连接线将日志文件传输到调试电脑当中,然后开始日志文件的程序的自动分析。程序首先对获取到的日志文件按照测试的时间戳进行分割,分割出每次的测试日志;随后对每次日志中程序的异常停滞位置进行判断,若每次程序停滞位置相同,则程序的错误即存在于停滞位置或停滞位置附近的代码中,仅需对当前模块(指停滞位置或停滞位置附近的代码)进行检测处理,修改完成后在次进行复测,直至程序能进行正常的运转;若程序的停滞位置多次改变,则需要对每次的跳变位置进行观测,若程序的跳变位置主要集中在某几处地方,则对几处异常位置都进行分析,检测程序中存在的错误并修改后,进行再次测试;若程序的多次跳变位置不定,则可能存在日志输出文件的定位不准,需要再次的去细化日志的记录程序,然后重新记录日志文件在对程序进行分析工作。
为清楚说明本发明技术方案,下面再以若干具体实施例对本发明提供的控制器的程序调试方法的执行流程进行描述。
图3示出了根据本发明一具体实施例的调试器运转流程图。
如图3所示,当采用模拟断点调试器调试控制器的时候,需要先根据测试的需求将测试宏定义(#define)和预编译(#ifdef)指令插入到调试程序内,将调试日志指令文件插入到各处需要调试的预编译模块内,通过宏定义来确定是否确定启动这些模块(即当编译器识别到调试的宏定义和预编译代码的时候,就启用调试代码进行编译,没有识别到的时候就不启用此块编译)。在设计好调试程序后并确定宏定义中有调试模式,将程序进行编译并刷写到需要测试的控制器中。随后将调试器接入到PCB板上的调试针座,启动控制器来运行整个测试程序,若程序出现程序运行卡死问题,则通过调试器调取日志文件来进行日志分析,修改调试程序重复进行测试,直至程序能稳定运行。
图4示出了根据本发明一具体实施例的调试程序流程图。
如图4所示,首先,控制器内程序进行运转的时候,先对调试程序的宏定义进行检验查询,若不存在调试宏定义,则直接运行整个控制器的程序,而不进行日志输出程序,然后观测程序是否存在运转问题,若程序运转没问题,则该测试通过,否则测试失败需重新开始调试;若程序内存在调试的宏定义,则在程序运转的过程中,先启动记录程序内的日志记录程序,然后测试程序开始运行,并在运行过程中检测是否存在日志文件,若无日志文件程序直接退出,并反馈无调试日志文件输出,若存在日志文件则实时记录程序的运转位置,当程序出现异常时,则分析日志,随后重复,若无错误出现,则表示测试通过,初步鉴定程序不存在错误。
本发明还提供一种控制器的程序调试装置。
在所述控制器的主控板上设置有与调试器连接的调试接口,所述调试器通过所述调试接口连接所述主控板,能够读取进行所述程序调试输出的调试日志文件和/或调试信息。
图2示出了调试器整体结构示意图。如图2所示,控制器的主控板上设置有与调试器连接的调试接口。具体地,调试器的调试接口内置在所述主控板的电子元器件布局板(PCB板)上,所述调试接口具体可以为针座;所述调试器通过所述调试接口连接所述主控板,能够读取进行所述程序调试输出的调试日志文件和/或调试信息。优选地,在所述调试器的内部设置有存储介质,所述存储介质可以用于记录进行所述程序调试输出的日志文件,所述存储介质,例如为内存卡。所述调试器可以跟调试设备(例如电脑)连接,将所述存储介质中存储的日志文件传输到所述调试设备中,例如,可以通过USB连接线直接将内存卡中存储的日志文件直接传输到调试电脑中。
调试器与主控板之间通过调试接口连接,调试接口例如为针座接口,针座在PCB板上不可以移动,针座接口和排线与调试器直接相连,可以在调试完成后进行拆除,用于其他的待调试的控制器或调试程序。
在一种具体实施方式中,所述调试器通过所述调试接口与所述主控板的直接存储器访问模块(DMA)连接,通过所述直接存储器访问模块将所述日志文件传输至所述调试器的所述存储介质中。例如,如图2所示, PCB板上的针座与主控芯片的DMA(直接存储器访问模块)相关引脚连接到一块,DMA控制器向所述控制器的CPU发出数据传输请求,CPU放弃数据总线的控制权限, DMA获取接管数据总线的权限,将数据整合并打包成日志文件完成输出,完成日志文件的传输工作后,将总线的控制权交还给CPU。
在另一种具体实施方式中,所述调试器通过所述调试接口与所述主控板通过SCI、SPI和I2C中的至少一种通信方式连接,以将所述日志文件传输至所述调试器的所述存储介质中。即,可以通过SCI、SPI和I2C中的任意一种通信方式将所述日志文件传输至所述调试器的所述存储介质中。
预先根据调试需求将调试宏定义和预编译指令插入调试程序中,并将调试日志输出指令插入需要进行调试的位置的预编译模块内和/或将预设的调试函数插入调试程序中,对所述调试程序进行编译并刷写至所述控制器中。
具体地,所述预编译指令用于将调试程序中需要进行调试的位置写入所述调试程序中,所述测试宏定义用于确定启动所述调试程序中需要进行调试的位置的调试。即通过测试宏定义来确定是否启动需要进行调试位置的调试,进一步地,预先将调试日志输出指令插入需要进行调试的位置的预编译模块内,从而在执行所述调试程序时,能够输出相应位置的日志文件。 所述调试日志输出指令即输出所述需要进行调试的位置的日志的指令。所述需要进行调试的位置例如为程序中易出错位置。每处调试的位置都具有相应的预编译模块(预编译的程序模块),且每处预编译模块输出的日志是不同的,以便于后续程序错误位置的定位。在设计好调试程序,并确定所述测试宏定义中有调试模式,将对所述调试程序进行编译并刷写到需要进行程序调试的控制器中。
将预设的测试函数插入调试程序中,即将调试程序直接写成函数的形式,在程序调试的时候就直接调用测试函数,不使用时删除测试函数。测试函数可以与宏定义和预编译同时使用,也可以不使用调试的宏定义和预编译。测试函数即是将调试日志的输出程序封装成一个函数,然后在需要进行调试的位置(如程序可能出现问题的位置)插入此函数,每次只用给函数不同的参数即可。即是将输出指令综合成一个固定的程序,每次只用给函数不同的参数即可。如果不联合预编译指令使用,可以在在调试完成后的将此函数整体删除。
图6是本发明提供的控制器的程序调试装置的一实施例的结构框图。如图6所示,所述程序调试装置100包括:启动单元120和存储单元130。
启动单元120,用于在所述控制器与所述调试器连接后,启动所述控制器运行所述调试程序。
具体地,调试器接入到PCB板上的调试针座后,启动控制器来运行整个调试程序,在所述控制器与所述调试器连接后,查询所述调试程序中是否存在宏定义。若查询到所述调试程序中存在宏定义,则启动所述控制器运行所述调试程序。若预先根据调试需求将调试宏定义和预编译指令插入调试程序中,则所述程序调试装置还包括:查询单元110,用于在所述控制器与所述调试器连接后,查询所述调试程序中是否存在所述调试宏定义。所述启动单元120进一步用于若所述查询单元110查询到所述程序中存在所述调试宏定义,则启动所述控制器运行所述调试程序。
优选地,所述启动单元120,还用于:若所述查询单元110查询到所述调试程序中存在宏定义,则在启动所述控制器运行所述调试程序之前,先启动日志记录程序,然后开始运行所述调试程序。
若所述查询单元110查询到所述调试程序中不存在宏定义,则直接运行所述控制器的程序,以便观测程序是否存在运转问题,而不进行日志输出程序。
存储单元130,用于通过所述调试器存储运行所述调试程序产生的日志文件和/或调试信息,以通过分析所述日志文件和/或调试信息,进行所述调试程序的修改和重新调试。
具体地,在运行所述调试程序的过程中,检测是否存在日志文件,若存在日志文件,则实时记录程序的运转位置,通过调试器存储所述日志文件,以用于后续进行日志文件的分析,并进行重新调试;若无日志文件,则程序直接退出(可能程序编写出现问题),并反馈无调试日志文件输出,和/或,在运行调试程序时,在测试处输出调试信息,直接通过所述调试器存储测试位置的调试信息。
在一种具体实施方式中,按照调试时间对所述日志文件进行分割,以得到每次的调试日志;对每次进行分割时的停滞位置进行判断,若每次的程序停滞位置相同,则确定程序的错误存在于程序停滞位置或所述停滞位置附近的代码中;若每次的程序停滞位置存在跳变,则根据跳变的位置进行分析,确定程序中存在的错误,以对所述存在的错误进行修改后,再次进行调试。其中若跳变的位置集中,则对所有跳变的位置进行分析,检测程序中存在的错误,以便修改后,再次进行调试;若跳变的位置不集中,则可能存在日志文件定位不准,则需要在调试程序中增加调试的位置,细化日志的记录程序,然后重新记录日志文件在对程序进行分析工作。
图5示出了根据本发明一具体实施例的程序调试过程中日志分析流程图。
如图5所示,首先将调试器取下取出内部的存储卡或者直接通过连接线将日志文件传输到调试电脑当中,然后开始日志文件的程序的自动分析。程序首先对获取到的日志文件按照测试的时间戳进行分割,分割出每次的测试日志;随后对每次日志中程序的停滞位置进行判断,若每次程序停滞位置相同,则程序的错误即存在于停滞位置或停滞位置附近的代码中,仅需对当前模块(指停滞位置或停滞位置附近的代码)进行检测处理,修改完成后在次进行复测,直至程序能进行正常的运转;若程序的停滞位置多次改变,则需要对每次的跳变位置进行观测,若程序的跳变位置主要集中在某几处地方,则对几处异常位置都进行分析,检测程序中存在的错误并修改后,进行再次测试;若程序的多次跳变位置不定,则可能存在日志输出文件的定位不准,需要再次的去细化日志的记录程序,然后重新记录日志文件在对程序进行分析工作。
本发明还提供对应于所述程序调试方法的一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现前述任一所述方法的步骤。
据此,本发明提供的方案,采用软件和硬件相结合的调试方法,将调试日志通过调试宏定义内置到程序内部,将运行时的调试日志逐步输出到调试器并记录。通用性强,适用于任何一款芯片,不需要采用价格高昂的调试器设备既能定位到程序中的错误位置,提高调试工作的效率。调试器适配于任何具有串行接口的芯片,可重复利用,设备成本低。采用的设备为即插即用行和离线记录时,调试人员仅需更新程序即可,不用重复学习软件,且能释放调试人员的时间,能大幅度的提高工作效率。
本发明提供的方案,能够降低调试过程中不同芯片需要不同适配调试器的价格成本;减少各种调试器软件的学习过程,实现一种调试方法通用,提高调试的工作效率;通过程序和硬件模拟复现程序调试器功能,提高程序调试简便性和方式多样性。采用条件编译和宏定义结合完成程序中易出错位置日志输出程序的编写,便于后续确定程序的BUG(缺陷)所在。
本文中所描述的功能可在硬件、由处理器执行的软件、固件或其任何组合中实施。如果在由处理器执行的软件中实施,那么可将功能作为一或多个指令或代码存储于计算机可读媒体上或经由计算机可读媒体予以传输。其它实例及实施方案在本发明及所附权利要求书的范围及精神内。举例来说,归因于软件的性质,上文所描述的功能可使用由处理器、硬件、固件、硬连线或这些中的任何者的组合执行的软件实施。此外,各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件 可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为控制装置的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对相关技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。
Claims (9)
1.一种控制器的程序调试方法,其特征在于,在所述控制器的主控板上设置有与调试器连接的调试接口,所述调试器通过所述调试接口连接所述主控板,能够读取进行所述程序调试输出的日志文件和/或调试信息并存储;所述调试器的内部设置有用于记录程序输出的日志文件的存储介质;所述调试器通过所述调试接口与所述主控板的直接存储器访问模块连接,通过所述直接存储器访问模块将所述日志文件传输至所述调试器的所述存储介质中;所述调试器能够跟调试设备连接,将所述存储介质中存储的日志文件传输到所述调试设备中;
所述程序调试方法,包括:
预先根据调试需求将调试宏定义和预编译指令插入调试程序中,并将调试日志输出指令插入需要进行调试的位置的预编译模块内和/或将预设的调试函数插入调试程序中,对所述调试程序进行编译并刷写至所述控制器中;
在所述控制器与所述调试器连接后,启动所述控制器运行所述调试程序;
通过所述调试器存储运行所述调试程序产生的日志文件和/或调试信息,以通过分析所述日志文件和/或调试信息,进行所述调试程序的修改和重新调试;
分析所述日志文件,包括:
按照调试时间对所述日志文件进行分割,以得到每次的调试日志;
对每次进行分割时的停滞位置进行判断,若每次的程序停滞位置相同,则确定程序的错误存在于程序停滞位置或所述停滞位置附近的代码中;
若每次的程序停滞位置存在跳变,则根据跳变的位置进行分析,确定程序中存在的错误,以对所述存在的错误进行修改后,再次进行调试。
2.根据权利要求1所述的方法,其特征在于,还包括:
在所述控制器与所述调试器连接后,查询所述调试程序中是否存在所述调试宏定义;
若查询到所述程序中存在所述调试宏定义,则启动所述控制器运行所述调试程序。
3.根据权利要求2所述的方法,其特征在于,还包括:
若查询到所述调试程序中存在宏定义,则在启动所述控制器运行所述调试程序之前,先启动日志记录程序;
和/或
若查询到所述调试程序中不存在宏定义,则直接运行所述控制器的程序,以便观测程序是否存在运转问题。
4.根据权利要求1或2所述的方法,其特征在于,
所述调试器通过所述调试接口与所述主控板通过SCI、SPI和I2C中的至少一种通信方式连接,以将所述日志文件传输至所述调试器的所述存储介质中。
5.一种控制器的程序调试装置,其特征在于,在所述控制器的主控板上设置有与调试器连接的调试接口,所述调试器通过所述调试接口连接所述主控板,能够读取进行所述程序调试输出的日志文件和/或调试信息并存储;所述调试器的内部设置有用于记录程序输出的日志文件的存储介质;所述调试器通过所述调试接口与所述主控板的直接存储器访问模块连接,通过所述直接存储器访问模块将所述日志文件传输至所述调试器的所述存储介质中;所述调试器能够跟调试设备连接,将所述存储介质中存储的日志文件传输到所述调试设备中;
预先根据调试需求将调试宏定义和预编译指令插入调试程序中,并将调试日志输出指令插入需要进行调试的位置的预编译模块内和/或将预设的调试函数插入调试程序中,对所述调试程序进行编译并刷写至所述控制器中;
所述程序调试装置,包括:
启动单元,用于在所述控制器与所述调试器连接后,启动所述控制器运行所述调试程序;
存储单元,用于通过所述调试器存储运行所述调试程序产生的日志文件和/或调试信息,以通过分析所述日志文件和/或调试信息,进行所述调试程序的修改和重新调试;
分析所述日志文件,包括:按照调试时间对所述日志文件进行分割,以得到每次的调试日志;对每次进行分割时的停滞位置进行判断,若每次的程序停滞位置相同,则确定程序的错误存在于程序停滞位置或所述停滞位置附近的代码中;若每次的程序停滞位置存在跳变,则根据跳变的位置进行分析,确定程序中存在的错误,以对所述存在的错误进行修改后,再次进行调试。
6.根据权利要求5所述的程序调试装置,其特征在于,还包括:
查询单元,用于在所述控制器与所述调试器连接后,查询所述调试程序中是否存在所述调试宏定义;
所述启动单元,进一步用于:若所述查询单元查询到所述程序中存在所述调试宏定义,则启动所述控制器运行所述调试程序。
7.根据权利要求6所述的程序调试装置,其特征在于,
所述启动单元,还用于:若所述查询单元查询到所述调试程序中存在宏定义,则在启动所述控制器运行所述调试程序之前,先启动日志记录程序;
和/或,
所述启动单元,还用于:若所述查询单元查询到所述调试程序中不存在宏定义,则直接运行所述控制器的程序,以便观测程序是否存在运转问题。
8.根据权利要求5或6所述的程序调试装置,其特征在于,
所述调试器通过所述调试接口与所述主控板通过SCI、SPI和I2C中的至少一种通信方式连接,以将所述日志文件传输至所述调试器的所述存储介质中。
9.一种存储介质,其特征在于,其上存储有计算机程序,所述程序被处理器执行时实现权利要求1-4任一所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311635834.5A CN117370214B (zh) | 2023-12-01 | 2023-12-01 | 一种控制器的程序调试方法、装置和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311635834.5A CN117370214B (zh) | 2023-12-01 | 2023-12-01 | 一种控制器的程序调试方法、装置和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117370214A CN117370214A (zh) | 2024-01-09 |
CN117370214B true CN117370214B (zh) | 2024-04-19 |
Family
ID=89393196
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311635834.5A Active CN117370214B (zh) | 2023-12-01 | 2023-12-01 | 一种控制器的程序调试方法、装置和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117370214B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101916223A (zh) * | 2010-08-11 | 2010-12-15 | 无锡中星微电子有限公司 | 程序调试方法及系统 |
CN107832166A (zh) * | 2017-11-27 | 2018-03-23 | 郑州云海信息技术有限公司 | 一种Linux服务器宕机故障分析系统及方法 |
CN114238107A (zh) * | 2021-12-14 | 2022-03-25 | 北京天融信网络安全技术有限公司 | 一种跟踪调试方法、系统及计算机可读存储介质 |
CN116414634A (zh) * | 2021-12-31 | 2023-07-11 | 北京希姆计算科技有限公司 | 设备调试方法、系统、装置、调试设备和可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3330859A1 (en) * | 2016-12-05 | 2018-06-06 | Universiteit Gent | Self-debugging |
-
2023
- 2023-12-01 CN CN202311635834.5A patent/CN117370214B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101916223A (zh) * | 2010-08-11 | 2010-12-15 | 无锡中星微电子有限公司 | 程序调试方法及系统 |
CN107832166A (zh) * | 2017-11-27 | 2018-03-23 | 郑州云海信息技术有限公司 | 一种Linux服务器宕机故障分析系统及方法 |
CN114238107A (zh) * | 2021-12-14 | 2022-03-25 | 北京天融信网络安全技术有限公司 | 一种跟踪调试方法、系统及计算机可读存储介质 |
CN116414634A (zh) * | 2021-12-31 | 2023-07-11 | 北京希姆计算科技有限公司 | 设备调试方法、系统、装置、调试设备和可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117370214A (zh) | 2024-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109783342B (zh) | 脚本调试方法、设备及计算机存储介质 | |
US8156475B2 (en) | Device and method for testing embedded software using emulator | |
CN108984389B (zh) | 一种应用程序测试方法及终端设备 | |
US8010849B2 (en) | Diagnosing faults within programs being executed by virtual machines | |
CN104484274B (zh) | 一种基于itp工具的内存轮巡检查功能测试方法 | |
CN103049371A (zh) | Android应用程序测试方法和测试装置 | |
CN111026601A (zh) | Java应用系统的监控方法、装置、电子设备及存储介质 | |
CN107329889B (zh) | 一种c编译器自动化测试的方法 | |
CN108459850B (zh) | 生成测试脚本的方法、装置及系统 | |
KR102141287B1 (ko) | Autosar 기반 차량 소프트웨어의 결함 테스트 방법 및 결함 테스트 시스템 | |
CN110928556A (zh) | 轨道车辆用程序自动烧录方法及装置、测试方法及系统 | |
JP4959941B2 (ja) | ソフトウェアの双方向プロービング | |
CN104699617A (zh) | 一种游戏用自动化测试方法 | |
CN110941520B (zh) | 基于二取二安全控制单元的硬件功能测试系统及方法 | |
CN110704315B (zh) | 一种嵌入式软件测试的故障注入装置 | |
CN113133041B (zh) | 动态间隔列控车载中车车通信功能的测试方法及装置 | |
CN117370214B (zh) | 一种控制器的程序调试方法、装置和存储介质 | |
CN113742215A (zh) | 一种自动配置和调用测试工具进行测试分析的方法及系统 | |
CN110633199A (zh) | 用于支持智能合约的区块链的测试装置、方法及介质 | |
CN115756935A (zh) | 嵌入式软件系统的异常故障定位方法、装置及设备 | |
JPH10133914A (ja) | 計算機システム及びデバイス入出力シミュレータ | |
CN110597705B (zh) | 一种可重复获取测试数据的程序调试方法及装置 | |
CN113220514A (zh) | 固态硬盘测试方法、装置、可读存储介质及电子设备 | |
CN112559345A (zh) | 基于LoadRunner的接口测试方法、计算机设备及存储介质 | |
CN110580219A (zh) | 嵌入式装置函数性能在线测试方法、装置及存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |