CN114116475A - 一种基于日志的软件调试方法 - Google Patents
一种基于日志的软件调试方法 Download PDFInfo
- Publication number
- CN114116475A CN114116475A CN202111404142.0A CN202111404142A CN114116475A CN 114116475 A CN114116475 A CN 114116475A CN 202111404142 A CN202111404142 A CN 202111404142A CN 114116475 A CN114116475 A CN 114116475A
- Authority
- CN
- China
- Prior art keywords
- file
- function
- variable
- log
- dump
- 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
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
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
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
本发明公开了一种基于日志的软件调试方法,通过把软件调试过程中要查看的变量打印到日志文件,然后再利用外部软件工具将日志文件输出成图形化界面的变量的“数值——时间”变化波形图的方法来方便程序员进行软件调试。本发明提供的方法相比GDB和类似printf的打印,具有使用简单,显示直观的优点。程序员只需使用dumpfile函数打开日志文件,在需要记录的地方使用dump函数记录一些变量的变化数值,然后使用dumpon和dumpoff灵活控制记录即可。同时能将变量的变化显示到变量数值随时间变化的图形化波形图中,便于程序员查看各个变量的数值变化,以及各个变量之间数值变化的先后影响关系。
Description
技术领域
本发明涉及软件调试技术领域,更具体地说是一种基于日志的软件调试方法。
背景技术
传统的软件调试方法主要有使用打印函数——例如printf——打印运行过程中各个变量的数值,使用GDB调试等方法。使用打印函数的方法的缺点是每次都要在相应位置编写相应的打印函数语句,调试完后还要删除。使用GDB调试虽然能不断跟踪软件程序的执行过程,但是当遇到程序量很大,大量循环,多线程调试,多核程序甚至众核程序调试时会比较麻烦。尤其是在片上多核及众核的情况下的调试,使用GDB调试时要协调统一控制各个处理器上的程序,实现并不容易。
发明内容
为了克服现有技术的上述缺陷,本发明提供一种新的软件调试方法,通过记录要跟踪的变量的数值变化,生成日志文件或图形化变量变化及顺序界面来供错误定位。而且这种方法不仅适合单处理器上的程序调试,也适用于多核和众核上并行程序的调试。
为实现上述目的,本发明提供如下技术方案:
一种基于日志的软件调试方法,包括以下步骤:
第1步:用户通过包含dump.h头文件的方式,在需要打印日志的地方包含以下定义的函数:
Dump.h中至少增加以下4个用户可见的函数来辅助实现调试功能:
函数dumpfile();
函数dumpoff();
函数dumpon();
函数dump();
在dump.c中有这些函数的定义和实现。另外还有4个全局变量的定义:
全局变量dumpen,类型为char;当dumpen=1时将会把指定的变量的数值记录到日志当中;当dumpen=0时不会把各变量的数值记录到日志当中;
全局变量dumpfilename,类型为char指针,存储日志文件名;
全局变量dumpfilehd,类型为FILE指针,是打开的日志文件的句柄;
全局变量dump_time,类型为unsigned int,用于标记每个变量的记录序号;这里用序号来表明各个变量的数值改变的先后顺序,即序号就是变量变化的时间;
Dumpfile函数用于指定要打开的日志文件名,并以只写的方式打开文件,准备开始记录;如果文件无法打开,则报错退出程序;Dumpfile至少要有1个参数,即日志文件名;其原型为dumpfile(char*filename);
Dumpon函数用于启动日志记录;此函数的功能比较简单,就是设置dumpen为1;
Dumpoff函数用于关闭日志记录;此函数的功能比较简单,就是设置dumpen为0;
Dump函数是1个可变参数函数;第1个参数是格式化定位字符串,从第2个参数开始就是要记录的参数列表;
格式化定位字符串的格式是固定的,是“变量标识字符串=%格式化字符”,如果要同时记录多个变量的数值,每个变量的格式化定位字符串之间用逗号“,”分隔,即“变量标识字符串=%格式化字符,变量标识字符串=%格式化字符,变量标识字符串=%格式化字符,……”。Dump的函数调用形式例如:dump(“a=%d”,a);或者dump(“a=%d,b=%d,c=%u”,a,b,c);
格式化字符和c语言的printf相同;
第2步:指定日志文件路径和文件名并调用dumpfile函数打开日志文件;
例如如果指定日志文件名为“./log”,那么需要在main函数中,在所有的日志打印开始前,调用dumpfile函数:dumpfile(”./log”);;
第3步:使用dumpon函数开启日志打印;
第4步:在需要记录变量数值的位置插入dump函数;
第5步:编译并运行程序,生成日志文件./log;
第6步:将日志文件中记录的变量随时间的数值变化用图形化界面软件工具显示出来供用户查看;
这一步有2种方法,第1种方法是编写1个软件程序读取生成的日志文件,然后显示成图形化界面;第2种方法是编写1个软件转换工具程序或脚本,将日志文件转换成某一种现成的图形化界面工具支持的文件格式。
所述第2步中:如果指定日志文件名为“./log”,那么需要在main函数中,在所有的日志打印开始前,调用dumpfile函数:dumpfile(”./log”);。
所述第4步中,定义某一位置要记录变量a,b两个变量的数值:dump(“a=%d,b=%d”,a,b);另一位置要记录变量b,c,d三个变量的数值:dump(“b=%d,c=%d,d=%u”,b,c,d);如果程序中某一段时间不需要记录变量的变化数值,可以使用dumpoff函数关闭日志记录;关闭后在需要开始记录的地方仍然可以使用dumpon函数重新打开日志记录功能继续记录。
所述第6步中,软件转换工具的实现方法为:
第1步:建立符号数组和查询函数
我们可以将日志文件转换为verilog的vcd文件,然后借助于verilog vcd文件的图形化波形查看软件来查看波形。在vcd文件中,每个变量都用1个唯一的符号来表示。所以后续要建立变量与符号的一一对应关系。当前第1步是提供1个符号查询函数以供后续使用;
本步骤中,建立1个具有16个元素,每个元素是单个的ASCII字符的数组logo;数组的索引是0到15。数组元素是任意的ASCII字符,但是每个元素不能相同;
定义1个变量lptr作为查询符号数组的指针,然后赋值初始值为1;
定义函数get_logo来获取符号。此函数没有输入参数,输出参数为1个字符串,此字符串就是当前查询得到的唯一的符号字符串;每次调用get_logo都会得到1个唯一的标识字符串;此函数的工作流程为:a.定义字符串变量relt作为函数的返回值;b.初始化relt为空字符串;c.定义整型变量lptrtmp,并以此变量存储lptr的当前值;d.判断lptrtmp是否等于0;如果等于0,则变量lptr加1,然后返回relt;如果不等于0则定义整型变量curptr,并赋值为lptrtmp&0xf,即获取lptrtmp的低4位,然后以curptr为索引查询数组logoa,得到的字符放入relt,然后lptrtmp往右移动4位,即删除lptrtmp的低4位,然后回到步骤d;
第2步:读取日志文件,并确定变量符号对应关系;a.实现流程为:定义字符串数组line存储日志文件内容,line数组每个元素存储日志文件一行;b.定义hash数据结构var用于存储变量名与符号对应关系,hash的键为变量名字符串,hash的值为对应的符号字符串;c.以只读的方式打开日志文件,判断文件是否能正确打开,否则报错退出,是则进去下一步;d.判断文件是否已经读完,是则结束,否则进入下一步;e.读取文件一行,放入line数组;f.判断当前行中是否出现变量名,否则进入步骤d,是则进入下一步;g.判断当前行中出现的变量名是否已经存在于var的键中,是则进入步骤d,否则进入下一步;h.调用get_logo函数得到一个新的符号字符串,将本行中出现的变量名和符号字符串作为新的键值对存入var,最后进入步骤d;
第3步:输出vcd文件头信息。Vcd文件是有格式要求的,内部记录的数据必须按照规定的格式才能被vcd文件解析工具识别。本步骤先按照vcd文件格式,输出文件头部信息;实现流程为:写入时间,向vcd文件中写入“$date\n”;向vcd文件中写入当前的时间,例如“Wed Jun 2 15:21:35 2021\n”;向vcd文件中写入“$end\n”;向vcd文件中写入版本信息;向vcd文件中写入时间精度;向vcd文件中写入模块层次;提取hash数据结构var的每个键值对,向vcd文件按照“$var integer 32值键[31:0]$end\n”的格式输出,每个键值对占用1行;向vcd文件中输出头部结尾信息:“$upscope$end\n#0\n$dumpvars\n”;vcd头部输出完成。
第4步:读取日志文件的内容,转换为vcd文件。实现流程为:a.设置数组line读取指针变量rptr=0;b.读取rptr指向的数组line的1个元素;c.判断当前行的内容,如果是“变量标识符名=d或u加数字”,提取数字并将其转换为二进制数值字符串,以”b加二进制数值字符串变量标识符名”的形式写入vcd文件;如果是以“#”开头,后面加数字,直接把本行内容输出到vcd文件;d.数组line是否已经遍历完,即rptr是否>=数组line最大索引;如果是则退出;如果否则rptr加1,回到步骤b。
本发明的技术效果和优点:
1、本发明提供的方法相比GDB和类似printf的打印,具有使用简单,显示直观的优点。程序员只需使用dumpfile函数打开日志文件,在需要记录的地方使用dump函数记录一些变量的变化数值,然后使用dumpon和dumpoff灵活控制记录即可。
2、同时能将变量的变化显示到变量数值随时间变化的图形化波形图中,便于程序员查看各个变量的数值变化,以及各个变量之间数值变化的先后影响关系。
附图说明
图1为本发明软件转换工具(VCDTRAN)第1步的实现流程图;
图2为本发明软件转换工具(VCDTRAN)第2步的实现流程图;
图3为本发明软件转换工具(VCDTRAN)第3步的实现流程图;
图4为本发明软件转换工具(VCDTRAN)第4步的实现流程图。
具体实施方式
下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明提供了一种通过把软件调试过程中要查看的变量打印到日志文件,然后再利用外部软件工具将日志文件输出成图形化界面的变量的“数值——时间”变化波形图的方法来方便程序员进行软件调试。
一、实现步骤
实现本方法说明的软件调试,需要以下步骤:
第1步:用户通过包含dump.h头文件的方式,在需要打印日志的地方包含以下定义的函数:
Dump.h中至少增加以下4个用户可见的函数来辅助实现调试功能:
函数dumpfile();
函数dumpoff();
函数dumpon();
函数dump();
在dump.c中有这些函数的定义和实现。另外还有4个全局变量的定义:
全局变量dumpen,类型为char。当dumpen=1时将会把指定的变量的数值记录到日志当中。当dumpen=0时不会把各变量的数值记录到日志当中。
全局变量dumpfilename,类型为char指针,存储日志文件名。
全局变量dumpfilehd,类型为FILE指针,是打开的日志文件的句柄。
全局变量dump_time,类型为unsigned int,用于标记每个变量的记录序号。这里用序号来表明各个变量的数值改变的先后顺序,即序号就是变量变化的时间。
Dumpfile函数用于指定要打开的日志文件名,并以只写的方式打开文件,准备开始记录。如果文件无法打开,则报错退出程序。Dumpfile至少要有1个参数,即日志文件名。其原型为dumpfile(char*filename)。
Dumpon函数用于启动日志记录。此函数的功能比较简单,就是设置dumpen为1。
Dumpoff函数用于关闭日志记录。此函数的功能比较简单,就是设置dumpen为0。
Dump函数是1个可变参数函数。和c函数printf类似,第1个参数是格式化定位字符串,从第2个参数开始就是要记录的参数列表。
格式化定位字符串的格式是固定的,是“变量标识字符串=%格式化字符”,如果要同时记录多个变量的数值,每个变量的格式化定位字符串之间用逗号“,”分隔,即“变量标识字符串=%格式化字符,变量标识字符串=%格式化字符,变量标识字符串=%格式化字符,……”。Dump的函数调用形式例如:dump(“a=%d”,a);或者dump(“a=%d,b=%d,c=%u”,a,b,c);
格式化字符和c语言的printf相同,例如“d”表示以有符号十进制的形式打印,“u”表示以无符号十进制的形式打印。
第2步:指定日志文件路径和文件名并调用dumpfile函数打开日志文件。
例如如果指定日志文件名为“./log”,那么需要在main函数中,在所有的日志打印开始前,调用dumpfile函数:dumpfile(”./log”);。
第3步:使用dumpon函数开启日志打印。
第4步:在需要记录变量数值的位置插入dump函数。例如某一位置要记录变量a,b两个变量的数值:dump(“a=%d,b=%d”,a,b);另一位置要记录变量b,c,d三个变量的数值:dump(“b=%d,c=%d,d=%u”,b,c,d);。如果程序中某一段时间不需要记录变量的变化数值,可以使用dumpoff函数关闭日志记录。关闭后在需要开始记录的地方仍然可以使用dumpon函数重新打开日志记录功能继续记录。
第5步:编译并运行程序,生成日志文件./log。
第6步:将日志文件中记录的变量随时间的数值变化用图形化界面软件工具显示出来供用户查看。
这一步有2种方法,第1种方法是编写1个软件程序读取生成的日志文件,然后显示成图形化界面。第2种方法是编写1个软件转换工具程序或脚本,将日志文件转换成某一种现成的图形化界面工具支持的文件格式,例如verilog的vcd文件。Verilog语言的vcd文件有很多现成的图形化界面工具支持。
二、软件转换工具的实现方法
这里介绍第2种方法的软件转换工具(VCDTRAN)的实现方法。可以使用多种程序设计语言来实现VCDTRAN,例如c,c++,perl,python等。这里我们以perl为例给出实现步骤和实例。此实现方法也是分步实现。
VCDTRAN第1步:建立符号数组和查询函数。
在vcd文件中,每个变量都用1个唯一的符号来表示。所以后续要建立变量与符号的一一对应关系。当前第1步是提供1个符号查询函数以供后续使用。
本步骤中,建立1个具有16个元素,每个元素是单个的ASCII字符的数组logo。数组的索引是0到15。数组元素是任意的ASCII字符,但是每个元素不能相同。
定义1个变量lptr作为查询符号数组的指针,然后赋值初始值为1。
定义函数get_logo来获取符号。此函数没有输入参数,输出参数为1个字符串,此字符串就是当前查询得到的唯一的符号字符串。每次调用get_logo都会得到1个唯一的标识字符串。此函数的工作流程如图1;
VCDTRAN第2步:读取日志文件,并确定变量符号对应关系。图2是实现流程图:
VCDTRAN第3步:输出vcd文件头信息。Vcd文件是有格式要求的,内部记录的数据必须按照规定的格式才能被vcd文件解析工具识别。本步骤先按照vcd文件格式,输出文件头部信息。图3是实现流程图。
VCDTRAN第4步:读取日志文件的内容,转换为vcd文件。图4是实现流程图。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于日志的软件调试方法,其特征在于:包括以下步骤:
第1步:用户通过包含dump.h头文件的方式,在需要打印日志的地方包含以下定义的函数:
Dump.h中至少增加以下4个用户可见的函数来辅助实现调试功能:
函数dumpfile();
函数dumpoff();
函数dumpon();
函数dump();
在dump.c中有这些函数的定义和实现;另外还有4个全局变量的定义:
全局变量dumpen,类型为char;当dumpen=1时将会把指定的变量的数值记录到日志当中;当dumpen=0时不会把各变量的数值记录到日志当中;
全局变量dumpfilename,类型为char指针,存储日志文件名;
全局变量dumpfilehd,类型为FILE指针,是打开的日志文件的句柄;
全局变量dump_time,类型为unsigned int,用于标记每个变量的记录序号;这里用序号来表明各个变量的数值改变的先后顺序,即序号就是变量变化的时间;
Dumpfile函数用于指定要打开的日志文件名,并以只写的方式打开文件,准备开始记录;如果文件无法打开,则报错退出程序;Dumpfile至少要有1个参数,即日志文件名;其原型为dumpfile(char*filename);
Dumpon函数用于启动日志记录;此函数的功能比较简单,就是设置dumpen为1;
Dumpoff函数用于关闭日志记录;此函数的功能比较简单,就是设置dumpen为0;
Dump函数是1个可变参数函数;第1个参数是格式化定位字符串,从第2个参数开始就是要记录的参数列表;
格式化定位字符串的格式是固定的,是“变量标识字符串=%格式化字符”,如果要同时记录多个变量的数值,每个变量的格式化定位字符串之间用逗号“,”分隔,即“变量标识字符串=%格式化字符,变量标识字符串=%格式化字符,变量标识字符串=%格式化字符,……”;Dump的函数调用形式例如:dump(“a=%d”,a);或者dump(“a=%d,b=%d,c=%u”,a,b,c);
格式化字符和c语言的printf相同;
第2步:指定日志文件路径和文件名并调用dumpfile函数打开日志文件;
例如如果指定日志文件名为“./log”,那么需要在main函数中,在所有的日志打印开始前,调用dumpfile函数:dumpfile(”./log”);;
第3步:使用dumpon函数开启日志打印;
第4步:在需要记录变量数值的位置插入dump函数;
第5步:编译并运行程序,生成日志文件./log;
第6步:将日志文件中记录的变量随时间的数值变化用图形化界面软件工具显示出来供用户查看;
这一步有2种方法,第1种方法是编写1个软件程序读取生成的日志文件,然后显示成图形化界面;第2种方法是编写1个软件转换工具程序或脚本,将日志文件转换成某一种现成的图形化界面工具支持的文件格式。
2.根据权利要求1所述的一种基于日志的软件调试方法,其特征在于:所述第2步中:如果指定日志文件名为“./log”,那么需要在main函数中,在所有的日志打印开始前,调用dumpfile函数:dumpfile(”./log”);。
3.根据权利要求1所述的一种基于日志的软件调试方法,其特征在于:所述第4步中,定义某一位置要记录变量a,b两个变量的数值:
dump(“a=%d,b=%d”,a,b);另一位置要记录变量b,c,d三个变量的数值:
dump(“b=%d,c=%d,d=%u”,b,c,d);如果程序中某一段时间不需要记录变量的变化数值,可以使用dumpoff函数关闭日志记录;关闭后在需要开始记录的地方仍然可以使用dumpon函数重新打开日志记录功能继续记录。
4.根据权利要求1所述的一种基于日志的软件调试方法,其特征在于:所述第6步中,软件转换工具的实现方法为:
第1步:建立符号数组和查询函数
可以将日志文件转换为verilog的vcd文件,然后借助于verilog vcd文件的图形化波形查看软件来查看波形;在vcd文件中,每个变量都用1个唯一的符号来表示;所以后续要建立变量与符号的一一对应关系;当前第1步是提供1个符号查询函数以供后续使用;
本步骤中,建立1个具有16个元素,每个元素是单个的ASCII字符的数组logo;数组的索引是0到15;数组元素是任意的ASCII字符,但是每个元素不能相同;
定义1个变量lptr作为查询符号数组的指针,然后赋值初始值为1;
定义函数get_logo来获取符号;此函数没有输入参数,输出参数为1个字符串,此字符串就是当前查询得到的唯一的符号字符串;每次调用get_logo都会得到1个唯一的标识字符串;
第2步:读取日志文件,并确定变量符号对应关系;
第3步:输出vcd文件头信息;Vcd文件是有格式要求的,内部记录的数据必须按照规定的格式才能被vcd文件解析工具识别;本步骤先按照vcd文件格式,输出文件头部信息;
第4步:读取日志文件的内容,转换为vcd文件。
5.根据权利要求4所述的一种基于日志的软件调试方法,其特征在于:第1步中,定义函数get_logo来获取符号;此函数没有输入参数,输出参数为1个字符串,此字符串就是当前查询得到的唯一的符号字符串;每次调用get_logo都会得到1个唯一的标识字符串;此函数的工作流程为:a.定义字符串变量relt作为函数的返回值;b.初始化relt为空字符串;c.定义整型变量lptrtmp,并以此变量存储lptr的当前值;d.判断lptrtmp是否等于0;如果等于0,则变量lptr加1,然后返回relt;如果不等于0则定义整型变量curptr,并赋值为lptrtmp&0xf,即获取lptrtmp的低4位,然后以curptr为索引查询数组logoa,得到的字符放入relt,例如查询得到“b”,relt原值为“ac”,放入后relt变成“acb”;然后lptrtmp往右移动4位,即删除lptrtmp的低4位,然后回到步骤d。
6.根据权利要求4所述的一种基于日志的软件调试方法,其特征在于:第2步:读取日志文件,并确定变量符号对应关系;实现流程为:a.定义字符串数组line存储日志文件内容,line数组每个元素存储日志文件一行;b.定义hash数据结构var用于存储变量名与符号对应关系,hash的键为变量名字符串,hash的值为对应的符号字符串;c.以只读的方式打开日志文件,判断文件是否能正确打开,否则报错退出,是则进去下一步;d.判断文件是否已经读完,是则结束,否则进入下一步;e.读取文件一行,放入line数组;f.判断当前行中是否出现变量名,否则进入步骤d,是则进入下一步;g.判断当前行中出现的变量名是否已经存在于var的键中,是则进入步骤d,否则进入下一步;h.调用get_logo函数得到一个新的符号字符串,将本行中出现的变量名和符号字符串作为新的键值对存入var,最后进入步骤d。
7.根据权利要求4所述的一种基于日志的软件调试方法,其特征在于:第3步:输出vcd文件头信息;Vcd文件是有格式要求的,内部记录的数据必须按照规定的格式才能被vcd文件解析工具识别;步骤先按照vcd文件格式,输出文件头部信息;实现流程为:写入时间,向vcd文件中写入“$date\n”;向vcd文件中写入当前的时间,例如“Wed Jun 2 15:21:352021\n”;向vcd文件中写入“$end\n”;向vcd文件中写入版本信息;向vcd文件中写入时间精度;向vcd文件中写入模块层次;提取hash数据结构var的每个键值对,向vcd文件按照“$varinteger 32值键[31:0]$end\n”的格式输出,每个键值对占用1行;向vcd文件中输出头部结尾信息:“$upscope$end\n#0\n$dumpvars\n”;vcd头部输出完成。
8.根据权利要求4所述的一种基于日志的软件调试方法,其特征在于:第4步:读取日志文件的内容,转换为vcd文件;实现流程为:a.设置数组line读取指针变量rptr=0;b.读取rptr指向的数组line的1个元素;c.判断当前行的内容,如果是“变量标识符名=d或u加数字”,提取数字并将其转换为二进制数值字符串,以”b加二进制数值字符串变量标识符名”的形式写入vcd文件;如果是以“#”开头,后面加数字,直接把本行内容输出到vcd文件;d.数组line是否已经遍历完,即rptr是否>=数组line最大索引;如果是则退出;如果否则rptr加1,回到步骤b。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111404142.0A CN114116475A (zh) | 2021-11-24 | 2021-11-24 | 一种基于日志的软件调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111404142.0A CN114116475A (zh) | 2021-11-24 | 2021-11-24 | 一种基于日志的软件调试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114116475A true CN114116475A (zh) | 2022-03-01 |
Family
ID=80371951
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111404142.0A Pending CN114116475A (zh) | 2021-11-24 | 2021-11-24 | 一种基于日志的软件调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114116475A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114662427A (zh) * | 2022-03-08 | 2022-06-24 | 芯华章科技股份有限公司 | 一种逻辑系统设计的调试方法及设备 |
-
2021
- 2021-11-24 CN CN202111404142.0A patent/CN114116475A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114662427A (zh) * | 2022-03-08 | 2022-06-24 | 芯华章科技股份有限公司 | 一种逻辑系统设计的调试方法及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8402434B2 (en) | Graphical user interface (GUI) script generation and documentation | |
EP0785510B1 (en) | Program debugging system for debugging a program having a graphical user interface | |
US5594892A (en) | Method for automated software application testing | |
US20020091968A1 (en) | Object-oriented data driven software GUI automated test harness | |
CN101996131A (zh) | 基于xml封装关键字的gui自动测试方法及自动测试平台 | |
AU2005225128A1 (en) | File formats, methods, and computer program products for representing workbooks | |
CN109032577B (zh) | 一种数据仿真方法 | |
CN102567201A (zh) | 跨模型的图形用户界面测试脚本自动修复方法 | |
US7418450B2 (en) | Method for analyzing computer events recorded in a plurality of chronicle datasets | |
EP1626359A2 (en) | Methods and systems for electronic device modelling | |
US9524366B1 (en) | Annotations to identify objects in design generated by high level synthesis (HLS) | |
CN108920382B (zh) | 测试用例生成方法、装置、存储介质及服务器 | |
CN108984393A (zh) | 一种单元测试代码自动生成方法及装置 | |
CN114116475A (zh) | 一种基于日志的软件调试方法 | |
CN115688675A (zh) | 一种灵活在线检查和校正电路原理图参数方法 | |
CN115858336A (zh) | 测试向量生成方法及装置、计算设备和存储介质 | |
CN111611176B (zh) | 一种通用接口覆盖率模型验证环境自动生成方法、系统及介质 | |
CN116820811B (zh) | 基于剪切板的rpa组件变量快速导出和赋值方法及系统 | |
US20030177471A1 (en) | System and method for graphically developing a program | |
CN107015955B (zh) | 文档编辑方法和装置 | |
CN110489297A (zh) | 一种基于图形界面的fpga调试信号设置方法 | |
CN114327614A (zh) | 参考模型数据流记录和分析的方法及应用 | |
US5964892A (en) | General Purpose Interface Bus (GPIB) system and method which provides GPIB call capture and display | |
CN111708572B (zh) | 一种基于Clang程序结构的控制流程图自动生成方法 | |
CN116069318B (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 |