CN112486799A - 程序调试方法、装置和计算机设备 - Google Patents
程序调试方法、装置和计算机设备 Download PDFInfo
- Publication number
- CN112486799A CN112486799A CN201910869011.6A CN201910869011A CN112486799A CN 112486799 A CN112486799 A CN 112486799A CN 201910869011 A CN201910869011 A CN 201910869011A CN 112486799 A CN112486799 A CN 112486799A
- Authority
- CN
- China
- Prior art keywords
- executable program
- variable value
- debugging
- program
- checkpoint
- 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
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- 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
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
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
本申请实施例公开了一种程序调试方法、装置、计算机设备和存储介质,通过预设的调试工具同时执行不同的两个可执行程序,进而对两个可执行程序进行调试。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种程序调试方法、装置和计算机设备。
背景技术
由于异构芯片处理的数据类型可能与通用CPU不同,增加打印和debug工具工作量很大,不同数据类型的数据精度不同,异构***中数据精度越大,计算产生的功耗和运行时间越大,低精度数据的运算能给程序的运行性能和运算产生的功耗带来巨大的好处,在某些计算中,低精度计算能够在较小运行结果的前提下大大提高运行速率,但是,异构***中对程序进行调试会比较复杂,现有技术中,使用打印等方法调试需要反复修改代码和编译,并且需要人工查看或者手动写脚本计算精度,效率低并且容易出错。
发明内容
本申请实施例提供一种程序调试方法、装置、计算机设备和存储介质,可通过预设的调试工具同时执行不同处理器生成的两个可执行程序,进而对人工智能处理器对应的可执行程序进行调试。
第一方面,本申请实施例提供了一种程序调试方法,该方法包括:
获取第一可执行程序和第二可执行程序,其中,所述第一可执行程序与所述第二可执行程序为待调试代码编译后的程序。
第二方面,本申请实施例提供了一种程序调试装置,该装置可以包括:
获取单元,用于获取第一可执行程序和第二可执行程序,其中,所述第一可执行程序与所述第二可执行程序为待调试代码编译后的程序;
调试单元,用于基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
第三方面,本申请实施例提供了一种计算机设备,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述处理器包括通用处理器和人工智能处理器,所述存储器用于存储支持计算机设备执行上述方法的计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述第一方面的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面的方法。
第五方面,本申请实施例提供了一种计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面的方法。
实施本申请实施例,调试工具可以获取第一可执行程序和第二可执行程序,并基于针对第一可执行程序或第二可执行程序的第一调试操作,调试第一可执行程序和所述第二可执行程序,如此,可通过预设的调试工具同时执行不同处理器生成的两个可执行程序,进而对人工智能处理器对应的可执行程序进行调试;本申请实施例的调试方法能够同时调试多个程序,无需技术人员手动切换调试界面,调试方法简单且方便使用。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图1是本申请实施例提供的一种计算机设备的结构示意图;
图2A是本申请实施例提供的一种程序调试方法的流程示意图;
图2B是本申请实施例提供的一种基于第一调试操作调试所述第一可执行程序和所述第二可执行程序的步骤流程示意图;
图2C是本申请实施例提供的一种获取第一可执行程序中的至少一个第一变量值,以及第二可执行程序中至少一个第二变量值的步骤流程示意图;
图2D是本申请实施例提供的另一种获取第一可执行程序中的至少一个第一变量值,以及第二可执行程序中至少一个第二变量值的步骤流程示意图;
图2E是本申请实施例提供的一种根据至少一个第一变量值和至少一个第二变量值,确定第二可执行程序的运行结果的步骤流程示意图;
图3是本申请实施例公开的另一种程序调试方法的流程示意图;
图4是本申请实施例公开的另一种程序调试方法的流程示意图;
图5是本申请实施例提供的一种程序调试装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
应当理解,应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
请参见图1,是本申请实施例提供的一种计算机设备的结构示意图。如图1所示,计算机设备10可以包括通用处理器101、存储器102、通信总线103、通信接口104和人工智能处理器105,其中,通用处理器101、人工智能处理器105通过所述通信总线103连接所述存储器102和所述通信接口103。
通用处理器101可以是中央处理单元(Central Processing Unit,CPU),该通用处理器101还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该通用处理器101也可以是任何常规的处理器等。
通用处理器101还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请的资源配置方法的各个步骤可以通过通用处理器101中的硬件的集成逻辑电路或者软件形式的指令完成。
存储器102可以是只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)或其他存储器。本申请实施例中,存储器102用于存储数据以及各种软件程序,例如本申请实施例中进行性能分析过程中运行的目标程序。
可选的,在本申请实施例中,所述存储器可以包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方法的媒体加以存储。本实施方式所述的存储器又可以包括:利用电能方式存储信息的装置,如RAM、ROM等;利用磁能方式存储信息的装置,如硬盘、软盘、磁带、磁芯存储器、磁泡存储器、U盘;利用光学方式存储信息的装置,如CD或DVD。当然,还有其他方式的存储器,例如量子存储器、石墨烯存储器等等。
通信接口104使用例如但不限于收发器一类的收发装置,来实现计算机设备10与其他设备或通信网络之间的通信。
人工智能处理器105可以作为协处理器挂载到通用处理器(如Host CPU)上,由通用处理器为其分配任务。在实际应用中,人工智能处理器105可以是专用集成电路(Application Specific Integrated Circuit,ASIC),其能够实现一种或多种运算,如人工神经网络相关的运算。在其他实施例中,该人工智能处理器105可以替换为GPU或DSP等其他处理器,此处仅以举例说明,并不用于限定本申请。
应当理解,计算机设备10仅为本申请实施例提供的一个例子,并且,计算机设备10可具有比示出的部件更多或更少的部件,可以组合两个或更多个部件,或者可具有部件的不同配置实现。
如图2A所示,图2A为本申请实施例提供的一种程序调试方法的流程示意图,该方法可以应用于调试工具中,该调试工具能够在CPU等通用处理器上运行以实现相应的调试功能。可选地,该调试工具可以是GDB等调试工具,此处不做具体限定。所述方法包括:
201、调试工具获取第一可执行程序和第二可执行程序,其中,所述第一可执行程序与所述第二可执行程序为待调试代码编译后的程序。
本申请实施例中,计算机设备可先获取待调试代码,然后通过调试工具对待调试代码进行编译,得到第一可执行程序和第二可执行程序。
其中,上述待调试代码可以是采用高级编程语言(例如,C语言)针对专用处理器编写的代码。可选地,该专用处理器可以是人工智能处理器、GPU或TPU等等,此处不做具体限定。可选地,该待调试代码也可以是采用高级编程语言针对通用处理器编写的代码。
可选地,第一可执行程序是对待调试代码进行编译后获得的,与所述通用处理器对应的可执行程序,第二可执行程序是对所述待调试代码进行编译后获得的,与人工智能处理器、GPU或TPU等处理器对应的可执行程序。本申请实施例中,调试工具可通过不同的编译链接选项对待调试代码进行编译,得到通用处理器对应的第一可执行程序,以及人工智能处理器、GPU或TPU等处理器对应的第二可执行程序。
可选地,该第一可执行程序和第二可执行程序可以是对待调试代码进行编译后获得的,与同一处理器对应的可执行程序。例如,该第一可执行程序和第二可执行程序均是与人工智能处理器对应的可执行程序。或者,该第一可执行程序和第二可执行均是与GPU或TPU对应的可执行程序。该第一可执行程序和第二可执行程序可以具有不同的精度,从而可以通过该调试工具实现程序的执行精度调试。
可选地,第一可执行程序对应的第一数据精度可以大于第二可执行程序对应的第二数据精度。例如,第一可执行程序可以实现32位浮点数据的运算,第二可执行程序可以实现8位定点数据的运算。
可选地,上述通用处理器生成的第一可执行程序可以是满足精度要求的程序,该第一可执行程序的精度调试可以是通过下文中的模拟器进行调试,也可以通过调试工具GDB(GNU Debugger)调试器进行调试得到。因而,调试工具可以根据获取的第一可执行程序对第二可执行程序进行调试,以使得第二可执行程序的运行结果满足预设要求。
可选地,计算机设备中运行的模拟器或编译器等可以获取上述的待调试代码,并根据模拟器或编译器中预设的编译链接选项将上述的待调试代码编译为第一可执行程序和第二可执行程序。具体地,上述模拟器可以基于该待调试代码,通过宏定义的方式将该待调试代码编译为不同的版本,从而可以获得上述的第一可执行程序和第二可执行程序。在其他实施例中,第一可执行程序和第二可执行程序的编译过程还可以通过其他方式获得,此处不做具体限定。
202、所述调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
其中,上述调试工具可以为预先设定的调试工具,调试工具例如可以是GDB调试器,GDB调试器可实现对于一个程序的操作同时作用于两份程序上,例如,在其中一个程序中***断点,GDB调试器可自动在另一程序的相应位置***断点。
本申请实施例中,调试工具可以在接收到针对第一可执行程序或第二可执行程序的第一调试操作后,根据该第一调试操作,同时调试第一可执行程序和第二可执行程序,即同一第一调试操作同时可对第一可执行程序和第二可执行程序生效,从而,可更加便捷、智能地对第一可执行程序和第二可执行程序的同步调试进行控制。
可见,通过调试工具可实现针对第一可执行程序或第二可执行程序的第一调试操作,同时作用于第一可执行程序和第二可执行程序,可通过调试工具同时调试两个可执行程序,从而实现以更快速的操作对两个程序进行调试,无需通过打印、人工查看或者脚本对比,提高调试效率。
可选地,上述步骤202中,所述第一调试操作包括***的检查点;所述调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序,可包括以下步骤:
21、所述调试工具根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,所述至少一个第一变量值与所述至少一个第二变量值一一对应;
22、调试工具根据所述至少一个第一变量值和所述至少一个第二变量值,确定所述第二可执行程序的运行结果;
23、当所述第二可执行程序的运行结果不满足预设条件时,则返回执行通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序,直至所述第二可执行程序的运行结果满足所述预设条件。
请参阅图2B,图2B为本申请实施例提供的一种基于第一调试操作调试所述第一可执行程序和所述第二可执行程序的步骤流程示意图,其中,第一调试操作可以是由调试人员输入的操作,具体地,在调试过程中,调试工具同时运行第一可执行程序和第二可执行程序,在运行第一可执行程序和第二可执行程序的过程中,计算机设备可接收调试人员***的检查点。可选地,第一调试操作也可以是预先设置于调试流程中的操作,具体地,计算机设备可预先针对待调试程序中需要检查的程序节点设置检查点,以及***检查点的第一调试操作,从而,在调试过程中,当运行至设置了第一检查点的程序节点时,可执行该第一调试操作,通过该第一调试操作***检查点。
本申请实施例中,可根据针对第一可执行程序或第二可执行程序中***的第一检查点,获取第一可执行程序中的至少一个第一变量值,以及第二可执行程序中至少一个第二变量值,如此,可通过一个第一调试操作,针对第一可执行程序或第二可执行程序获取一一对应的至少一个第一变量值和至少一个第二变量值。
其中,上述变量值可以包括深度学习神经网络中需要计算的数据,具体可包括权值、神经网络每一层的输出数据,神经网络每一层的梯度值(该梯度值可以包括权值梯度和输入数据梯度)等。
例如,上述变量值可以是权值,在神经网络运算中,可对神经网络中的权值进行更新,得到更新后的权值,根据更新后的权值进行新的运算,因此,通过不断更新权值,可对神经网络进行训练,以使神经网络的运算结果更加准确。本申请实施例中,待调试代码生成的第一可执行程序和第二可执行程序中,同一权值在第一可执行程序和第二可执行程序的数据类型可能不同,例如,同一个权值在第一可执行程序中表示为16bit的浮点数据,在第二可执行程序中表示为8bit的定点数据。因此,可通过一个第一调试操作,针对同一个变量的值,获取在第一可执行程序的值和在第二可执行程序的值,进而,通过至少一个第一变量值和至少一个第二变量值确定第一可执行程序的数据和第二可执行程序的数据之间的精度差。当第二可执行程序的运行结果不满足预设条件时,则暂停执行所述第一可执行程序和所述第二可执行程序。进一步地,可返回执行所述调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序,直至第二可执行程序的运行结果满足预设条件。可选地,梯度值和输出数据的调试过程与上述权值的调试过程类似,具体可参见上文的描述,此处不再赘述。
可选地,所述运行结果包括精度损失,上述步骤202中,还可包括以下步骤:
若所述第二可执行程序的精度损失不满足预设条件,暂停执行所述第一可执行程序和所述第二可执行程序,之后返回执行所述调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
其中,调试工具可根据至少一个第一变量值和至少一个第二变量值确定第二可执行程序的精度损失是否满足预设条件,其中,第二可执行程序的第二数据精度低于第一可执行程序的第一数据精度,若所述第二可执行程序的精度损失不满足预设条件,表明第二可执行程序的精度误差较大,因此,调试工具可在第二可执行程序的精度损失不满足预设条件时,对第二可执行程序进行调试。具体地,调试工具可暂停执行所述第一可执行程序和所述第二可执行程序,接收针对所述第二可执行程序的第一调试操作,根据第二调试操作对第二可执行程序进行调试,调试之后,返回执行所述通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
其中,第一调试操作可以是由调试人员输入的操作,具体地,计算机设备可接收调试人员输入的第一调试操作,或者,还可以是预先设置于调试流程中的操作,具体地,计算机设备可预先设置针对第二可执行程序的精度损失不满足预设条件的第一调试操作,从而,在确定第二可执行程序的精度损失不满足预设条件后,可触发第一调试操作,并根据第一调试操作对第二可执行程序进行调试。
可选地,上述步骤21中,根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,可包括以下步骤A1-步骤A3:
A1、调试工具根据针对所述第一可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值;
A2、调试工具根据针对所述第一可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第二可执行程序中至少一个第二变量值;或者,
A3、调试工具根据所述第一检查点确定针对所述第二可执行程序的第二检查点;根据所述第二检查点获取所述第二可执行程序中至少一个第二变量值。
请参阅图2C,图2C为本申请实施例提供的一种获取第一可执行程序中的至少一个第一变量值,以及第二可执行程序中至少一个第二变量值的步骤流程示意图,计算机设备可根据针对第一可执行程序中***的第一检查点,获取第一可执行程序运行至该第一检查点的第一运行数据,从该第一运行数据中获取第一可执行程序中的至少一个第一变量值。
其中,调试工具可预先设置第一可执行程序与所述第二可执行程序的预设关联关系,该预设关联关系为语义关联关系。具体地,可在获取第一可执行程序中***的第一检查点后,可确定第一可执行程序中第一检查点所在的第一代码位置,然后,可确定在第二可执行程序中与第一代码位置语义相同的第二代码位置,获取第二可执行程序运行至该第二代码位置的第二运行数据,最后,从该第二运行数据中获取第二可执行程序中的至少一个第二变量值。
或者,调试工具可根据第一检查点确定针对第二可执行程序的第二检查点,然后获取第二可执行程序运行至该第二检查点的第二运行数据,从该第二运行数据中获取第二可执行程序中的至少一个第二变量值。具体地,调试工具可以在获取第一可执行程序中***的第一检查点后,可确定第一可执行程序中第一检查点所在的第一代码位置,然后,可确定在第二可执行程序中与第一代码位置语义相同的第二代码位置,并相应在该第二代码位置附近自动***第二检查点。这样当第二可执行程序运行至该第二检查点时,调试工具可以获得第二运行数据,从该第二运行数据中获取第二可执行程序中的至少一个第二变量值。
可选地,上述步骤21中,根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,可包括以下步骤A4-步骤A6:
A4、调试工具根据针对所述第二可执行程序中***的第一检查点,获取所述第二可执行程序中的至少一个第二变量值;
A5、调试工具根据针对所述第二可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第一可执行程序中至少一个第一变量值;或者,
A6、调试工具根据所述第一检查点确定针对所述第一可执行程序的第二检查点;根据所述第二检查点获取所述第一可执行程序中至少一个第一变量值。
请参阅图2D,图2D为本申请实施例提供的另一种获取第一可执行程序中的至少一个第一变量值,以及第二可执行程序中至少一个第二变量值的步骤流程示意图,其中,调试工具可根据针对第二可执行程序中***的第一检查点,获取第二可执行程序运行至该第一检查点的第二运行数据,从该第二运行数据中获取第二可执行程序中的至少一个第二变量值。
其中,调试工具可预先设置第一可执行程序与所述第二可执行程序的预设关联关系,该预设关联关系为语义关联关系,具体地,调试工具可在获取第二可执行程序中***的第一检查点后,确定第二可执行程序中第一检查点对应的第二代码位置,然后,调试工具可确定在第一可执行程序中与第二代码位置语义相同的第一代码位置,从而获取第一可执行程序运行至该第一代码位置的第一运行数据,最后,调试工具从该第一运行数据中获取第一可执行程序中的至少一个第一变量值。
或者,调试工具可根据第一检查点确定针对第一可执行程序的第二检查点,然后获取第一可执行程序运行至该第二检查点的第一运行数据,从该第一运行数据中获取第一可执行程序中的至少一个第一变量值。
可见,调试工具通过根据针对第一可执行程序或第二可执行程序中***的第一检查点,可获取第一可执行程序中的至少一个第一变量值,以及第二可执行程序中至少一个第二变量值,进而,可根据至少一个第一变量值和至少一个第二变量值确定第二可执行程序的精度损失是否满足预设条件,如此,可通过较为简单的第一调试操作,更加便捷、智能地对第一可执行程序和第二可执行程序的同步调试进行控制。
可选地,上述步骤22中,根据所述至少一个第一变量值和所述至少一个第二变量值,确定所述第二可执行程序的运行结果,可包括以下步骤:
B1、调试工具确定所述至少一个第一变量值中每一第一变量值与对应的第二变量值之间的差值,得到多个差值;
B2、若所述多个差值中存在大于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失不满足预设条件;
B3、若所述多个差值均小于或等于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失满足所述预设条件。
请参阅图2E,图2E为本申请实施例提供的一种根据至少一个第一变量值和至少一个第二变量值,确定第二可执行程序的运行结果的步骤流程示意图,其中,调试工具可针对至少一个第一变量值中每一第一变量值,确定该第一变量值与对应的第二变量值之间的差值,若该差值大于预设的误差阈值,可确定第二可执行程序的精度损失不满足预设条件,若确定至少一个第一变量值中每一第一变量值与对应的第二变量值之间的差值,得到多个差值后,多个差值小于或等于预设的误差阈值,则可确定第二可执行程序的精度损失满足预设条件。
可选地,本申请实施例中,在执行所述步骤22后,还可包括以下步骤:
若所述第二可执行程序的精度损失满足所述预设条件,继续执行所述第一可执行程序和所述第二可执行程序。
其中,若第二可执行程序的精度损失满足所述预设条件,表明针对第一调试操作进行调试,第二可执行程序中第一检测点之间的部分运行正确,可以继续执行第一可执行程序和第二可执行程序。
可以看出,本申请提供的技术方案,计算机设备通过获取待调试代码,根据待调试代码生成通用处理器对应的第一可执行程序,以及根据待调试代码生成人工智能处理器对应的第二可执行程序,通过调试工具基于针对第一可执行程序或第二可执行程序的第一调试操作,调试第一可执行程序和所述第二可执行程序,如此,可通过调试工具同时调试两个可执行程序,从而实现以更快速的操作对两个程序进行调试,无需通过打印、人工查看或者脚本对比,提高调试效率。
如图3所示,图3为本申请实施例提供的另一种程序调试方法的流程示意图,用于调试工具中,该调试工具可以在计算机设备上运行,以实现对待调试代码等进行调试的功能,该调试工具可以是GDB等调试工具。本申请实施例以人工智能处理器和通用处理器形成的异构***为例说明该GDB调试工具的工作过程。具体地,所述方法包括:
301、调试工具获取第一可执行程序和第二可执行程序,其中,所述第一可执行程序是对待调试代码编译获得的,与通用处理器对应的可执行程序,所述第二可执行程序是对所述待调试代码编译获得,与人工智能处理器对应的可执行程序。
其中,上述步骤301的具体实现过程可参照图2A所示的方法中相应的描述,在此不再赘述。
302、所述调试工具根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,所述至少一个第一变量值与所述至少一个第二变量值一一对应。
303、根据所述至少一个第一变量值和所述至少一个第二变量值,确定所述第二可执行程序的运行结果。
304、当所述第二可执行程序的运行结果不满足预设条件时,则返回执行通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序,直至所述第二可执行程序的运行结果满足所述预设条件。
其中,在调试过程中,调试工具可以同时运行第一可执行程序和第二可执行程序,在运行第一可执行程序和第二可执行程序的过程中,调试工具可接收调试人员***的检查点。可选地,调试工具可预先针对待调试程序中需要检查的程序节点设置检查点,以及***检查点的第一调试操作,从而,在调试过程中,可同时运行第一可执行程序和第二可执行程序,当运行至设置了第一检查点的程序节点时,可执行该第一调试操作,通过该第一调试操作***检查点。
本申请实施例中,调试工具可根据针对第一可执行程序或第二可执行程序中***的第一检查点,获取第一可执行程序中的至少一个第一变量值,以及第二可执行程序中至少一个第二变量值,如此,可通过一个第一调试操作,针对第一可执行程序或第二可执行程序获取一一对应的至少一个第一变量值和至少一个第二变量值。
进一步地,调试工具可根据至少一个第一变量值和至少一个第二变量值确定第二可执行程序的运行结果是否满足预设条件,运行结果可以为第二可执行程序的精度损失,其中,第二可执行程序的第二数据精度低于第一可执行程序的第一数据精度,若所述第二可执行程序的精度损失不满足预设条件,表明第二可执行程序的精度误差较大,因此,可在第二可执行程序的精度损失不满足预设条件时,对第二可执行程序进行调试,具体地,可暂停执行所述第一可执行程序和所述第二可执行程序,接收针对所述第二可执行程序的第二调试操作,根据第二调试操作对第二可执行程序进行调试,调试之后,返回执行所述通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
其中,第二调试操作可以是由调试人员输入的操作,具体地,计算机设备可接收调试人员输入的第二调试操作,或者,还可以是预先设置于调试流程中的操作,具体地,计算机设备可预先设置针对第二可执行程序的精度损失不满足预设条件的第二调试操作,从而,在确定第二可执行程序的精度损失不满足预设条件后,可触发第二调试操作,并根据第二调试操作对第二可执行程序进行调试。
可以看出,本申请提供的技术方案,计算机设备通过获取待调试代码,根据待调试代码生成通用处理器对应的第一可执行程序,以及根据待调试代码生成人工智能处理器对应的第二可执行程序,通过调试工具根据针对第一可执行程序或第二可执行程序中***的第一检查点,获取第一可执行程序中的至少一个第一变量值,以及第二可执行程序中至少一个第二变量值,根据至少一个第一变量值和至少一个第二变量值确定第二可执行程序的运行结果是否满足预设条件,若第二可执行程序的运行结果不满足预设条件,返回执行所述通过调试工具基于针对第一可执行程序或第二可执行程序的第一调试操作,调试第一可执行程序和第二可执行程序,如此,通过调试工具同时调试两个可执行程序,更加便捷、智能地对第一可执行程序和第二可执行程序的同步调试进行控制,从而实现以更快速的操作对两个程序进行调试,无需通过打印、人工查看或者脚本对比,提高调试效率。
如图4所示,图4为本申请实施例提供的另一种程序调试方法的流程示意图,本申请实施例以人工智能处理器和通用处理器形成的异构***为例说明该GDB调试工具的工作过程。所述方法包括:
401、调试工具获取第一可执行程序和第二可执行程序,其中,所述第一可执行程序是对待调试代码编译获得的,与通用处理器对应的可执行程序,所述第二可执行程序是对所述待调试代码编译获得,与人工智能处理器对应的可执行程序,所述第一可执行程序对应的第一数据精度大于所述第二可执行程序对应的第二数据精度。
402、所述调试工具根据针对所述第一可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值。
其中,上述步骤401-402的具体实现过程可参照图2A所示的方法中相应的描述,在此不再赘述。
403、调试工具根据针对所述第一可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第二可执行程序中至少一个第二变量值;或者,根据所述第一检查点确定针对所述第二可执行程序的第二检查点;根据所述第二检查点获取所述第二可执行程序中至少一个第二变量值,所述至少一个第一变量值与所述至少一个第二变量值一一对应。
404、调试工具根据所述至少一个第一变量值和所述至少一个第二变量值确定所述第二可执行程序的精度损失是否满足预设条件。
405、若所述第二可执行程序的精度损失不满足预设条件,暂停执行所述第一可执行程序和所述第二可执行程序,接收针对所述第二可执行程序的第二调试操作,根据所述第二调试操作对所述第二可执行程序进行调试,之后返回执行所述通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
其中,调试工具可根据针对第一可执行程序中***的第一检查点,获取第一可执行程序运行至该第一检查点的第一运行数据,从该第一运行数据中获取第一可执行程序中的至少一个第一变量值。
其中,调试工具可预先设置第一可执行程序与所述第二可执行程序的预设关联关系,该预设关联关系为语义关联关系,具体地,调试工具可在获取第一可执行程序中***的第一检查点后,确定第一可执行程序中第一检查点对应的第一代码位置,然后,调试工具可确定在第二可执行程序中与第一代码位置语义相同的第二代码位置,获取第二可执行程序运行至该第二代码位置的第二运行数据,最后,从该第二运行数据中获取第二可执行程序中的至少一个第二变量值。
或者,调试工具可根据第一检查点确定针对第二可执行程序的第二检查点,然后获取第二可执行程序运行至该第二检查点的第二运行数据,从该第二运行数据中获取第二可执行程序中的至少一个第二变量值。
可以看出,本申请提供的技术方案,计算机设备通过获取待调试代码,根据待调试代码生成通用处理器对应的第一可执行程序,以及根据待调试代码生成人工智能处理器对应的第二可执行程序,根据针对第一可执行程序中***的第一检查点,获取第一可执行程序中的至少一个第一变量值,根据针对第一可执行程序中***的第一检查点以及第一可执行程序与第二可执行程序的预设关联关系,获取第二可执行程序中至少一个第二变量值;或者,根据第一检查点确定针对第二可执行程序的第二检查点;根据第二检查点获取第二可执行程序中至少一个第二变量值,根据至少一个第一变量值和至少一个第二变量值确定第二可执行程序的精度损失是否满足预设条件,若第二可执行程序的精度损失不满足预设条件,暂停执行第一可执行程序和第二可执行程序,接收针对第二可执行程序的第二调试操作,根据第二调试操作对第二可执行程序进行调试,之后返回执行所述通过调试工具基于针对第一可执行程序或第二可执行程序的第一调试操作,调试第一可执行程序和第二可执行程序,如此,通过调试工具同时调试不同精度的两个可执行程序,更加便捷、智能地对第一可执行程序和第二可执行程序的同步调试进行控制,从而实现以更快速的操作对两个不同精度的程序进行调试,无需通过打印、人工查看或者脚本对比,提高调试效率。
应当清楚的是,当第一可执行程序和第二可执行程序是与同一处理器相对应的两个可执行程序,且第一可执行程序和第二可执行程序具有不同的执行精度时,调试工具对这两段可执行程序的精度调试过程与上述实施例的精度调试过程基本一致,具体可参见上文的描述,此处不再赘述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
进一步需要说明的是,虽然图2A-图4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2A-图4中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
下面介绍本申请提供的程序调试装置。
参见图5,图5是本申请实施例提供的一种程序调试装置的结构示意图,该调试装置可以是GDB等调试工具。该装置500至少可以包括获取单元501和调试单元502,其中,
所述获取单元501,用于获取第一可执行程序和第二可执行程序,其中,所述第一可执行程序与所述第二可执行程序为待调试代码编译后的程序。
所述调试单元502,用于通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
在一个可能的实现方式中,所述第一调试操作包括***的检查点;在所述通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序方面,所述调试单元503具体用于:
根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,所述至少一个第一变量值与所述至少一个第二变量值一一对应;
根据所述至少一个第一变量值和所述至少一个第二变量值确定所述第二可执行程序的运行结果;
当所述第二可执行程序的运行结果不满足预设条件时,则返回执行通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序,直至所述第二可执行程序的运行结果满足所述预设条件。
在一个可能的实现方式中,所述运行结果包括精度损失;所述调试单元502还用于:
若所述第二可执行程序的精度损失不满足预设条件,暂停执行所述第一可执行程序和所述第二可执行程序,之后返回执行所述通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
在一个可能的实现方式中,在所述根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值方面,所述调试单元502具体用于:
根据针对所述第一可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值;
根据针对所述第一可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第二可执行程序中至少一个第二变量值;或者,
根据所述第一检查点确定针对所述第二可执行程序的第二检查点;根据所述第二检查点获取所述第二可执行程序中至少一个第二变量值。
在一个可能的实现方式中,在所述根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值方面,所述调试单元502具体用于:
根据针对所述第二可执行程序中***的第一检查点,获取所述第二可执行程序中的至少一个第二变量值;
根据针对所述第二可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第一可执行程序中至少一个第一变量值;或者,
根据所述第一检查点确定针对所述第一可执行程序的第二检查点;根据所述第二检查点获取所述第一可执行程序中至少一个第一变量值。
在一个可能的实现方式中,在所述根据所述至少一个第一变量值和所述至少一个第二变量值,确定所述第二可执行程序的运行结果方面,所述调试单元502具体用于:
确定所述至少一个第一变量值中每一第一变量值与对应的第二变量值之间的差值,得到多个差值;
若所述多个差值中存在大于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失不满足预设条件;
若所述多个差值均小于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失满足所述预设条件。
在一个可能的实现方式中,所述调试单元502还用于:
在所述第二可执行程序的精度损失满足所述预设条件时,继续执行所述第一可执行程序和所述第二可执行程序。
可以看出,本申请提供的技术方案,计算机设备通过获取待调试代码,根据待调试代码生成通用处理器对应的第一可执行程序,以及根据待调试代码生成人工智能处理器对应的第二可执行程序,通过调试工具基于针对第一可执行程序或第二可执行程序的第一调试操作,调试第一可执行程序和所述第二可执行程序,如此,可通过调试工具同时调试两个可执行程序,从而实现以更快速的操作对两个程序进行调试,无需通过打印、人工查看或者脚本对比,提高调试效率。
应该理解,上述的装置实施例仅是示意性的,本披露的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个***,或一些特征可以忽略或不执行。
所述作为分离部件说明的单元或模块可以是物理上分开的,也可以不是物理上分开的。作为单元或模块说明的部件可以是物理单元,也可以不是物理单元,即可以位于一个装置中,或者也可以分布到多个装置上。本披露中实施例的方案可以根据实际的需要选择其中的部分或者全部单元来实现。
本申请实施例还提供了一种计算机存储介质,用于存储为上述图2A-图4所示的计算机设备所用的计算机软件指令,其包含用于执行上述方法实施例所涉及的程序。通过执行存储的程序,可以实现上述任一实施例的程序调试方法的步骤。
本申请实施例还提供了一种计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述图2A-图4所示的计算机设备所用的计算机软件指令,其包含用于执行上述方法实施例所涉及的程序。通过执行存储的程序,可以实现上述任一实施例的程序调试方法的步骤。
由上可见,本申请实施例提供程序调试方法、装置、计算机设备和存储介质,该方法通过随机生成在线模型所需的验证输入数据,无需提前准备输入数据集能便捷地对在线模型的前向传播进行验证。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本申请实施例中集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于晶体管,忆阻器等等。若无特别说明,所述人工智能处理器可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。若无特别说明,所述存储器可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储器RRAM(Resistive Random Access Memory)、动态随机存取存储器DRAM(Dynamic Random Access Memory)、静态随机存取存储器SRAM(Static Random-AccessMemory)、增强动态随机存取存储器EDRAM(Enhanced Dynamic Random Access Memory)、高带宽内存HBM(High-Bandwidth Memory)、混合存储立方HMC(Hybrid Memory Cube)等等。
所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本披露的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本披露的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
进一步地,依据以下条款可更好地理解前述内容:
条款A1,一种程序调试方法,所述方法包括:
获取第一可执行程序和第二可执行程序,其中,所述第一可执行程序与所述第二可执行程序为待调试代码编译后的程序;
基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
条款A2、根据A1所述的方法,所述第一调试操作包括***的检查点;基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序,包括:
根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,所述至少一个第一变量值与所述至少一个第二变量值一一对应;
根据所述至少一个第一变量值和所述至少一个第二变量值,确定所述第二可执行程序的运行结果;
当所述第二可执行程序的运行结果不满足预设条件时,则返回执行通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序,直至所述第二可执行程序的运行结果满足所述预设条件。
条款A3、根据A2所述的方法,所述运行结果包括精度损失;所述方法还包括:
若所述第二可执行程序的精度损失不满足预设条件,暂停执行所述第一可执行程序和所述第二可执行程序,之后返回执行所述通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
条款A4、根据A3所述的方法,所述根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,包括:
根据针对所述第一可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值;
根据针对所述第一可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第二可执行程序中至少一个第二变量值;或者,
根据所述第一检查点确定针对所述第二可执行程序的第二检查点;根据所述第二检查点获取所述第二可执行程序中至少一个第二变量值。
条款A5、根据A3所述的方法,所述根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,包括:
根据针对所述第二可执行程序中***的第一检查点,获取所述第二可执行程序中的至少一个第二变量值;
根据针对所述第二可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第一可执行程序中至少一个第一变量值;或者,
根据所述第一检查点确定针对所述第一可执行程序的第二检查点;根据所述第二检查点获取所述第一可执行程序中至少一个第一变量值。
条款A6、根据A3-A5任一项所述的方法,所述根据所述至少一个第一变量值和所述至少一个第二变量值,确定所述第二可执行程序的运行结果,包括:
确定所述至少一个第一变量值中每一第一变量值与对应的第二变量值之间的差值,得到多个差值;
若所述多个差值中存在大于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失不满足预设条件;
若所述多个差值均小于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失满足所述预设条件。
条款A7、根据A4-A6任一项所述的方法,所述方法还包括:
若所述第二可执行程序的精度损失满足所述预设条件,继续执行所述第一可执行程序和所述第二可执行程序。
B1、一种程序调试装置,所述装置包括:
获取单元,用于获取第一可执行程序和第二可执行程序,其中,所述第一可执行程序与所述第二可执行程序为待调试代码编译后的程序;
调试单元,用于通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
B2、根据B1所述的装置,所述第一调试操作包括***的检查点;在所述基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序方面,所述调试单元具体用于:
根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,所述至少一个第一变量值与所述至少一个第二变量值一一对应;
根据所述至少一个第一变量值和所述至少一个第二变量值确定所述第二可执行程序的运行结果;
当所述第二可执行程序的运行结果不满足预设条件时,则返回执行通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序,直至所述第二可执行程序的运行结果满足所述预设条件。
B3、根据B2所述的装置,所述运行结果包括精度损失;所述调试单元还用于:
若所述第二可执行程序的精度损失不满足预设条件,暂停执行所述第一可执行程序和所述第二可执行程序,之后返回执行所述通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
B4、根据B3所述的装置,其特征在于,在所述根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值方面,所述调试单元具体用于:
根据针对所述第一可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值;
根据针对所述第一可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第二可执行程序中至少一个第二变量值;或者,
根据所述第一检查点确定针对所述第二可执行程序的第二检查点;根据所述第二检查点获取所述第二可执行程序中至少一个第二变量值。
B5、根据B3所述的装置,在所述根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值方面,所述调试单元具体用于:
根据针对所述第二可执行程序中***的第一检查点,获取所述第二可执行程序中的至少一个第二变量值;
根据针对所述第二可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第一可执行程序中至少一个第一变量值;或者,
根据所述第一检查点确定针对所述第一可执行程序的第二检查点;根据所述第二检查点获取所述第一可执行程序中至少一个第一变量值。
B6、根据B3-B5任一项所述的装置,在所述根据所述至少一个第一变量值和所述至少一个第二变量值,确定所述第二可执行程序的运行结果方面,所述调试单元具体用于:
确定所述至少一个第一变量值中每一第一变量值与对应的第二变量值之间的差值,得到多个差值;
若所述多个差值中存在大于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失不满足预设条件;
若所述多个差值均小于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失满足所述预设条件。
B7、根据B4-B6任一项所述的装置,所述调试单元还用于:
在所述第二可执行程序的精度损失满足所述预设条件时,继续执行所述第一可执行程序和所述第二可执行程序。
C1、一种计算机设备,其特征在于,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述处理器包括通用处理器和人工智能处理器,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求A1-A7任一项所述的方法。
D1、一种计算机可读存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求A1-A7任一项所述的方法。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明仅用于帮助理解本披露的方法及其核心思想。同时,本领域技术人员依据本披露的思想,基于本披露的具体实施方式及应用范围上做出的改变或变形之处,都属于本披露保护的范围。综上所述,本说明书内容不应理解为对本披露的限制。
Claims (16)
1.一种程序调试方法,其特征在于,所述方法包括:
获取第一可执行程序和第二可执行程序,其中,所述第一可执行程序与所述第二可执行程序为待调试代码编译后的程序;
基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
2.根据权利要求1所述的方法,其特征在于,所述第一调试操作包括***的检查点;所述基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序,包括:
根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,所述至少一个第一变量值与所述至少一个第二变量值一一对应;
根据所述至少一个第一变量值和所述至少一个第二变量值,确定所述第二可执行程序的运行结果;
当所述第二可执行程序的运行结果不满足预设条件时,则返回执行通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序,直至所述第二可执行程序的运行结果满足所述预设条件。
3.根据权利要求2所述的方法,其特征在于,所述运行结果包括精度损失;所述方法还包括:
若所述第二可执行程序的精度损失不满足预设条件,暂停执行所述第一可执行程序和所述第二可执行程序,之后返回执行所述基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
4.根据权利要求3所述的方法,其特征在于,所述根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,包括:
根据针对所述第一可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值;
根据针对所述第一可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第二可执行程序中至少一个第二变量值;或者,
根据所述第一检查点确定针对所述第二可执行程序的第二检查点;根据所述第二检查点获取所述第二可执行程序中至少一个第二变量值。
5.根据权利要求3所述的方法,其特征在于,所述根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,包括:
根据针对所述第二可执行程序中***的第一检查点,获取所述第二可执行程序中的至少一个第二变量值;
根据针对所述第二可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第一可执行程序中至少一个第一变量值;或者,
根据所述第一检查点确定针对所述第一可执行程序的第二检查点;根据所述第二检查点获取所述第一可执行程序中至少一个第一变量值。
6.根据权利要求3-5任一项所述的方法,其特征在于,所述根据所述至少一个第一变量值和所述至少一个第二变量值,确定所述第二可执行程序的运行结果,包括:
确定所述至少一个第一变量值中每一第一变量值与对应的第二变量值之间的差值,得到多个差值;
若所述多个差值中存在大于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失不满足预设条件;
若所述多个差值均小于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失满足所述预设条件。
7.根据权利要求4-6任一项所述的方法,其特征在于,所述方法还包括:
若所述第二可执行程序的精度损失满足所述预设条件,继续执行所述第一可执行程序和所述第二可执行程序。
8.一种程序调试装置,其特征在于,所述装置包括:
获取单元,用于获取第一可执行程序和第二可执行程序,其中,所述第一可执行程序与所述第二可执行程序为待调试代码编译后的程序;
调试单元,用于基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
9.根据权利要求8所述的装置,其特征在于,所述第一调试操作包括***的检查点;在所述基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序方面,所述调试单元具体用于:
根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值,所述至少一个第一变量值与所述至少一个第二变量值一一对应;
根据所述至少一个第一变量值和所述至少一个第二变量值确定所述第二可执行程序的运行结果;
当所述第二可执行程序的运行结果不满足预设条件时,则返回执行通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序,直至所述第二可执行程序的运行结果满足所述预设条件。
10.根据权利要求9所述的装置,其特征在于,所述运行结果包括精度损失;所述调试单元还用于:
若所述第二可执行程序的精度损失不满足预设条件,暂停执行所述第一可执行程序和所述第二可执行程序,之后返回执行所述通过调试工具基于针对所述第一可执行程序或所述第二可执行程序的第一调试操作,调试所述第一可执行程序和所述第二可执行程序。
11.根据权利要求10所述的装置,其特征在于,在所述根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值方面,所述调试单元具体用于:
根据针对所述第一可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值;
根据针对所述第一可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第二可执行程序中至少一个第二变量值;或者,
根据所述第一检查点确定针对所述第二可执行程序的第二检查点;根据所述第二检查点获取所述第二可执行程序中至少一个第二变量值。
12.根据权利要求10所述的装置,其特征在于,在所述根据针对所述第一可执行程序或所述第二可执行程序中***的第一检查点,获取所述第一可执行程序中的至少一个第一变量值,以及所述第二可执行程序中至少一个第二变量值方面,所述调试单元具体用于:
根据针对所述第二可执行程序中***的第一检查点,获取所述第二可执行程序中的至少一个第二变量值;
根据针对所述第二可执行程序中***的第一检查点以及所述第一可执行程序与所述第二可执行程序的预设关联关系,获取所述第一可执行程序中至少一个第一变量值;或者,
根据所述第一检查点确定针对所述第一可执行程序的第二检查点;根据所述第二检查点获取所述第一可执行程序中至少一个第一变量值。
13.根据权利要求10-12任一项所述的装置,其特征在于,在所述根据所述至少一个第一变量值和所述至少一个第二变量值,确定所述第二可执行程序的运行结果方面,所述调试单元具体用于:
确定所述至少一个第一变量值中每一第一变量值与对应的第二变量值之间的差值,得到多个差值;
若所述多个差值中存在大于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失不满足预设条件;
若所述多个差值均小于所述预设的误差阈值的差值,确定所述第二可执行程序的精度损失满足所述预设条件。
14.根据权利要求10-13任一项所述的装置,其特征在于,所述调试单元还用于:
在所述第二可执行程序的精度损失满足所述预设条件时,继续执行所述第一可执行程序和所述第二可执行程序。
15.一种计算机设备,其特征在于,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-7任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-7任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910869011.6A CN112486799A (zh) | 2019-09-12 | 2019-09-12 | 程序调试方法、装置和计算机设备 |
PCT/CN2020/114486 WO2021047585A1 (zh) | 2019-09-12 | 2020-09-10 | 程序调试方法、装置、调试工具和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910869011.6A CN112486799A (zh) | 2019-09-12 | 2019-09-12 | 程序调试方法、装置和计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112486799A true CN112486799A (zh) | 2021-03-12 |
Family
ID=74865778
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910869011.6A Pending CN112486799A (zh) | 2019-09-12 | 2019-09-12 | 程序调试方法、装置和计算机设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN112486799A (zh) |
WO (1) | WO2021047585A1 (zh) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7225431B2 (en) * | 2002-10-24 | 2007-05-29 | International Business Machines Corporation | Method and apparatus for setting breakpoints when debugging integrated executables in a heterogeneous architecture |
CN101192193A (zh) * | 2006-11-27 | 2008-06-04 | 国际商业机器公司 | 用于实现观察点的方法和*** |
CN101639805A (zh) * | 2008-07-31 | 2010-02-03 | 国际商业机器公司 | 用于在程序调试中跟踪变量的方法和设备 |
CN106201896A (zh) * | 2016-07-26 | 2016-12-07 | 华中科技大学 | 一种嵌入式环境下基于检查点的调试方法、***及装置 |
CN109992516B (zh) * | 2019-04-03 | 2022-08-26 | 寒武纪(西安)集成电路有限公司 | 一种编程调试方法、装置及相关产品 |
-
2019
- 2019-09-12 CN CN201910869011.6A patent/CN112486799A/zh active Pending
-
2020
- 2020-09-10 WO PCT/CN2020/114486 patent/WO2021047585A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2021047585A1 (zh) | 2021-03-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11556861B2 (en) | Debugging correctness issues in training machine learning models | |
Cohn | The notion of proof in hardware verification | |
US20100180263A1 (en) | Apparatus and method for detecting software error | |
CN103279418B (zh) | 一种组态控制信息的测试方法和装置 | |
US9430358B1 (en) | Debugging using program state definitions | |
CN109032879B (zh) | 多核处理器访存数据检测验证***及方法 | |
Tashtoush et al. | The correlation among software complexity metrics with case study | |
JP6387182B2 (ja) | 情報処理方法、装置及びコンピュータ記憶媒体 | |
US11023625B2 (en) | Computational accelerator architecture for change control in model-based system engineering | |
WO2020237508A1 (zh) | 一种断言验证代码绑定方法及装置 | |
Zhu et al. | A context-aware approach for dynamic gui testing of android applications | |
US9092567B2 (en) | Systems and methods for analyzing transactions in a computer system | |
CN104572289A (zh) | 基于虚拟化的服务器配置测算处理方法与装置 | |
CN108874656A (zh) | 代码测试方法、装置、可读存储介质及计算机设备 | |
Isradisaikul et al. | Finding counterexamples from parsing conflicts | |
CN109783837A (zh) | 仿真设备、仿真***、仿真方法和仿真程序 | |
CN105607990B (zh) | 一种空指针崩溃的挖掘方法及装置 | |
EP2913758A1 (en) | Loop abstraction for model checking | |
CN106886487A (zh) | 用于评价fpga软件可靠性的方法 | |
CN112486799A (zh) | 程序调试方法、装置和计算机设备 | |
US9081560B2 (en) | Code tracing processor selection | |
CN105760373A (zh) | 一种异常数据处理方法和异常数据处理设备 | |
CN103593179A (zh) | 用于在并行计算环境中开发软件的方法 | |
Huybrechts et al. | Hybrid approach on cache aware real-time scheduling for multi-core systems | |
US20110144958A1 (en) | Detection of design redundancy |
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 |