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

联邦学习编译器的代码调试方法、装置、设备及存储介质与流程

2022-06-05 19:27:49 来源:中国专利 TAG:


1.本发明涉及联邦学习技术领域,尤其涉及一种联邦学习编译器的代码调试方法、装置、设备及存储介质。


背景技术:

2.联邦学习场景中,由于涉及到多方的信息传输、调度等,需要对开发者为每一不同角色的参与方进行不同的代码逻辑实现,从而代码复杂,较难开发和维护。为了解决这个问题,目前在python(一种计算机程序设计语言)的基础上提出了新的代码编写方式和一种联邦学习编译器。具体地,新的代码编写方式中,设置了名称为mpc的函数修饰符,被该修饰符修饰的函数被联邦学习编译器编译后转换为python解释器可直接执行的代码。在mpc下的函数中所有变量、运算符、控制符等都会编译成中间代码,中间代码由op(算子)组成,包括数据op、运算op、控制op三类。
3.目前存在的问题是,python程序提供了一种交互的源代码调试功能,例如设置断点、查看当前代码等调试功能,但是这种调试功能只能够在普通python代码中使用,而对于联邦学习编译器方案下由mpc修饰的代码块,则无法使用现有的调试功能,从而导致开发人员对联邦学习代码的调试效率不高,调试体验差。


技术实现要素:

4.本发明的主要目的在于提供一种联邦学习编译器的代码调试方法、装置、设备及可读存储介质,旨在目前联邦学习编译器方案下由mpc修饰的代码块,则无法使用python程序的调试功能的问题。
5.为实现上述目的,本发明提供一种联邦学习编译器的代码调试方法,所述方法包括以下步骤:
6.接收针对编译前代码中第一位置处代码的调试指令;
7.针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果,其中,所述编译后代码为所述编译前代码经过所述联邦学习编译器编译得到;
8.根据所述第一调试结果得到所述编译前代码对应的第二调试结果,并显示所述第二调试结果。
9.可选地,当所述方法应用于联邦学习代码执行方时,所述代码执行方与联邦学习流程发起方通信连接,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
10.将所述第一位置发送给所述流程发起方,以供所述流程发起方对所述编译前代码进行编译得到所述编译后代码后,将所述编译后代码和所述编译后代码中与所述第一位置对应的第二位置返回给所述代码执行方;
11.接收所述编译后代码和所述第二位置,并针对所述编译后代码中所述第二位置处
代码执行所述调试指令得到第一调试结果。
12.可选地,当所述方法应用于联邦学习流程发起方时,所述流程发起方与联邦学习代码执行方通信连接,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
13.对所述编译前代码进行编译得到所述编译后代码后,将所述编译后代码和所述编译后代码中与所述第一位置对应的第二位置发送给所述代码执行方,以供所述代码执行方接收到所述编译后代码和所述第二位置后,针对所述编译后代码中所述第二位置处代码执行所述调试指令得到第一调试结果,并返回所述第一调试结果;
14.接收所述代码执行方返回的所述第一调试结果。
15.可选地,当所述调试指令为在所述编译前代码中第一位置处设置断点的指令时,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
16.在所述编译后代码中与所述第一位置对应的第二位置处设置实际断点;
17.运行所述编译后代码并在所述实际断点处停止,将所述编译后代码中所述实际断点之后的第一代码行作为第一调试结果;
18.所述根据所述第一调试结果得到所述编译前代码对应的第二调试结果的步骤包括:
19.将所述编译前代码中与所述第一代码行对应的第二代码行作为第二调试结果。
20.可选地,当所述调试指令为查看所述编译前代码中第一位置处变量值的查看指令时,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
21.运行所述编译后代码后获取所述编译后代码中与所述第一位置对应的第二位置处的变量值,将所述变量值作为第一调试结果;
22.所述根据所述第一调试结果得到所述编译前代码对应的第二调试结果的步骤包括:
23.将所述第一调试结果作为所述编译前代码对应的第二调试结果。
24.可选地,当所述调试指令为更改所述编译前代码中第一位置处变量值的更改指令时,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
25.将所述编译后代码中与所述第一位置对应的第二位置处变量值更改为所述更改指令中携带的目标变量值;
26.运行更改变量值后的编译后代码得到运行结果,将所述运行结果作为第一调试结果;
27.所述根据所述第一调试结果得到所述编译前代码对应的第二调试结果的步骤包括:
28.将所述第一调试结果作为所述编译前代码对应的第二调试结果。
29.可选地,当所述调试指令为针对所述编译前代码中第一位置处代码的查看当前代码指令时,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
30.获取所述编译后代码中与所述第一位置对应的第二位置处代码行的前后预设行数范围的第一代码段,将所述第一代码段作为所述第一调试结果;
31.所述根据所述第一调试结果得到所述编译前代码对应的第二调试结果的步骤包括:
32.将所述编译前代码中与所述第一代码段对应的第二代码段作为第二调试结果。
33.为实现上述目的,本发明提供一种联邦学习编译器的代码调试装置,所述装置包括:
34.接收模块,用于接收针对编译前代码中第一位置处代码的调试指令;
35.调试模块,用于针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果,其中,所述编译后代码为所述编译前代码经过所述联邦学习编译器编译得到;
36.显示模块,用于根据所述第一调试结果得到所述编译前代码对应的第二调试结果,并显示所述第二调试结果。
37.为实现上述目的,本发明还提供一种联邦学习编译器的代码调试设备,所述联邦学习编译器的代码调试设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的联邦学习编译器的代码调试程序,所述联邦学习编译器的代码调试程序被所述处理器执行时实现如上所述的联邦学习编译器的代码调试方法的步骤。
38.此外,为实现上述目的,本发明还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有联邦学习编译器的代码调试程序,所述联邦学习编译器的代码调试程序被处理器执行时实现如上所述的联邦学习编译器的代码调试方法的步骤。
39.此外,为实现上述目的,本发明还提出一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上所述的联邦学习编译器的代码调试方法的步骤。
40.本发明中,通过接收针对编译前代码中第一位置处代码的调试指令,针对编译后代码中与该第一位置对应的第二位置处代码执行该调试指令得到第一调试结果,再根据第一调试结果得到与编译前代码对应的第二调试结果,并显示第二调试结果。也即,本发明中,利用编译前代码和编译后代码之间的位置对应关系,通过实际上调试编译后的代码来实现调试功能,但给调试人员提供了调试编译前代码的途径,并能够展示对编译前代码的调试效果,从而实现了调试人员调试人员能够直接调试由mpc修饰的编译前代码,能够直接、直观地了解到对编译前代码的调试结果,相比于调试复杂的编译后代码,调试效率更高,调试体验更好。
附图说明
41.图1为本发明实施例方案涉及的硬件运行环境的结构示意图;
42.图2为本发明联邦学习编译器的代码调试方法第一实施例的流程示意图;
43.图3为本发明实施例涉及的一种代码调试流程示意图;
44.图4为本发明联邦学习编译器的代码调试装置较佳实施例的功能示意图模块图。
45.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
46.应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
47.如图1所示,图1是本发明实施例方案涉及的硬件运行环境的设备结构示意图。
48.需要说明的是,本发明实施例联邦学习编译器的代码调试设备可以是智能手机、个人计算机和服务器等设备,在此不做具体限制。
49.如图1所示,该联邦学习编译器的代码调试设备可以包括:处理器1001,例如cpu,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
50.本领域技术人员可以理解,图1中示出的设备结构并不构成对联邦学习编译器的代码调试设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
51.如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及联邦学习编译器的代码调试程序。其中,操作系统是管理和控制设备硬件和软件资源的程序,支持联邦学习编译器的代码调试程序以及其它软件或程序的运行。在图1所示的设备中,用户接口1003主要用于与客户端进行数据通信;网络接口1004主要用于服务器建立通信连接;处理器1001可以用于调用存储器1005中存储的联邦学习编译器的代码调试程序,并执行以下操作:
52.接收针对编译前代码中第一位置处代码的调试指令;
53.针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果,其中,所述编译后代码为所述编译前代码经过所述联邦学习编译器编译得到;
54.根据所述第一调试结果得到所述编译前代码对应的第二调试结果,并显示所述第二调试结果。
55.进一步地,当所述方法应用于联邦学习代码执行方时,所述代码执行方与联邦学习流程发起方通信连接,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
56.将所述第一位置发送给所述流程发起方,以供所述流程发起方对所述编译前代码进行编译得到所述编译后代码后,将所述编译后代码和所述编译后代码中与所述第一位置对应的第二位置返回给所述代码执行方;
57.接收所述编译后代码和所述第二位置,并针对所述编译后代码中所述第二位置处代码执行所述调试指令得到第一调试结果。
58.进一步地,当所述方法应用于联邦学习流程发起方时,所述流程发起方与联邦学习代码执行方通信连接,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
59.对所述编译前代码进行编译得到所述编译后代码后,将所述编译后代码和所述编
译后代码中与所述第一位置对应的第二位置发送给所述代码执行方,以供所述代码执行方接收到所述编译后代码和所述第二位置后,针对所述编译后代码中所述第二位置处代码执行所述调试指令得到第一调试结果,并返回所述第一调试结果;
60.接收所述代码执行方返回的所述第一调试结果。
61.进一步地,当所述调试指令为在所述编译前代码中第一位置处设置断点的指令时,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
62.在所述编译后代码中与所述第一位置对应的第二位置处设置实际断点;
63.运行所述编译后代码并在所述实际断点处停止,将所述编译后代码中所述实际断点之后的第一代码行作为第一调试结果;
64.所述根据所述第一调试结果得到所述编译前代码对应的第二调试结果的步骤包括:
65.将所述编译前代码中与所述第一代码行对应的第二代码行作为第二调试结果。
66.进一步地,当所述调试指令为查看所述编译前代码中第一位置处变量值的查看指令时,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
67.运行所述编译后代码后获取所述编译后代码中与所述第一位置对应的第二位置处的变量值,将所述变量值作为第一调试结果;
68.所述根据所述第一调试结果得到所述编译前代码对应的第二调试结果的步骤包括:
69.将所述第一调试结果作为所述编译前代码对应的第二调试结果。
70.进一步地,当所述调试指令为更改所述编译前代码中第一位置处变量值的更改指令时,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
71.将所述编译后代码中与所述第一位置对应的第二位置处变量值更改为所述更改指令中携带的目标变量值;
72.运行更改变量值后的编译后代码得到运行结果,将所述运行结果作为第一调试结果;
73.所述根据所述第一调试结果得到所述编译前代码对应的第二调试结果的步骤包括:
74.将所述第一调试结果作为所述编译前代码对应的第二调试结果。
75.进一步地,当所述调试指令为针对所述编译前代码中第一位置处代码的查看当前代码指令时,所述针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果的步骤包括:
76.获取所述编译后代码中与所述第一位置对应的第二位置处代码行的前后预设行数范围的第一代码段,将所述第一代码段作为所述第一调试结果;
77.所述根据所述第一调试结果得到所述编译前代码对应的第二调试结果的步骤包括:
78.将所述编译前代码中与所述第一代码段对应的第二代码段作为第二调试结果。
79.基于上述的结构,提出联邦学习编译器的代码调试方法的各实施例。
80.参照图2,图2为本发明联邦学习编译器的代码调试方法第一实施例的流程示意图。需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。本发明联邦学习编译器的代码调试方法执行主体可以是智能手机、个人计算机和服务器等设备,以下各个实施例中以调试方为执行主体进行描述。在本实施例中,联邦学习编译器的代码调试方法包括:
81.步骤s10,接收针对编译前代码中第一位置处代码的调试指令;
82.联邦学习即多个设备作为参与方,联合进行建模的方案,本发明各实施例可应用于各种类型的联邦学习,如横向联邦学习和纵向联邦学习,也即,对联邦学习类型不作限制。在联邦学习编译器方案中,联邦学习流程由参与联邦学习的一方发起(以下称为流程发起方),具体由哪个参与方发起,在各实施例中并不做限制。例如,在纵向联邦学习中,一般可由guest(参与方中的数据应用方)作为流程发起方。
83.流程发起方根据代码中的with role语句确定接下来的代码由哪个参与方(也称站点)来执行,执行代码的参与方称为代码执行方。例如,g表示guest,h表示host(数据拥有方),with role(g,h)表示接下来公共部分的代码站点g和h都会执行,with role(g)表示该子block代码只由g站点执行。
84.在本实施例中,调试方即调试人员选择进行代码调试操作的一个参与方,可以是流程发起方,也可以是代码执行方。
85.本实施例代码调试方法可以是对现有的python调试工具进行改进得到的,例如,可以是对pdb(pdb是python自带的一个包,为python程序提供了一种交互的源代码调试功能)进行改进,但并不限定于pdb。
86.调试方接收针对编译前代码中第一位置处代码的调试指令。其中,根据调试工具提供的代码调试交互式方法不同,调试指令的触发方式不同,在本实施例中,对调试指令的触发方式并不做限制。例如,在一实施方式中,调试方可显示调试交互界面,界面中包括供调试人员输入调试命令的输入框,预先规定了不同的命令对应的调试指令类型,调试人员输入相应的命令,即可触发对应的调试指令。调试指令可包括设置断点、查看变量值、查看当前代码、单步执行等等常用的调试指令。调试指令指向编译前代码中的某一位置处的代码,为示区别将该位置称为第一位置。具体地,第一位置可采用代码行的编号来表示,调试指令可以是指向一个或多行代码,对应地第一位置可以由一个编号或多个编号来表示;或者,在其他实施方式中,也可以是采用其他方式来表示第一位置,例如代码行本身。
87.步骤s20,针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果,其中,所述编译后代码为所述编译前代码经过所述联邦学习编译器编译得到;
88.调试方针对编译后代码中与第一位置对应的第二位置处代码执行该调试指令得到第一调试结果。其中,编译后代码为编译前代码经过联邦学习编译器编译得到。当调试方不是流程发起方时,该编译后代码可由流程发起方编译后发送给调试方;当调试方是流程发起方,但不是代码执行方时,调试方可将编译后代码发送给代码执行方,控制代码执行方来执行调试指令。
89.编译前代码的各个代码行与编译后代码的各个代码行之间具有对应关系,即编译
前代码中某一位置的代码行经编译后,即得到编译后代码中某一位置的代码行。根据该对应关系,可以确定编译前代码中第一位置所对应的编译后代码中的第二位置。由于现有的调试功能只能够对编译后的代码进行调试,因此,在接收到针对编译前代码的调试指令后,调试方实际上要在编译后的代码中执行该调试指令,并且,对针对与第一位置对应的第二位置处代码执行该调试指令,从而能够准确地达到调试编译后代码的目的。调试方针对编译后代码中第二位置处代码执行调试指令的方式,可采用现有调试工具中执行调试指令的方式,在此不进行详细赘述。
90.调试方对编译后代码执行调试指令后,得到调试结果,该调试结果与编译后代码相对应的(以下称为第一调试结果)。可以理解的是,不同的调试指令对应不同形式的调试结果;例如,设置断点的调试指令,对应的调试结果可以是运行代码后停止位置的代码行;查看变量值的调试指令,对应的调试结果可以是所要查看的变量名对应的变量值。
91.步骤s30,根据所述第一调试结果得到所述编译前代码对应的第二调试结果,并显示所述第二调试结果。
92.调试方根据第一调试结果得到编译前代码对应的第二调试结果。其中,存在两种可能,一种是第一调试结果中没有编译后代码相关的内容,可以直接展示给调试人员,例如,运行成功和运行失败等与代码内容无关的结果;对于这种第一调试结果,可直接将第一调试结果作为第二调试结果。另一种是第一调试结果涉及到编译后代码中的内容,例如,第一调试结果是编译后代码中的某一代码行;对于这种第一调试结果,可根据编译前代码与编译后代码之间的对应关系,将第一调试结果中涉及到编译后代码内容的部分,转换为编译前代码对应的内容,将转换后的结果作为第二调试结果。
93.调试方在得到第二调试结果后,显示第二调试结果,使得调试人员能够直接、直观地了解到对编译前代码的调试结果。
94.在本实施例中,通过接收针对编译前代码中第一位置处代码的调试指令,针对编译后代码中与该第一位置对应的第二位置处代码执行该调试指令得到第一调试结果,再根据第一调试结果得到与编译前代码对应的第二调试结果,并显示第二调试结果。也即,本实施例中,利用编译前代码和编译后代码之间的位置对应关系,通过实际上调试编译后的代码来实现调试功能,但给调试人员提供了调试编译前代码的途径,并能够展示对编译前代码的调试效果,从而实现了在联邦学习编译器方案下,调试人员能够直接调试由mpc修饰的编译前代码,能够直接、直观地了解到对编译前代码的调试结果,相比于调试复杂的编译后代码,调试效率更高,调试体验更好。
95.进一步地,基于上述第一实施例,提出本发明联邦学习编译器的代码调试方法第二实施例,在本实施例中,当所述方法应用于联邦学习代码执行方时,所述代码执行方与联邦学习流程发起方通信连接,所述步骤s20包括:
96.步骤s201,将所述第一位置发送给所述流程发起方,以供所述流程发起方对所述编译前代码进行编译得到所述编译后代码后,将所述编译后代码和所述编译后代码中与所述第一位置对应的第二位置返回给所述代码执行方;
97.在本实施例中,当调试方是代码执行方,但不是流程发起方时,调试方中存储有一份编译前代码。该编译前代码可以是需要在该调试方执行的代码段。调试方在接收到针对该编译前代码中第一位置处代码的调试指令后,将第一位置发送给流程发起方。流程发起
方对编译前代码采用联邦学习编译器进行编译,得到编译后代码,确定该编译后代码是由该调试方执行时,将该编译后代码发送给调试方。流程发起方在接收到调试方发送的第一位置后,可确定编译后代码中与该第一位置对应的第二位置,将该第二位置返回给代码执行方,也即调试方。
98.需要说明的是,流程发起方可以将编译后代码和第二位置一起发送给调试方,也可以是分开发,在本实施例中,并不限制流程发起方发送编译后代码和第二位置的时机。
99.需要说明的是,在其他实施方式中,流程发起方也可以在发送编译后代码时,将编译后代码与编译前代码中各个代码行的全部对应关系都发送给调试方,那么,调试方可以直接根据该对应关系确定第二位置,而无需将第一位置发送给流程发起方由流程发起方来确定第二位置。
100.步骤s202,接收所述编译后代码和所述第二位置,并针对所述编译后代码中所述第二位置处代码执行所述调试指令得到第一调试结果。
101.调试方接收流程发起方发送的编译后代码和第二位置,并针对编译后代码中该第二位置处的代码执行该调试指令,得到第一调试结果。
102.进一步地,当第一调试结果中包括了编译后代码中的相关内容时,调试方可将该相关内容在编译后代码中的位置发送给流程发起方,由流程发起方确定该位置在编译前代码中对应的位置,并将确定的编译前代码中的位置发送给调试方;调试方将该第一调试结果中该相关内容替换为编译前代码中该位置处的内容,替换后的调试结果作为第二调试结果。
103.在本实施例中,通过将第一位置发送给流程发起方,以供流程发起方对编译前代码进行编译得到编译后代码后,将编译后代码和编译后代码中与第一位置对应的第二位置返回给代码执行方(也即调试方),调试方接收编译后代码和第二位置,并针对编译后代码中第二位置处代码执行调试指令得到第一调试结果,使得调试方不是流程发起方时,也能够准确地对编译后代码进行调试,从而实相应的调试效果。
104.进一步地,基于上述第一实施例,提出本发明联邦学习编译器的代码调试方法第三实施例,在本实施例中,当所述方法应用于联邦学习流程发起方时,所述流程发起方与联邦学习代码执行方通信连接,所述步骤s20包括:
105.步骤s211,对所述编译前代码进行编译得到所述编译后代码后,将所述编译后代码和所述编译后代码中与所述第一位置对应的第二位置发送给所述代码执行方,以供所述代码执行方接收到所述编译后代码和所述第二位置后,针对所述编译后代码中所述第二位置处代码执行所述调试指令得到第一调试结果,并返回所述第一调试结果;
106.在本实施例中,当调试方是流程发起方,但不是代码执行方时,调试方对编译前代码采用联邦学习编译器进行编译,得到编译后代码,确定该编译后代码是由其他方执行(也即该编译后代码的代码执行方)时,将该编译后代码发送给代码调试方,并在接收到针对该编译前代码中第一位置处代码的调试指令后,确定编译后代码中与该第一位置对应的第二位置,将第二位置发送给代码执行方。当代码执行方愿意分享代码和数据的调试场景下,代码执行方在接收到编译后代码和第二位置后,针对编译后代码中该第二位置处的代码执行该调试指令,得到第一调试结果,并将该第一调试结果返回给调试方。
107.调试方发送第二位置时,可将调试指令发送给代码执行方。发送方式可以是采用
网络请求的方式。
108.需要说明的是,调试方可以将编译后代码和第二位置一起发送给代码执行方,也可以是分开发,在本实施例中,并不限制调试方发送编译后代码和第二位置的时机。
109.步骤s212,接收所述代码执行方返回的所述第一调试结果。
110.调试方接收代码执行方返回的第一调试结果。
111.在本实施例中,通过对编译前代码进行编译得到编译后代码后,将该编译后代码和该编译后代码中与该第一位置对应的第二位置发送给代码执行方,以供代码执行方在接收该编译后代码和第二位置后,针对编译后代码中第二位置处代码执行调试指令得到第一调试结果,并将第一结果返回给调试方,使得代码不在调试方本地执行时,也能够在调试方调试该代码。
112.进一步地,基于上述第一、第二和/或第三实施例,提出本发明联邦学习编译器的代码调试方法第四实施例,在本实施例中,当所述调试指令为在所述编译前代码中第一位置处设置断点的指令时,所述步骤s20包括:
113.步骤s221,在所述编译后代码中与所述第一位置对应的第二位置处设置实际断点;
114.在本实施例中,设置断点调试功能的效果可以是调试人员在两个代码行之间键入断点,然后运行代码并在该断点处停止,最终显示断点之后的代码行。为实现调试人员可对编译前代码使用该调试功能,具体地,当调试指令为在编译前代码中第一位置处设置断点的指令时,也即当调试指令是设置断点指令时,调试方在编译后代码中与第一位置对应的第二位置处设置实际断点。需要说明的是,当调试方不是代码执行方时,由调试方将编译后代码以及确定的第二位置发送给代码执行方,由代码执行方在编译后代码中第二位置处设置实际断点。
115.步骤s222,运行所述编译后代码并在所述实际断点处停止,将所述编译后代码中所述实际断点之后的第一代码行作为第一调试结果;
116.调试方运行编译后代码,并在该实际断点处停止,将该编译后代码中该实际断点处之后的一行代码行(以下称为第一代码行以示区分)作为第一调试结果。需要说明的是,当调试方不是代码执行方时,调试方可向代码执行方发送运行指令,以供代码执行方运行编译后代码并在实际断点处停止,并将第一调试结果返回给调试方。
117.所述步骤s30包括:
118.步骤s301,将所述编译前代码中与所述第一代码行对应的第二代码行作为第二调试结果。
119.调试方在得到第一调试结果后,可查找编译前代码中与作为第一调试结果的第一代码行对应的第二代码行,将该第二代码行作为编译前代码对应的第二调试结果。可以理解的是,第一代码行也就是第二代码行编译后得到的。调试方将作为第二调试结果的第二代码行显示给调试人员,以使得调试人员能够在直接、直观地看到对编译前代码设置断点的调试效果,从而实现了对编译前代码的设置断点调试功能。
120.进一步地,在一实施方式中,当所述调试指令为查看所述编译前代码中第一位置处变量值的查看指令时,所述步骤s20包括:
121.步骤s231,运行所述编译后代码后获取所述编译后代码中与所述第一位置对应的
第二位置处的变量值,将所述变量值作为第一调试结果;
122.当调试指令为查看编译前代码中第一位置处变量值的查看指令时,调试方可运行一遍编译后代码,再获取编译后代码中与第一位置对应的第二位置处的变量值,将该变量值作为第一调试结果。需要说明的是,当调试方不是代码执行方时,调试方可将编译后代码以及确定的第二位置发送给代码执行方,以供代码执行方运行编译后代码并在得到第一调试结果后将第一调试结果返回给调试方。
123.所述步骤s30包括:
124.步骤s311,将所述第一调试结果作为所述编译前代码对应的第二调试结果。
125.调试方将第一调试结果作为编译前代码对应的第二调试结果,并向调试人员显示该第二调试结果,也即,调试人员想查看编译前代码中某个变量的值时,调试方实际是将编译后代码中对应位置变量的值展示给调试人员,从而使得调试人员能够直接、直观地看到对编译前代码查看变量值的调试效果,从而实现了对编译前代码的查看变量值调试功能。
126.进一步地,在一实施方式中,当所述调试指令为更改所述编译前代码中第一位置处变量值的更改指令时,所述步骤s20包括:
127.步骤s241,将所述编译后代码中与所述第一位置对应的第二位置处变量值更改为所述更改指令中携带的目标变量值;
128.当调试指令为更改编译前代码中第一位置处变量值的更改指令时,调试方可查找到编译后代码中与第一位置对应的第二位置处的变量值,将该变量值更改为更改指令中所携带的目标变量值。
129.步骤s242,运行更改变量值后的编译后代码得到运行结果,将所述运行结果作为第一调试结果;
130.调试方运行更改变量值后的编译后代码得到运行结果,将该运行结果作为第一调试结果。其中,运行结果可以是运行失败或运行成功的结果。
131.需要说明的是,当调试方不是代码执行方时,调试方可将编译后代码和确定的第二位置以及更改指令发送给代码执行方,以供代码执行方将编译后代码中第二位置处变量值修改为更改指令中携带的目标变量值,并运行更改变量值后的编译后代码,得到第一调试结果后返回给调试方。
132.所述步骤s30包括:
133.步骤s321,将所述第一调试结果作为所述编译前代码对应的第二调试结果。
134.调试方可直接将第一调试结果作为编译前代码对应的第二调试结果,也即,对编译后代码的运行结果也可以作为对编译前代码的运行结果显示给调试人员,从而使得调试人员能够直接、直观地看到对编译前代码更改变量值的调试效果,从而实现了对编译前代码的更改变量值调试功能。
135.进一步地,在一实施方式中,当所述调试指令为针对所述编译前代码中第一位置处代码的查看当前代码指令时,所述步骤s20包括:
136.步骤s251,获取所述编译后代码中与所述第一位置对应的第二位置处代码行的前后预设行数范围的第一代码段,将所述第一代码段作为所述第一调试结果;
137.当调试指令为查看编译前代码中第一位置处代码的查看当前代码指令时,第一位置指向编译前代码中的一个代码行,调试方可确定编译后代码中与该第一位置对应的第二
位置处的代码行,并获取该代码行的前后预设行数范围的第一代码段。其中,预设行数范围是调试工具中预先设置的,例如,可以设置为5行,那么调试方获取该代码行的前面5行代码和后面5行代码,一共11行代码作为第一代码段。
138.调试方将第一代码段作为第一调试结果。需要说明的是,当调试方不是代码执行方时,调试方可将编译后代码以及确定的第二位置发送给代码执行方,以供代码执行方得到第一调试结果后将第一调试结果返回给调试方。
139.所述步骤s30包括:
140.步骤s331,将所述编译前代码中与所述第一代码段对应的第二代码段作为第二调试结果。
141.调试方根据编译前代码与编译后代码的各个代码行的对应关系,确定编译前代码中与该第一代码段对应的第二代码段,将该第二代码段作为编译前代码对应的第二调试结果。可以理解的是,第一代码段也就是第二代码段编译后得到的。调试方将第二调试结果显示给调试人员,以使得调试人员能够直接、直观地看到对编译前代码查看当前代码的调试效果,从而实现了对编译前代码的查看当前代码调试功能。
142.在其他实施方式中,调试指令还可以是单步执行(单步调试)、进入函数调试和查看调用栈等调试指令。具体实施细节类似上述设置断点、查看变量值、更改变量值等调试指令的实施细节。
143.在一实施方式中,如图3所示,为本发明实施例涉及的一种代码调试流程示意图,联邦学习程序流程由服务器g发起,本地服务器(调试方)角色是g:
144.1、在代码中设置断点,并记录断点位置。
145.2、记录断点位置之前定义的变量名。
146.3、编译代码后,生成一系列op,记录步骤1断点位置对应的op的位置,并打上实际断点;记录步骤2中的变量对应的op。
147.4、开始执行代码,代码会在步骤3中的实际断点处停止,但通过修改pdb,给用户显示的是在步骤1中设置的断点位置。
148.5、在断点处,用户查看变量值,查看的是对应op的值;查看当前代码,查看的是mpc修饰符下的编译前的代码;动态改变变量,改变的是对应op的变量的值;单步执行,对用户显示mpc修饰符下的编译前的代码逐行运行,实际是编译后的op的执行。
149.此外本发明实施例还提出一种联邦学习编译器的代码调试装置,参照图4,所述装置包括:
150.接收模块10,用于接收针对编译前代码中第一位置处代码的调试指令;
151.调试模块20,用于针对编译后代码中与所述第一位置对应的第二位置处代码执行所述调试指令得到第一调试结果,其中,所述编译后代码为所述编译前代码经过所述联邦学习编译器编译得到;
152.显示模块30,用于根据所述第一调试结果得到所述编译前代码对应的第二调试结果,并显示所述第二调试结果。
153.进一步地,当所述方法应用于联邦学习代码执行方时,所述代码执行方与联邦学习流程发起方通信连接,所述调试模块20包括:
154.第一发送单元,用于将所述第一位置发送给所述流程发起方,以供所述流程发起
方对所述编译前代码进行编译得到所述编译后代码后,将所述编译后代码和所述编译后代码中与所述第一位置对应的第二位置返回给所述代码执行方;
155.调试单元,用于接收所述编译后代码和所述第二位置,并针对所述编译后代码中所述第二位置处代码执行所述调试指令得到第一调试结果。
156.进一步地,当所述方法应用于联邦学习流程发起方时,所述流程发起方与联邦学习代码执行方通信连接,所述调试模块20包括:
157.第二发送单元,用于对所述编译前代码进行编译得到所述编译后代码后,将所述编译后代码和所述编译后代码中与所述第一位置对应的第二位置发送给所述代码执行方,以供所述代码执行方接收到所述编译后代码和所述第二位置后,针对所述编译后代码中所述第二位置处代码执行所述调试指令得到第一调试结果,并返回所述第一调试结果;
158.接收单元,用于接收所述代码执行方返回的所述第一调试结果。
159.进一步地,当所述调试指令为在所述编译前代码中第一位置处设置断点的指令时,所述调试模块20包括:
160.设置单元,用于在所述编译后代码中与所述第一位置对应的第二位置处设置实际断点;
161.第一确定单元,用于运行所述编译后代码并在所述实际断点处停止,将所述编译后代码中所述实际断点之后的第一代码行作为第一调试结果;
162.所述显示模块30包括:
163.第二确定单元,用于将所述编译前代码中与所述第一代码行对应的第二代码行作为第二调试结果。
164.进一步地,当所述调试指令为查看所述编译前代码中第一位置处变量值的查看指令时,所述调试模块20包括:
165.第一运行单元,用于运行所述编译后代码后获取所述编译后代码中与所述第一位置对应的第二位置处的变量值,将所述变量值作为第一调试结果;
166.所述显示模块30包括:
167.第三确定单元,用于将所述第一调试结果作为所述编译前代码对应的第二调试结果。
168.进一步地,当所述调试指令为更改所述编译前代码中第一位置处变量值的更改指令时,所述调试模块20包括:
169.更改单元,用于将所述编译后代码中与所述第一位置对应的第二位置处变量值更改为所述更改指令中携带的目标变量值;
170.第二运行单元,用于运行更改变量值后的编译后代码得到运行结果,将所述运行结果作为第一调试结果;
171.所述显示模块30包括:
172.第四确定单元,用于将所述第一调试结果作为所述编译前代码对应的第二调试结果。
173.进一步地,当所述调试指令为针对所述编译前代码中第一位置处代码的查看当前代码指令时,所述调试模块20包括:
174.获取单元,用于获取所述编译后代码中与所述第一位置对应的第二位置处代码行
的前后预设行数范围的第一代码段,将所述第一代码段作为所述第一调试结果;
175.所述显示模块30包括:
176.第五确定单元,用于将所述编译前代码中与所述第一代码段对应的第二代码段作为第二调试结果。
177.本发明联邦学习编译器的代码调试装置的具体实施方式的拓展内容与上述联邦学习编译器的代码调试方法各实施例基本相同,在此不做赘述。
178.此外,本发明实施例还提出一种计算机可读存储介质,所述存储介质上存储有联邦学习编译器的代码调试程序,所述联邦学习编译器的代码调试程序被处理器执行时实现如上所述的联邦学习编译器的代码调试方法的步骤。
179.此外,本发明实施例还提出一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上所述的联邦学习编译器的代码调试方法的步骤。
180.本发明联邦学习编译器的代码调试设备、计算机可读存储介质和计算机程序产品的各实施例,均可参照本发明联邦学习编译器的代码调试方法各实施例,此处不再赘述。
181.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
182.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
183.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各实施例所述的方法。
184.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

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

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

相关文献