一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

调试方法、装置、设备、存储介质以及计算机程序产品与流程

2021-11-09 23:16:00 来源:中国专利 TAG:


1.本公开涉及计算机技术领域,具体为终端应用测试领域,尤其涉及一种调试方法、跨平台调试方法、装置、设备、存储介质以及计算机程序产品。


背景技术:

2.目前在解决软件功能异常时主要采用断点调试的方式。但该方法无法在已经发生异常的操作中添加输出信息,对于小概率复现的异常也无法还原异常操作。


技术实现要素:

3.本公开提供了一种调试方法、跨平台调试方法、装置、设备、存储介质以及计算机程序产品,提高了调试效率。
4.根据本公开的一方面,提供了一种调试方法,包括:响应于程序启动,创建数据表;在数据表中存储程序运行时的操作记录;响应于检测到程序运行异常,重新启动程序;基于数据表中的操作记录,运行并调试重新启动后的程序,确定异常变量;基于异常变量,修复程序。
5.根据本公开的另一方面,提供了一种跨平台调试方法,包括:响应于程序在第一平台运行,创建第一数据表,将程序在第一平台运行时的操作记录存储到第一数据表中;响应于程序在第一平台运行时发生异常,在第二平台加载第一数据表,创建第二数据表;基于第一数据表中的操作记录,在第二平台运行程序,将程序在第二平台运行时的操作记录存储到第二数据表中;将第一数据表与第二数据表进行比较,确定异常变量;基于异常变量,在第一平台上调试并修复程序。
6.根据本公开的又一方面,提供了一种调试装置,包括:创建模块,被配置为响应于程序启动,创建数据表;存储模块,被配置为在数据表中存储程序运行时的操作记录;重启模块,被配置为响应于检测到程序运行异常,重新启动程序;调试模块,被配置为基于数据表中的操作记录,运行并调试重新启动后的程序,确定异常变量;修复模块,被配置为基于异常变量,修复程序。
7.根据本公开的又一方面,提供了一种跨平台调试装置,包括:第一运行模块,被配置为响应于程序在第一平台运行,创建第一数据表,将程序在第一平台运行时的操作记录存储到第一数据表中;运行异常模块,被配置为响应于程序在第一平台运行时发生异常,在第二平台加载第一数据表,创建第二数据表;第二运行模块,被配置为基于第一数据表中的操作记录,在第二平台运行程序,将程序在第二平台运行时的操作记录存储到第二数据表中;比较模块,被配置为将第一数据表与第二数据表进行比较,确定异常变量;调试修复模块,被配置为基于异常变量,在第一平台上调试并修复程序。
8.根据本公开的又一方面,提供了一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被上述至少一个处理器执行,以使上述至少一个处理器能够执行上述调试方法及跨平台
调试方法。
9.根据本公开的又一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,上述计算机指令用于使上述计算机执行上述调试方法及跨平台调试方法。
10.根据本公开的再一方面,提供了一种计算机程序产品,包括计算机程序,上述计算机程序在被处理器执行时实现上述调试方法及跨平台调试方法。
11.应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
12.附图用于更好地理解本方案,不构成对本公开的限定。其中:
13.图1是本公开可以应用于其中的示例性系统架构图;
14.图2是根据本公开的调试方法的一个实施例的流程图;
15.图3是根据本公开的调试方法的另一个实施例的流程图;
16.图4是根据本公开的调试方法的又一个实施例的流程图;
17.图5是根据本公开的基于操作回退步数从多条操作记录中确定出待执行的操作记录的一个实施例的流程图;
18.图6是根据本公开的基于待执行的操作记录和日志信息输出指令,运行重新启动后的程序并输出日志信息的一个实施例的流程图;
19.图7是根据本公开的跨平台调试方法的一个实施例的流程图;
20.图8是根据本公开的调试装置的一个实施例的结构示意图;
21.图9是根据本公开的跨平台调试装置的一个实施例的结构示意图;
22.图10是用来实现本公开实施例的调试方法或跨平台调试方法的电子设备的框图。
具体实施方式
23.以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
24.图1示出了可以应用本公开的调试方法或跨平台调试方法或调试装置或跨平台调试装置的实施例的示例性系统架构100。
25.如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
26.用户可以使用终端设备101、102、103通过网络104与服务器105交互,以获取修复的程序等。终端设备101、102、103上可以安装有各种客户端应用,例如调试应用等等。
27.终端设备101、102、103可以是硬件,也可以是软件。当终端设备101、102、103为硬件时,可以是各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。当终端设备101、102、103为软件时,可以安装在上述电子设备中。其可以实现成多个软件或软件模块,也可以实现成单个软件或软件模块。在此不做具体限定。
28.服务器105可以提供各种基于调试的服务。例如,服务器105可以对从终端设备101、102、103获取到的数据表进行分析和处理,并生成处理结果(例如获取修复的程序等)。
29.需要说明的是,服务器105可以是硬件,也可以是软件。当服务器105为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器105为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块。在此不做具体限定。
30.需要说明的是,本公开实施例所提供的调试方法或跨平台调试方法一般由服务器105执行,相应地,调试装置或跨平台调试装置一般设置于服务器105中。
31.应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
32.继续参考图2,其示出了根据本公开的调试方法的一个实施例的流程200。该调试方法包括以下步骤:
33.步骤201、响应于程序启动,创建数据表。
34.在本实施例中,调试方法的执行主体(例如图1所示的服务器105)可以响应于程序启动,创建数据表。其中,数据表是一个临时保存数据的网络虚拟表,数据表有一个名字标识,且包含带有列名的列和记录数据的行。在本实施例中,带有列名的列可以是字段名称列、字段描述列、主键列、类型列、外键列和说明列,其中,字段描述列是对字段名称列的具体描述,主键列和外键列用于表示当前字段是否是主键或者外键,类型列可以是字符型、数字型或其它类型,说明列用于表示当前字段是否非空。数据表存储于数据库中,上述执行主体可以基于任意一种数据库创建数据表,本公开对此不做限定。
35.示例性的,上述执行主体可以基于sqlite数据库创建数据表。sqlite数据库是一款轻量级的嵌入式数据库,该数据库具有存储数据量大、插入耗时短、轻量级、可移植性强、无需配置的特性。在本实施例中,当程序启动后,上述执行主体可以在sqlite数据库中基于sql(structured query language,结构化查询语言)语句创建数据表。
36.步骤202、在数据表中存储程序运行时的操作记录。
37.在本实施例中,上述执行主体创建数据表后,可以在数据表中存储程序运行时的操作记录。在程序运行时,可以基于操作步骤在数据表中生成对应的操作记录。操作记录包括对应的操作步骤的具体操作内容,操作记录的内容并不是固定的,可以基于不同程序的不同功能特点,在操作记录中添加不同的字段。
38.步骤203、响应于检测到程序运行异常,重新启动程序。
39.在本实施例中,上述执行主体在运行程序的过程中,若检测到程序运行异常,则重新启动程序。程序运行异常的表现可以是程序无响应、终端设备死机蓝屏,程序运行异常的表现可以是除了正常执行预定指令、得到预定结果之外的任意一种表现,本公开对此不做限定。重新启动可以是直接重新启动程序,也可以是先重新启动终端设备,再重新启动程序,也可以是先重新安装其它版本的程序,再重新启动程序,本公开对此不做限定。
40.步骤204、基于数据表中的操作记录,运行并调试重新启动后的程序,确定异常变量。
41.在本实施例中,上述执行主体在重新启动程序后,可以运行并调试重新启动后的程序,确定异常变量。上述执行主体可以基于操作记录的内容,依次执行程序运行异常前的
操作记录中的每一个操作步骤,还原程序运行异常前的操作过程,运行重新启动后的程序,并在运行过程中对程序进行调试。其中,调试可以采用对程序进行断点调试的方式,也可以采用其它调试方式,本公开对此不做限定。通过对程序进行调试,可以确定异常变量,其中,异常变量是导致程序运行异常的变量。
42.步骤205、基于异常变量,修复程序。
43.在本实施例中,上述执行主体在确定异常变量后,可以基于异常变量,修复程序。可以基于异常变量的类型,相应的修改程序,通过运行修改后的程序可以得到预定的结果。异常变量的类型可以是语法类错误,行为类错误,例如崩溃异常,时间性能类错误,例如并发性能,空间性能类错误,例如内存性能,本公开对此不做限定。
44.本公开实施例提供的调试方法,首先响应于程序启动,创建数据表,然后在数据表中存储程序运行时的操作记录,然后响应于检测到程序运行异常,重新启动程序,接着基于数据表中的操作记录,运行并调试重新启动后的程序,确定异常变量,最后基于异常变量,修复程序。根据数据表还原程序运行异常前的所有操作,并对程序进行调试,可快速定位异常点,提高了调试效率。
45.进一步继续参考图3,其示出了根据本公开的调试方法的另一个实施例的流程300。该调试方法包括以下步骤:
46.步骤301、响应于程序启动,创建数据表。
47.在本实施例中,步骤301具体操作已在图2所示的实施例中步骤201进行了详细的介绍,在此不再赘述。
48.步骤302、基于程序运行时的操作步骤,生成对应的多条操作记录。
49.在本实施例中,上述执行主体可以基于程序运行时的操作步骤,生成对应的多条操作记录。在程序运行时,每执行一个需要记录的操作步骤,在数据库中生成一条操作记录,直至程序停止运行。若执行的操作步骤不需要记录,则不记录该操作步骤,其中,不需要记录的操作步骤可以是不影响复现操作过程的操作步骤,也可以是预先设定的不用执行的操作步骤。示例性的,若程序为3d(three dimensions,三维)渲染程序,可以预先设定,使用3d渲染程序加载模型之后,可以对模型进行缩放、旋转,但不能对模型进行移动,因此,当运行3d渲染程序时,不会将移动操作记录在数据库中。示例性的,当运行3d渲染程序时,首先打开3d渲染程序,若打开成功,则输出打开成功的提示信息,当再次运行3d渲染程序时,即使跳过输出提示信息的步骤,也不影响复现上一次运行时的操作过程,因此,当运行3d渲染程序时,不会将输出提示信息的步骤记录在数据库中。从程序开始运行到程序停止运行,在数据库中生成的所有操作记录构成对应的多条操作记录。每一条操作记录包括对应操作步骤的操作时间、操作标识、函数名称和关键变量。其中,操作时间是开始执行该操作步骤时的时间,操作标识是可以唯一确定该操作步骤的标识,函数名称是执行该操作步骤时调用的函数名称,关键变量是执行该操作步骤中的函数时,该函数中的关键变量。
50.步骤303、将多条操作记录存储到数据表中。
51.在本实施例中,上述执行主体在得到多条操作记录后,可以将多条操作记录存储到数据表中。具体地,可以基于数据库中的插入命令,按照操作记录对应的每一个操作步骤的执行顺序,依次将多条操作记录中的每一条操作记录插入到数据表中。通过生成并存储多条操作记录,全面记录了操作步骤的具体操作内容,便于基于多条操作记录还原操作过
程,快速定位异常点,提高了调试效率。
52.步骤304、响应于检测到程序运行异常,重新启动程序
53.在本实施例中,步骤304具体操作已在图2所示的实施例中步骤203进行了详细的介绍,在此不再赘述。
54.步骤305、确定操作回退步数。
55.在本实施例中,上述执行主体在重新启动程序后,可以确定操作回退步数。操作回退步数是从程序运行异常开始,设置的回退步数,当运行重新启动的程序时,只需执行操作回退步数内的操作步骤,示例性的,若程序在执行第8个操作步骤时出现异常,则重新启动程序,设置操作回退步数为3,运行重新启动的程序时,只需执行第6

第8个操作步骤。这样无需还原并调试程序异常前的所有操作步骤,只需还原并调试程序异常附近的操作步骤,可以快速定位异常变量,提高了调试效率。其中,操作回退步数小于等于程序运行异常前的所有操作步骤数。
56.步骤306、基于操作回退步数从多条操作记录中确定出待执行的操作记录。
57.在本实施例中,上述执行主体在确定操作回退步数后,可以从多条操作记录中确定出待执行的操作记录。其中,多条操作记录是在程序运行时,每执行一个需要记录的操作步骤,基于数据库中的插入命令在数据表中插入一条操作记录,直至程序运行异常,在数据表中插入的所有操作记录。在确定操作回退步数后,可确定操作回退步数内的操作步骤,进而可在多条操作记录中找出与操作回退步数内的操作步骤相对应的操作记录,将与操作回退步数内的操作步骤相对应的操作记录确定为待执行的操作记录。
58.步骤307、在待执行的操作记录中添加日志信息输出指令。
59.在本实施例中,上述执行主体在确定待执行的操作记录后,可在待执行的操作记录中添加日志信息输出指令。具体地,可在待执行的操作记录中的函数中添加日志信息输出指令,添加日志信息输出指令后,可输出添加位置的函数名称,以及函数运行到添加位置时函数中的关键变量值,以及输出指令中要求输出的其它内容。在本实施例中,通过在待执行的操作记录中添加日志信息输出指令,可以在还原程序异常前的操作的同时,不断地输出日志信息,基于日志信息可以快速定位异常变量,进一步提高了调试效率。
60.步骤308、基于待执行的操作记录和日志信息输出指令,运行重新启动后的程序并输出日志信息。
61.在本实施例中,上述执行主体可以基于待执行的操作记录和日志信息输出指令,运行重新启动后的程序并输出日志信息。具体地,可以基于待执行的操作记录运行重新启动后的程序,还原待执行的操作记录对应的操作步骤,同时,当程序运行到日志信息输出指令的添加位置时,可基于日志信息输出指令输出日志信息,日志信息中记录了程序运行到添加位置时所调用的函数名称,以及执行调用的函数产生的关键变量值。
62.步骤309、将待执行的操作记录中的函数名称和关键变量,与日志信息中的函数名称和关键变量进行比较,得到异常变量。
63.在本实施例中,上述执行主体可以将待执行的操作记录与日志信息进行比较,得到异常变量。将待执行的操作记录中的函数名称与日志信息中的函数名称进行比较,若函数名称相同,再比较与该函数名称对应的待执行的操作记录中的关键变量,与日志信息中的关键变量。若待执行的操作记录与日志信息中的关键变量有差异,则对差异信息进行分
析,得到异常变量。
64.步骤310、基于异常变量,修复程序。
65.在本实施例中,步骤310具体操作已在图2所示的实施例中步骤205进行了详细的介绍,在此不再赘述。
66.从图3中可以看出,与图2对应的实施例相比,本实施例中的调试方法通过设置操作回退步数及添加日志信息输出指令,进一步提高了调试效率。
67.进一步继续参考图4,其示出了根据本公开的调试方法的又一个实施例的流程400。该调试方法包括以下步骤:
68.步骤401、响应于程序启动,创建一个操作数据表和至少一个功能数据表。
69.在本实施例中,上述执行主体可以响应于程序启动,创建操作数据表和功能数据表。操作数据表和功能数据表都是临时保存数据的网络虚拟表,每个数据表都有一个名字标识,且包含带有列名的列和记录数据的行。操作数据表和功能数据表存储于数据库中,上述执行主体可以基于任意一种数据库创建操作数据表和功能数据表,本公开对此不做限定。具体地,可以基于数据库中的创建语句创建操作数据表和功能数据表。
70.在本实施例的一些可选方式中,上述执行主体可以根据需要存储的数据类型,创建一个操作数据表和至少一个功能数据表,以满足不同的存储需求。其中,至少一个功能数据表是将程序的每个功能建立一个功能数据表。当程序运行时,将需要记录的操作步骤的公共字段存储到一个操作数据表中,当执行每一个需要记录的操作步骤时,根据该操作步骤的功能,将表示该操作步骤功能的字段存储到对应的功能数据表中。示例性的,若程序为3d渲染程序,当程序启动时,如表1,创建一个操作数据表,示例性的,如表2,3d渲染程序有模型缩放功能,创建一个模型缩放功能数据表,如表3,3d渲染程序有模型渲染功能,创建一个模型渲染功能数据表,需要说明的是,3d渲染程序有多少个功能就创建多少个功能数据表,在本实施例中,只示范性的创建了模型缩放功能数据表和模型渲染功能数据表。如表1

表3所示,每一个数据表共有6列,第一行是该数据表的名字,第二行是字段属性介绍,从第三行往后每一行记录一个字段的具体内容。例如,将操作时间字段记录在操作数据表的第三行中,具体记录了操作时间字段的字段名称为operate_time,字段描述为操作时间,该字段在操作数据表中是主键,不是外键,该字段的类型是字符型,为非空字段。同样的,例如在模型缩放功能数据表中,在第三行中记录了执行模型缩放功能的函数名称字段,具体记录了函数名称字段的字段名称为operate_func1,字段描述为函数名称,该字段在模型缩放功能数据表中既不是主键,也不是外键,该字段的类型是字符型,为非空字段。由于不同的功能调用的函数不同,通过创建一个操作数据表和至少一个功能数据表的方式,可以使数据存储、查找、扩展更加便捷,提高了调试效率。
71.表1
[0072][0073]
表2
[0074][0075]
表3
[0076][0077]
步骤402、基于程序运行时的操作步骤,生成对应的多条操作记录。
[0078]
在本实施例中,步骤402具体操作已在图3所示的实施例中步骤302进行了详细的介绍,在此不再赘述。
[0079]
需要说明的是,操作记录中还包括功能标识,功能标识与功能数据表相对应,每种功能标识对应一个功能数据表。
[0080]
步骤403、将操作记录中的操作时间、操作标识和功能标识作为第一子操作记录,存储在操作数据表中。
[0081]
在本实施例中,上述执行主体在生成多条操作记录后,可以将多条操作记录中的操作时间、操作标识和功能标识作为第一子操作记录,存储在操作数据表中。具体地,可以根据操作记录对应的操作步骤的执行顺序,将每一条操作记录中的操作时间、操作标识和功能标识作为一组,按照执行顺序将每一组依次存储到操作数据表中,多条操作记录中的每一组构成第一子操作记录。
[0082]
步骤404、将操作记录中的操作标识、函数名称和关键变量作为第二子操作记录,存储在功能标识对应的功能数据表中。
[0083]
在本实施例中,上述执行主体在生成多条操作记录后,可以将多条操作记录中的操作标识、函数名称和关键变量作为第二子操作记录,存储在功能标识对应的功能数据表中。具体地,可以先根据每一条操作记录中的功能标识确定对应的功能数据表,然后将每一条操作记录中的操作标识、函数名称和关键变量作为一组,根据操作记录对应的操作步骤的执行顺序,将每一组依次存储到功能标识对应的功能数据表中,多条操作记录中的每一组构成第二子操作记录。
[0084]
步骤405、响应于检测到程序运行异常,重新启动程序。
[0085]
步骤406、基于数据表中的操作记录,运行并调试重新启动后的程序,确定异常变量。
[0086]
步骤407、基于异常变量,修复程序。
[0087]
在本实施例中,步骤405

407具体操作已在图2所示的实施例中步骤203

205进行了详细的介绍,在此不再赘述。
[0088]
从图4中可以看出,与图2对应的实施例相比,本实施例中调试方法将数据表分为一个操作数据表和至少一个功能数据表,并将操作记录存储到一个操作数据表和至少一个功能数据表中,使数据表的应用更加灵活,进一步提高了调试效率。
[0089]
进一步继续参考图5,其示出了根据本公开的基于操作回退步数从多条操作记录中确定出待执行的操作记录的一个实施例的流程500。该从多条操作记录中确定出待执行
的操作记录方法包括以下步骤:
[0090]
步骤501、基于操作回退步数,从操作数据表中确定出待执行的第一子操作记录。
[0091]
在本实施例中,上述执行主体可以基于操作回退步数确定出待执行的第一子操作记录。基于操作回退步数,可以确定操作回退步数内的操作步骤,进而可以确定与操作回退步数内的操作步骤相对应的操作记录,在操作数据表中确定出对应的操作记录中的操作时间、操作标识和功能标识,作为待执行的第一子操作记录。
[0092]
步骤502、基于待执行的第一子操作记录中的功能标识,从至少一个功能数据表中确定出目标功能数据表。
[0093]
在本实施例中,上述执行主体确定出待执行的第一子操作记录后,可以确定目标功能数据表。功能标识与功能数据表相对应,每种功能标识对应一个功能数据表,且每个功能数据表都由一个名字标识。在确定出待执行的第一子操作记录后,基于待执行的第一子操作记录中的功能标识,在至少一个功能数据表中搜索出功能数据表的名字与功能标识相同的功能数据表,作为目标功能数据表。
[0094]
步骤503、基于待执行的第一子操作记录中的操作标识,从目标功能数据表中确定出待执行的第二子操作记录。
[0095]
在本实施例中,上述执行主体在确定目标功能数据表后,可以从目标功能数据表中确定出待执行的第二子操作记录。将待执行的第一子操作记录中的操作标识,与目标功能数据表中的操作标识进行匹配,找出目标功能数据表中操作标识相同的每一组,将每一组中的操作标识、函数名称和关键变量确定为待执行的第二子操作记录。
[0096]
步骤504、基于操作标识,将待执行的第一子操作记录和对应的待执行的第二子操作记录确定为待执行的操作记录。
[0097]
在本实施例中,上述执行主体将待执行的第一子操作记录和待执行的第二子操作记录确定为待执行的操作记录。其中,操作标识相同的第一子操作记录中的一组数据与第二子操作记录中的一组数据为对应的一条待执行的操作记录。
[0098]
从图5中可以看出,与图3对应的实施例相比,本实施例中的调试方法基于操作回退步数、第一子操作记录和第二子操作记录来确定待执行的操作记录,使操作记录的应用更加方便快捷,进一步提高了调试效率。
[0099]
进一步继续参考图6,其示出了根据本公开的基于待执行的操作记录和日志信息输出指令,运行重新启动后的程序并输出日志信息的一个实施例的流程600。该运行重新启动后的程序并输出日志信息方法包括以下步骤:
[0100]
步骤601、基于待执行的操作记录中的函数名称和关键变量,确定待运行的目标操作步骤。
[0101]
在本实施例中,上述执行主体可以基于待执行的操作记录,确定待运行的目标操作步骤。每一条操作记录对应一个操作步骤,记录了一个操作步骤的函数名称和关键变量。当再次运行程序时,可基于一条操作记录中的函数名称重新调用该函数,还原操作记录对应的操作步骤。因此基于待执行的操作记录中的函数名称可确定待运行的目标操作步骤,待执行的操作记录中的关键变量可作为参考,当重新运行该目标操作步骤时,与重新运行产生的关键变量进行比较分析。
[0102]
步骤602、基于待执行的操作记录中的操作时间,得到目标操作步骤的执行顺序。
[0103]
在本实施例中,上述执行主体可基于待执行的操作记录确定目标操作步骤的执行顺序。每一条操作记录对应一个操作步骤,记录了执行一个操作步骤时的操作时间。因此,基于待执行的操作记录中的操作时间,可确定目标操作步骤的执行先后顺序。
[0104]
步骤603、基于日志信息输出指令在待执行的操作记录中的添加位置,确定输出日志信息的时间节点。
[0105]
在本实施例中,上述执行主体可基于日志信息输出指令的添加位置,确定输出日志信息的时间节点。基于日志信息输出指令在待执行的操作记录中的添加位置,可确定日志信息输出指令具体添加在哪一条待执行的操作记录中,基于该条待执行的操作记录中的操作时间与所有待执行的操作记录中的操作时间,可确定在执行目标操作步骤时,输出日志信息的时间节点是在执行该条待执行的操作记录的操作时间,与执行与该条待执行的操作记录对应的下一条待执行的操作记录的操作时间之间。
[0106]
步骤604、运行重新启动后的程序,按照执行顺序依次执行目标操作步骤,并基于时间节点输出日志信息。
[0107]
在本实施例中,上述执行主体在重新启动程序后,按照目标操作步骤的执行先后顺序,依次执行每一个目标操作步骤,同时,当程序运行到输出日志信息的时间节点时,输出日志信息。
[0108]
从图6中可以看出,与图3对应的实施例相比,本实施例中的调试方法通过确定目标操作步骤的执行顺序与输出日志信息的时间节点,按照时间先后顺序依次执行目标操作步骤并输出日志信息,有序进行调试,提高了调试效率。
[0109]
进一步参考图7,其示出了根据本公开的跨平台调试方法的一个实施例的流程700。该跨平台调试方法包括以下步骤:
[0110]
步骤701、响应于程序在第一平台运行,创建第一数据表,将程序在第一平台运行时的操作记录存储到第一数据表中。
[0111]
在本实施例中,该方法可以应用于图2~图6的调试方法中,进行跨平台调试。上述执行主体响应于程序在第一平台运行,创建第一数据表。其中,第一数据表是一个临时保存数据的网络虚拟表,由一个名字标识,且包含带有列名的列和记录数据的行。第一数据表存储于与第一平台对应的数据库中,上述执行主体可以基于任意一种数据库创建第一数据表,本公开对此不做限定。当程序在第一平台运行时,每执行一个操作步骤,基于数据库中的插入命令在第一数据表中插入一条操作记录。
[0112]
步骤702、响应于程序在第一平台运行时发生异常,在第二平台加载第一数据表,创建第二数据表。
[0113]
在本实施例中,上述执行主体可以在检测到程序在第一平台运行时发生异常,在第二平台加载第一数据表,创建第二数据表。检测到程序在第一平台运行时发生异常的表现可以是程序在第一平台运行时无响应、终端设备死机蓝屏,本公开对此不做限定。在第二平台加载第一数据表是在第二平台上打开程序,将第一数据表复制到第二平台,同时,在第二平台上创建第二数据表,第二数据表存储于与第二平台对应的数据库中,上述执行主体可以基于任意一种数据库创建第二数据表,本公开对此不做限定。
[0114]
步骤703、基于第一数据表中的操作记录,在第二平台运行程序,将程序在第二平台运行时的操作记录存储到第二数据表中。
[0115]
在本实施例中,上述执行主体在第二平台读取第一数据表中的操作记录,基于第一数据表中的操作记录中的函数名称,调用并执行相同的函数,在第二平台运行程序。同时,在第二平台上每执行一个操作步骤,基于数据库中的插入命令在第二数据表中插入一条操作记录。
[0116]
步骤704、将第一数据表与第二数据表进行比较,确定异常变量。
[0117]
在本实施例中,上述执行主体可以将第一数据表中的操作记录与第二数据表中的操作记录进行比较,比较操作记录对应的操作步骤中的函数名称和关键变量,若同一函数名称对应的关键变量不同,则进行分析,确定出异常变量,其中,异常变量是导致程序运行异常的变量。
[0118]
步骤705、基于异常变量,在第一平台上调试并修复程序。
[0119]
在本实施例中,上述执行主体在确定异常变量后,可以在第一平台上调试并修复程序。可以基于异常变量的类型,相应的修改程序,并在第一平台上对修改的程序进行调试,得到修复后的程序,其中,调试可以采用对程序进行断点调试的方式,也可以采用其它调试方式,本公开对此不做限定。再次在第一平台上运行修复后的程序,可得到与修复后的程序对应的预定结果,且运行过程中不再出现异常。
[0120]
从图7中可以看出,本实施例中的跨平台调试方法可以基于数据表实现跨平台调试,且通过比较程序在不同平台上的执行差异,可快速确定异常点,提高了跨平台调试的效率。
[0121]
进一步参考图8,作为对上述调试方法的实现,本公开提供了一种调试装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
[0122]
如图8所示,本实施例的调试装置800可以包括创建模块801,存储模块802,重启模块803,调试模块804,修复模块805。其中,创建模块801,被配置为响应于程序启动,创建数据表;存储模块802,被配置为在数据表中存储程序运行时的操作记录;重启模块803,被配置为响应于检测到程序运行异常,重新启动程序;调试模块804,被配置为基于数据表中的操作记录,运行并调试重新启动后的程序,确定异常变量;修复模块805,被配置为基于异常变量,修复程序。
[0123]
在本实施例中,调试装置800:创建模块801,存储模块802,重启模块803,调试模块804和修复模块805的具体处理及其所带来的技术效果可分别参考图2对应实施例中的步骤201

205的相关说明,在此不再赘述。
[0124]
在本实施例的一些可选实现方式中,存储模块802包括:生成子模块,被配置为基于程序运行时的操作步骤,生成对应的多条操作记录,其中,操作记录包括操作时间、操作标识、函数名称和关键变量;存储操作记录子模块,被配置为将多条操作记录存储到数据表中。
[0125]
在本实施例的一些可选实现方式中,调试模块804包括:第一确定子模块,被配置为确定操作回退步数,操作回退步数小于等于程序运行异常前的操作步骤数;第二确定子模块,被配置为基于操作回退步数从多条操作记录中确定出待执行的操作记录;添加子模块,被配置为在待执行的操作记录中添加日志信息输出指令;运行子模块,被配置为基于待执行的操作记录和日志信息输出指令,运行重新启动后的程序并输出日志信息,日志信息
包括运行重新启动后的程序产生的函数名称和关键变量;比较子模块,被配置为将待执行的操作记录中的函数名称和关键变量,与日志信息中的函数名称和关键变量进行比较,得到异常变量。
[0126]
在本实施例的一些可选实现方式中,数据表包括一个操作数据表和至少一个功能数据表,操作记录还包括功能标识;存储操作记录子模块包括:第一存储单元,被配置为将操作记录中的操作时间、操作标识和功能标识作为第一子操作记录,存储在操作数据表中;第二存储单元,被配置为将操作记录中的操作标识、函数名称和关键变量作为第二子操作记录,存储在功能标识对应的功能数据表中。
[0127]
在本实施例的一些可选实现方式中,第二确定子模块包括:第一确定单元,被配置为基于操作回退步数,从操作数据表中确定出待执行的第一子操作记录;第二确定单元,被配置为基于待执行的第一子操作记录中的功能标识,从至少一个功能数据表中确定出目标功能数据表;第三确定单元,被配置为基于待执行的第一子操作记录中的操作标识,从目标功能数据表中确定出待执行的第二子操作记录;第四确定单元,被配置为基于操作标识,将待执行的第一子操作记录和对应的待执行的第二子操作记录确定为待执行的操作记录。
[0128]
在本实施例的一些可选实现方式中,运行子模块包括:第五确定单元,被配置为基于待执行的操作记录中的函数名称和关键变量,确定待运行的目标操作步骤;第六确定单元,被配置为基于待执行的操作记录中的操作时间,得到目标操作步骤的执行顺序;第七确定单元,被配置为基于日志信息输出指令在待执行的操作记录中的添加位置,确定输出日志信息的时间节点;输出单元,被配置为运行重新启动后的程序,按照执行顺序依次执行目标操作步骤,并基于时间节点输出日志信息。
[0129]
进一步参考图9,作为对上述调试的实现,本公开提供了一种跨平台调试装置的一个实施例,该装置实施例与图7所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
[0130]
如图9所示,本实施例的跨平台调试装置900可以包括第一运行模块901,运行异常模块902,第二运行模块903,比较模块904,调试修复模块905。其中,第一运行模块901,被配置为响应于程序在第一平台运行,创建第一数据表,将程序在第一平台运行时的操作记录存储到第一数据表中;运行异常模块902,被配置为响应于程序在第一平台运行时发生异常,在第二平台加载第一数据表,创建第二数据表;第二运行模块903,被配置为基于第一数据表中的操作记录,在第二平台运行程序,将程序在第二平台运行时的操作记录存储到第二数据表中;比较模块904,被配置为将第一数据表与第二数据表进行比较,确定异常变量;调试修复模块905,被配置为基于异常变量,在第一平台上调试并修复程序。
[0131]
在本实施例中,跨平台调试装置900:第一运行模块901,运行异常模块902,第二运行模块903,比较模块904和调试修复模块905的具体处理及其所带来的技术效果可分别参考图7对应实施例中的步骤701

705的相关说明,在此不再赘述。
[0132]
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
[0133]
图10示出了可以用来实施本公开的实施例的示例电子设备1000的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各
种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0134]
如图10所示,设备1000包括计算单元1001,其可以根据存储在只读存储器(rom)1002中的计算机程序或者从存储单元1008加载到随机访问存储器(ram)1003中的计算机程序,来执行各种适当的动作和处理。在ram 1003中,还可存储设备1000操作所需的各种程序和数据。计算单元1001、rom 1002以及ram 1003通过总线1004彼此相连。输入/输出(i/o)接口1005也连接至总线1004。
[0135]
设备1000中的多个部件连接至i/o接口1005,包括:输入单元1006,例如键盘、鼠标等;输出单元1007,例如各种类型的显示器、扬声器等;存储单元1008,例如磁盘、光盘等;以及通信单元1009,例如网卡、调制解调器、无线通信收发机等。通信单元1009允许设备1000通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0136]
计算单元1001可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1001的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元1001执行上文所描述的各个方法和处理,例如调试方法或跨平台调试方法。例如,在一些实施例中,调试方法或跨平台调试方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1008。在一些实施例中,计算机程序的部分或者全部可以经由rom 1002和/或通信单元1009而被载入和/或安装到设备1000上。当计算机程序加载到ram 1003并由计算单元1001执行时,可以执行上文描述的调试方法或跨平台调试方法的一个或多个步骤。备选地,在其他实施例中,计算单元1001可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行调试方法或跨平台调试方法。
[0137]
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0138]
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0139]
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电
子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd

rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0140]
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0141]
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
[0142]
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端

服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以为分布式系统的服务器,或者是结合了区块链的服务器。服务器也可以是云服务器,或者是带人工智能技术的智能云计算服务器或智能云主机。服务器可以为分布式系统的服务器,或者是结合了区块链的服务器。服务器也可以是云服务器,或者是带人工智能技术的智能云计算服务器或智能云主机。
[0143]
本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
[0144]
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
[0145]
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献