一种编程调试方法、装置及相关产品
技术领域
本发明涉及计算机技术领域,尤其涉及一种编程调试方法、装置及相关产品。
背景技术
传统技术中,当在开发芯片如人工智能芯片之后,需要将现有的某算法移植到该芯片,并在该芯片上运行该算法以及在该芯片上对算法进行调试,但是在该芯片不支持打印或者debug工具时,则在算法移植过程中将面临难以调试的问题。因此,如何解决人工智能芯片编程调试困难的问题将成为热点。
发明内容
本申请实施例提供一种编程调试方法、装置及相关产品,能够快捷的实现调试。
本申请实施例的第一方面提供了一种编程调试方法,包括:
获取芯片的待调试代码;
调用预设模拟库的等价程序对所述待调试代码进行编译及调试,得到目标代码,其中,所述预设模拟库至少包括与所述芯片的待调试代码对应的等价程序;
对所述目标代码进行编译,得到适用所述芯片的可执行文件。
在一个可选实施例中,所述调用预设模拟库的等价程序对所述待调试代码进行编译及调试,得到目标代码,包括:
调用所述预设模拟库的等价程序对所述待调试代码进行编译,得到中间可执行程序;
运行所述中间可执行程序,获得所述中间可执行程序的运行结果;
若所述中间可执行程序的运行结果符合预设条件,则将符合预设条件的所述中间可执行程序对应的待调试代码作为所述目标代码。
在一个可选实施例中,所述方法还包括:
若所述中间可执行程序的运行结果不符合所述预设条件,则对所述待调试代码进行调试,之后返回执行所述调用所述预设模拟库的等价程序对所述待调试代码进行编译,得到中间可执行程序。
在一个可选实施例中,所述中间可执行程序包括第一中间可执行程序,所述预设条件包括第一预设条件,所述若所述中间可执行程序的运行结果不符合所述预设条件,则对所述待调试代码进行调试,包括:
获取所述第一中间可执行程序的运行结果;
确认所述第一中间可执行程序的运行结果是否符合所述第一预设条件;
若所述第一中间可执行程序的运行结果不符合所述第一预设条件,则根据所述第一中间可执行程序的运行结果,对所述待调试代码进行调试。
在一个可选实施例中,所述中间可执行程序还包括第二中间可执行程序,所述若所述中间可执行程序的运行结果不符合所述预设条件,则对所述待调试代码进行调试,还包括:
若所述第一中间可执行程序的运行结果符合所述第一预设条件,则获取所述第二中间可执行程序的运行结果;
获取所述第一中间可执行程序和第二中间可执行程序的运行结果之间的误差值;
若所述误差值大于预设误差值,则对所述待调试代码进行调试。
在一个可选实施例中,所述若所述误差值大于预设误差值,则对所述待调试代码进行调试,包括:
若所述误差值大于预设误差值,通过预设的精度补偿算法对所述待调试代码进行调试。
进一步,所述方法还包括:
若所述第一中间可执行程序的运行结果符合所述第一预设条件,且所述误差值小于或等于所述预设误差值,则确定所述中间可执行程序符合所述预设条件。
本申请实施例的第二方面提供了一种编程调试装置,包括:
获取模块,用于获取芯片的待调试代码;
调试模块,用于调用预设模拟库的等价程序对所述待调试代码进行编译及调试,得到目标代码,其中,所述预设模拟库至少包括与所述芯片的待调试代码对应的等价程序;
编译模块,用于对所述目标代码进行编译,得到适用所述芯片的可执行文件。
在一个可选实施例中,所述调试模块用于执行:
调用所述预设模拟库的等价程序对所述待调试代码进行编译,得到中间可执行程序;
运行所述中间可执行程序,获得所述中间可执行程序的运行结果;
若所述中间可执行程序的运行结果符合预设条件,则将符合预设条件的所述中间可执行程序对应的待调试代码作为所述目标代码。
在一个可选实施例中,所述调试模块还用于执行:
若所述中间可执行程序的运行结果不符合所述预设条件,则对所述待调试代码进行调试,之后返回执行所述调用所述预设模拟库的等价程序对所述待调试代码进行编译,得到中间可执行程序。
在一个可选实施例中,所述中间可执行程序包括第一中间可执行程序,所述预设条件包括第一预设条件,所述调试模块还用于执行:
获取所述第一中间可执行程序的运行结果;
确认所述第一中间可执行程序的运行结果是否符合所述第一预设条件;
若所述第一中间可执行程序的运行结果不符合所述第一预设条件,则根据所述第一中间可执行程序的运行结果,对所述待调试代码进行调试。
在一个可选实施例中,所述中间可执行程序还包括第二中间可执行程序,所述调试模块还用于执行:
若所述第一中间可执行程序的运行结果符合所述第一预设条件,则获取所述第二中间可执行程序的运行结果;
获取所述第一中间可执行程序和第二中间可执行程序的运行结果之间的误差值;
若所述误差值大于预设误差值,则对所述待调试代码进行调试。
在一个可选实施例中,所述调试模块还用于执行:
若所述误差值大于预设误差值,通过预设的精度补偿算法对所述待调试代码进行调试。
在一个可选实施例中,所述调试模块还用于执行:
若所述第一中间可执行程序的运行结果符合所述第一预设条件,且所述误差值小于或等于所述预设误差值,则确定所述中间可执行程序符合所述预设条件。
本申请实施例的第三方面提供了一种计算机设备,包括存储器和处理器,所述存储器上存储有可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现所述方法的步骤。
本申请实施例的第四方面提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述方法的步骤。
实施本申请实施例,至少具有如下有益效果:
通过本申请实施例,通过调用预设模拟库的等价程序对待调试代码进行编译及调试,得到目标代码,通过对目标代码进行编译,进而得到适用芯片的可执行文件。采用该手段,通过在可调试环境下设立与芯片相对应的预设模拟库,然后对待调试代码进行编译及调试,当在该可调试环境下调试成功后,则将对应目标代码编译的可执行文件发送给所述芯片。其解决了芯片编程难以调试的问题,同时获得了高效率调试的效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
其中:
图1为本发明实施例提供的一种编程调试方法的流程示意图;
图2是本发明实施例提供的另一种编程调试方法的流程示意图;
图3是本发明实施例提供的另一种编程调试方法的流程示意图;
图4是本发明实施例提供的再一种编程调试方法的流程示意图;
图5是本发明实施例提供的一种终端的结构示意图;
图6是本发明实施例提供的一种编程调试装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
在本申请中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本申请所描述的实施例可以与其它实施例相结合。
传统技术中,当需要对人工智能芯片上运行的程序进行调试时,往往需要对该程序进行编译获得可执行文件,并通过人工智能芯片运行该可执行文件,从而可以在人工智能芯片运行该可执行文件的过程中,实现对该程序的调试。但由于人工智能芯片等非通用硬件芯片可能不支持打印和debug工具,从而使得在硬件上直接对程序进行调试的工作量较大。为此本方案提出使用通用处理器(如CPU)模拟人工智能芯片的调试过程。此技术是基于通用处理器对人工智能芯片的功能模拟,在通用处理器上实现与人工智能芯片上的程序具有相同功能的函数或程序,从而可以利用通用处理器的调试手段调试该人工智能芯片上运行的程序,并在该程序调试成功后再将该程序发送到人工智能芯片上运行,从而简化了非通用芯片上程序的调试过程。
请参阅图1,图1为本申请实施例提供了一种编程调试方法的流程示意图。如图1所示,其可包括步骤101-103,具体如下:
101、通用处理器获取芯片的待调试代码。
可选地,该芯片可以为非通用的芯片,如可以为人工智能处理器,也可以为图形处理单元GPU(Graphics Processing Unit,简称:GPU),或其他类似的专用处理器;
可选地,该通用处理器可以是中央处理单元CPU(Central Processing Unit,简称:CPU),通用处理器可以用来获取该非通用芯片的待调试代码。
102、所述通用处理器调用预设模拟库的等价程序对所述待调试代码进行编译及调试,得到目标代码,其中,所述预设模拟库至少包括与所述芯片的待调试代码对应的等价程序。
其中,该预设模拟库可以仅包括该芯片的待调试代码对应的等价程序,该预设模拟库也可以包括与该芯片的所有程序对应的等价程序。该等价程序可以是对非通用芯片上运行的程序的功能进行模拟的,能够在通用处理器上运行的程序,例如,该等价程序可以是使用C++等程序语言实现在通用处理器上实现与非通用芯片上程序的功能一致的函数或程序,从而达到模拟芯片运行的效果。
通用处理器通过在获取到所述待调试代码之后,则根据所述预设模拟库的等价程序对所述待调试代码进行编译,并通过不断调试进而得到调试成功的目标代码。
103、通用处理器对所述目标代码进行编译,得到适用所述芯片的可执行文件。
通用处理器将所述目标代码进行编译,得到适用所述芯片的可执行文件,以便所述芯片能够运行所述可执行文件。
通过本申请实施例,通用处理器通过调用预设模拟库的等价程序对待调试代码进行编译及调试,得到目标代码,通过对目标代码进行编译进而得到适用芯片的可执行文件。采用该手段,通过在可调试环境下设立与芯片相对应的预设模拟库,然后对待调试代码进行编译及调试,当在该可调试环境下调试成功后,则将对应目标代码编译的可执行文件发送给所述芯片。本申请实施例中的方法,无需在非通用芯片上实现对相应程序的调试过程,而是将调试成功的程序编译后直接发送到非通用芯片进行运行,其解决了芯片编程难以调试的问题,同时实现了高效率调试的效果。
请参阅图2,图2为本申请实施例提供了另一种编程调试方法的流程示意图。如图2所示,其可包括步骤201-205,具体如下:
201、通用处理器获取芯片的待调试代码;
202、通用处理器调用所述预设模拟库的等价程序对所述待调试代码进行编译,得到中间可执行程序;
203、通用处理器运行所述中间可执行程序,获得所述中间可执行程序的运行结果;
204、若所述中间可执行程序的运行结果符合预设条件,则通用处理器将所述待调试代码作为目标代码;
其中,该预设条件可以是该中间可执行程序的运行结果成功,或者该中间可执行程序的运行结果达到特定的条件等。
205、通用处理器对所述目标代码进行编译得到适用所述芯片的可执行文件。
进一步可选地,若所述中间可执行程序的运行结果不符合预设条件,则对所述待调试代码进行调试,之后返回步骤202,重复执行步骤202-205,直至获得目标代码。
通过本申请实施例,通用处理器通过调用预设模拟库的等价程序对待调试代码进行编译得到中间可执行程序,通过对中间可执行程序进行调试进而得到所述目标代码。采用该手段,通过调用预设模拟库对待调试代码进行编译,得到中间可执行程序,当中间可执行程序运行成功后,则将待调试代码作为目标代码。其解决了芯片编程难以调试的问题,同时实现了高效率调试的效果。
请参阅图3,图3为本申请实施例提供了另一种编程调试方法的流程示意图。如图3所示,其可包括步骤301-307,具体如下:
301、通用处理器获取芯片的待调试代码。
302、通用处理器调用所述预设模拟库的等价程序对所述待调试代码进行编译,得到中间可执行程序;
在通用处理器上建立有预设模拟库,该预设模拟库可以仅包括所述芯片的待调试代码对应的等价程序,该预设模拟库也可以包括与所述芯片的所有程序对应的等价程序。
303、通用处理器运行所述中间可执行程序,获得所述中间可执行程序的运行结果。
304、确认所述中间可执行程序的运行结果是否符合预设条件;
其中,该预设条件可以是该中间可执行程序的运行结果成功,或者该中间可执行程序的运行结果达到特定的条件等。
305、若不符合,即中间可执行程序的运行结果不符合预设条件,则所述通用处理器对所述待调试代码进行调试,之后返回执行步骤302。
若所述中间可执行程序的运行结果不符合预设条件,则对所述待调试代码进行调试。可选地,所述中间可执行程序可包括第一中间可执行程序,所述预设条件包括第一预设条件,上述步骤305具体包括:
A11、通用处理器获取所述第一中间可执行程序的运行结果;
其中,所述第一中间可执行程序为所述待调试代码编译得到的第一版本代码,第一中间可执行程序的数据类型与所述通用处理器的数据类型相同,该第一版本代码可以是数据类型为float的、能够在通用处理器上执行的程序代码。如当通用处理器为CPU时,由于CPU上程序的数据类型通常为float,则当第一中间可执行程序的数据类型也为float,则可以确定该待调试代码是否存在算法逻辑错误。由于第一中间可执行程序的数据类型与CPU上程序的数据类型一致,若待调试代码中不存在算法逻辑错误,则第一中间可执行程序的运行结果应当是正确的。若第一中间可执行程序的运行结果不正确,则可以确定该待调试代码中存在算法逻辑错误。
本申请实施例中,在确保数据类型一致的情况下,进行算法正确性的验证,可避免运行结果不符合预设条件是因为数据类型不同的问题所造成的,进而可高效的发现运行结果不符合预设条件的原因,便于进行调试。
A12、通用处理器确认所述第一中间可执行程序的运行结果是否符合所述第一预设条件;
所述第一预设条件可以是该第一中间可执行程序的运行结果正确,如待调试代码可能是该芯片上特有的、用于实现特定算法的程序,此时可以通过不断地对该待调试代码进行调试,直至该第一中间可执行程序的运行结果正确。该第一中间可执行程序的正确的运行结果可以是预先存储于通用处理器中的。
或者,该第一中间可执行程序的运行结果与采用通用处理器自身的程序进行运行得到的结果相同。如该待调试代码对应的算法程序与通用处理器上原有的算法程序的功能一致,则可以直接将该通用处理器上的程序转换成适用于在非通用芯片上执行的待调试代码。此时,由于该待调试代码是由通用处理器上具有相同功能的程序转换而来,则通过比较第一中间可执行程序的运行结果与通用处理器上具有相同功能的源代码的运行结果是否一致,以确认第一中间可执行程序的运行结果是否符合第一预设条件。具体地,当第一中间可执行程序的运行结果与通用处理器上具有相同功能的源代码的运行结果一致时,确认第一中间可执行程序的运行结果符合第一预设条件。
A13、若所述第一中间可执行程序的运行结果不符合所述第一预设条件,则根据所述第一中间可执行程序的运行结果,对所述待调试代码进行调试。
306、若符合,则将符合预设条件的第一中间可执行程序对应的所述待调试代码作为目标代码;
307、对所述目标代码进行编译得到适用所述芯片的可执行文件。
通过本申请实施例,当中间可执行程序的运行结果不符合预设条件时,则通过获取第一中间可执行程序的运行结果,当第一中间可执行程序的运行结果不符合第一预设条件时,则根据第一中间可执行程序的运行结果,对待调试代码进行调试。采用该手段,通过根据待调试代码编译得到的第一中间可执行程序的运行结果进行待调试代码的调试,使得在达到数据类型一致的前提下,明确待调试代码的算法的正确性。其解决了芯片编程难以调试的问题,同时实现了高效率调试的效果。
进一步,由于一些芯片支持的数据类型与如通用处理器的数据类型不一致,比如,有些人工智能芯片仅支持half数据类型的运算,由于其与CPU的数据类型float不同,因此可能会有精度损失。在将算法从CPU程序转换到人工智能处理器上执行的程序时,往往不容易定位是因为转换过程中存在算法逻辑出错,还是因为精度损失导致的误差。为此,可在确保算法正确的情况下对精度误差进行调试。具体如下:
请参阅图4,图4为本申请实施例提供了另一种编程调试方法的流程示意图。如图4所示,其可包括步骤401-411,具体如下:
401、通用处理器获取芯片的待调试代码;
402、所述通用处理器调用所述预设模拟库的等价程序对所述待调试代码进行编译,得到中间可执行程序;
403、所述通用处理器运行所述中间可执行程序,获得所述中间可执行程序的运行结果;
404、若所述中间可执行程序的运行结果不符合预设条件,获取第一中间可执行程序的运行结果;
405、通用处理器确认所述第一中间可执行程序的运行结果符合所述第一预设条件;
406、若第一中间可执行程序的运行结果符合第一预设条件,则通用处理器可以获取第二中间可执行程序的运行结果;
其中,所述中间可执行程序还包括第二中间可执行程序,所述第二中间可执行程序可以为所述待调试代码编译得到的第二版本代码,如可以是half版本的代码,其中,第二中间可执行程序的数据类型与所述芯片的适用代码数据类型相同,且第二中间可执行程序的数据类型不同于所述第一中间可执行程序的数据类型精度。该步骤是在明确算法正确的基础上,对因为代码数据类型不一致而造成的代码错误进行确认,便于实现快速对代码进行调试。
407、通用处理器获取所述第一中间可执行程序和第二中间可执行程序的运行结果之间的误差值;
可选地,通过获取所述第一中间可执行程序和第二中间可执行程序的运行结果,并计算两者之间的MSE(均方误差)。当然,此处的误差值还可以采用其他计算方式获得,并不限于均方误差。
可选地,其中的误差可能主要来源于累加损失或者溢出(half最大值为65536),如溢出可能导致误差,由于half类型数据累加(half类型数量级超过3,则不能做加法,如1000+0.05=1000),容易因为精度误差导致计算结果出错。再如,在累加运算中,常见的为大数吃小数的情况,比如1000+0.05=1000。half数据本身的表示精度随着数值的增大而降低,如大于1024的half数据,其最小精度为1,完全失去了小数部分。
408、通用处理器确认所述误差值是否大于预设误差值;
409、若所述误差值大于预设误差值,则通用处理器对所述待调试代码进行调试,之后返回执行步骤402;直到所述中间可执行程序的运行结果符合预设条件。
可选地,预设误差值MSE可为不大于5%等;当然,该预设误差值还可以为其他值,此处仅用于举例说明,并不用于限定本申请的范围。
进一步可选地,当所述误差值大于预设误差值时,通过预设的精度补偿算法对所述待调试代码进行调试。其中,基于累加导致的精度损失,可以采用如下精度补偿算法实现:
1、累加计算补偿:通过将数字分组求和,避免相加数之间差距过大,可以有效避免出现大数吃小数的情况;
2、采用Kahan方法计算累加:
Kahan求和为:保存较大数与较小数相加过程中,较小数丢失的有效数字,然后将丢失的有效数字一次补偿到求和结果中。
具体地,当弥补累加导致的精度损失时,可以采用如下算法对代码进行调试,具体如下:
A、获取所述待调试代码中涉及精度的代码段;
例如,所述涉及精度的代码可以为有可能涉及累加运算的代码段;
B、确认所述代码段是否为累加损失代码;
若是,所述通用处理器将所述代码段修改为至少两个数字进行分组并求和的代码,和/或,所述通用处理器将所述代码段修改为采用Kahan方法进行累加的代码,其中,所述修改后的至少两个数字之间的差距满足预设值。
进一步地,基于溢出导致的精度损失,可以采用预设的补偿算法对待调试代码进行调试。
410、若所述误差值不大于预设误差值,则所述中间可执行程序的运行结果符合预设条件,则将所述中间可执行程序作为目标代码。
411、通用处理器对所述目标代码进行编译得到适用所述芯片的可执行文件。
当所述第一中间可执行程序的运行结果符合所述第一预设条件,且所述误差值小于或等于所述预设误差值,则确定所述中间可执行程序符合所述预设条件;则将所述中间可执行程序作为目标代码,并对所述目标代码进行编译得到适用所述芯片的可执行文件。
通过本申请实施例,当中间可执行程序的运行结果不符合预设条件时,则通过获取第一中间可执行程序的运行结果,在确认第一中间可执行程序的运行结果符合第一预设条件后,获取第一中间可执行程序和第二中间可执行程序的运行结果之间的误差值,当误差值大于预设误差值,则对所述待调试代码进行数据类型的精度补偿调试,直到误差值不大于所述预设误差值。采用该手段,通过在确认第一中间可执行程序的运行结果符合第一预设条件的情况下,获取第一中间可执行程序和第二中间可执行程序的运行结果之间的误差值,进行待调试代码的精度补偿调试,使得在达到代码算法正确的前提下,进行数据类型不一致而带来的误差的消减。其解决了芯片难以调试的问题,同时实现了高效率调试的效果,可快速定位到待调试代码出现的问题。
与上述实施例一致的,请参阅图5,图5为本申请实施例提供的一种终端的结构示意图,如图所示,包括处理器、输入设备、输出设备和存储器,所述处理器、输入设备、输出设备和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,上述程序包括用于执行以下步骤的指令;
获取芯片的待调试代码;
调用预设模拟库的等价程序对所述待调试代码进行编译及调试,得到目标代码,其中,所述预设模拟库至少包括与所述芯片的待调试代码对应的等价程序;
对所述目标代码进行编译得到适用所述芯片的可执行文件。
通过本申请实施例,通过调用预设模拟库的等价程序对待调试代码进行编译及调试,得到目标代码,通过对目标代码进行编译进而得到适用芯片的可执行文件。采用该手段,通过在可调试环境下设立与芯片相对应的预设模拟库,然后对待调试代码进行编译及调试,当在该可调试环境下调试成功后,则将对应目标代码编译的可执行文件发送给所述芯片。其解决了芯片难以调试的问题,同时实现了高效率调试的效果。
上述主要从方法侧执行过程的角度对本申请实施例的方案进行了介绍。可以理解的是,终端为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所提供的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对终端进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
与上述一致的,请参阅图6,图6为本申请实施例提供了一种编程调试装置的结构示意图。其包括获取模块601、调试模块602、编译模块603,具体如下:
获取模块601,用于获取芯片的待调试代码;
调试模块602,用于调用预设模拟库的等价程序对所述待调试代码进行编译及调试,得到目标代码,其中,所述预设模拟库至少包括与所述芯片的待调试代码对应的等价程序;
编译模块603,用于对所述目标代码进行编译,得到适用所述芯片的可执行文件。
进一步,所述调试模块602还用于执行:
调用所述预设模拟库的等价程序对所述待调试代码进行编译,得到中间可执行程序;
运行所述中间可执行程序,获得所述中间可执行程序的运行结果;
若所述中间可执行程序的运行结果符合预设条件,则将符合预设条件的所述中间可执行程序对应的待调试代码作为所述目标代码。
进一步,所述调试模块602还用于执行:
若所述中间可执行程序的运行结果不符合所述预设条件,则对所述待调试代码进行调试,之后返回执行所述调用所述预设模拟库的等价程序对所述待调试代码进行编译,得到中间可执行程序。
进一步,所述中间可执行程序包括第一中间可执行程序,所述预设条件包括第一预设条件,所述调试模块602还用于执行:
获取所述第一中间可执行程序的运行结果;
确认所述第一中间可执行程序的运行结果是否符合所述第一预设条件;
若所述第一中间可执行程序的运行结果不符合所述第一预设条件,则根据所述第一中间可执行程序的运行结果,对所述待调试代码进行调试。
进一步,所述中间可执行程序还包括第二中间可执行程序,所述调试模块602还用于执行:
若所述第一中间可执行程序的运行结果符合所述第一预设条件,则获取所述第二中间可执行程序的运行结果;
获取所述第一中间可执行程序和第二中间可执行程序的运行结果之间的误差值;
若所述误差值大于预设误差值,则对所述待调试代码进行调试。
进一步,所述调试模块602还用于执行:
若所述误差值大于预设误差值,通过预设的精度补偿算法对所述待调试代码进行调试。
进一步,所述调试模块602还用于执行:
若所述第一中间可执行程序的运行结果符合所述第一预设条件,且所述误差值小于或等于所述预设误差值,则确定所述中间可执行程序符合所述预设条件。
可以看出,通过本申请实施例,通过调用预设模拟库的等价程序对待调试代码进行编译及调试,得到目标代码,通过对目标代码进行编译进而得到适用芯片的可执行文件。采用该手段,通过在可调试环境下设立与芯片相对应的预设模拟库,然后对待调试代码进行编译及调试,当在该可调试环境下调试成功后,则将对应目标代码编译的可执行文件发送给所述芯片。其解决了芯片难以调试的问题,同时实现了高效率调试的效果。
本申请实施例还提供一种计算机存储介质,其中,该计算机存储介质存储用于电子数据交换的计算机程序,该计算机程序使得计算机执行如上述方法实施例中记载的任何一种编程调试方法的部分或全部步骤。
本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,该计算机程序使得计算机执行如上述方法实施例中记载的任何一种编程调试方法的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在申请明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器、随机存取器、磁盘或光盘等。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。