CN113282487A - 编程语言调试方法、装置及终端设备 - Google Patents
编程语言调试方法、装置及终端设备 Download PDFInfo
- Publication number
- CN113282487A CN113282487A CN202110491016.7A CN202110491016A CN113282487A CN 113282487 A CN113282487 A CN 113282487A CN 202110491016 A CN202110491016 A CN 202110491016A CN 113282487 A CN113282487 A CN 113282487A
- Authority
- CN
- China
- Prior art keywords
- file
- compiler
- programming language
- debugging
- interface
- 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
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本申请适用于计算机技术领域,提供了编程语言调试方法、装置及终端设备,包括:在第一编译器中打开第一文件,所述第一编译器能够编译所述第一文件;将所述接口设置为断点,并进入所述第一编译器的调试模式;在第二编译器中将指定的可执行文件附加到进程;在所述第二编译器打开的动态链接库文件中,对与所述接口对应的代码进行断点设置,其中,所述动态链接库文件由所述第二文件封装得到,所述第二编译器能够编译所述第二文件;若在所述第一编译器的调试模式中接收到运行指令,则对所述第一文件和所述第二文件执行运行动作。通过上述方法,能够提高调试的效率以及准确率。
Description
技术领域
本申请属于计算机技术领域,尤其涉及编程语言调试方法、装置、终端设备及计算机可读存储介质。
背景技术
目前,在将编写的程序投入实际运行前,需要对该程序进行调试。通过对程序的调试,能够查找程序中的语法错误和逻辑错误。研发人员再根据查找结果进行错误的修正,从而保证计算机信息系统的正确性。
现有的程序调试方法,通常是对同一种编写语言编写的程序进行调试。但由于编程语言有多种,因此,研发人员可能通过对一个基础语言版本进行二次开发来得到一个新的程序。也即,一个程序中包含2种编程语言。
为了能够查找出包含2种编程语言的程序中的错误,现有方法只能通过输出变量值,或者记录到日志的方式来查找,故查找效率低下。
发明内容
本申请实施例提供了编程语言调试方法,可以解决现有方法在查找包含2种编程语言的程序中的错误时,查找效率低下的问题。
第一方面,本申请实施例提供了一种编程语言调试方法,包括:
在第一编译器中打开第一文件,所述第一编译器能够编译所述第一文件,所述第一文件采用第一编程语言编写,所述第一文件包含用于调用第二文件的代码的接口,其中,所述第二文件采用第二编程语言编写,所述第二编程语言与所述第一编程语言不同;
将所述接口设置为断点,并进入所述第一编译器的调试模式;
在第二编译器中将指定的可执行文件附加到进程,其中,所述指定的可执行文件为能够运行所述第一文件的文件,所述第二编译器与所述第一编译器不同;
在所述第二编译器打开的动态链接库文件中,对与所述接口对应的代码进行断点设置,其中,所述动态链接库文件由所述第二文件封装得到,所述第二编译器能够编译所述第二文件;
若在所述第一编译器的调试模式中接收到运行指令,则对所述第一文件和所述第二文件执行运行动作。
第二方面,本申请实施例提供了一种编程语言调试装置,包括:
第一文件打开模块,用于在第一编译器中打开第一文件,所述第一编译器能够编译所述第一文件,所述第一文件采用第一编程语言编写,所述第一文件包含用于调用第二文件的代码的接口,其中,所述第二文件采用第二编程语言编写,所述第二编程语言与所述第一编程语言不同;
第一文件的断点设置模块,用于将所述接口设置为断点,并进入所述第一编译器的调试模式;
文件附加到进程模块,用于在第二编译器中将指定的可执行文件附加到进程,其中,所述指定的可执行文件为能够运行所述第一文件的文件,所述第二编译器与所述第一编译器不同;
第二文件的断点设置模块,用于在所述第二编译器打开的动态链接库文件中,对与所述接口对应的代码进行断点设置,其中,所述动态链接库文件由所述第二文件封装得到,所述第二编译器能够编译所述第二文件;
运行模块,用于若在所述第一编译器的调试模式中接收到运行指令,则对所述第一文件和所述第二文件执行运行动作。
第三方面,本申请实施例提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面所述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的方法。
第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面所述的方法。
本申请实施例与现有技术相比存在的有益效果是:
本申请实施例中,由于将第二文件封装为动态链接库文件,而能够运行第一文件的指定的可执行文件能够识别动态链接库文件,因此,即使第二文件采用第二编程语言编写,该指定的可执行文件也能够识别该第二文件。故,在第二编译器将该指定的可执行文件附加到进程、第一编译器在采用第一编程语言编写的第一文件中将用于调用第二文件的代码的接口设置为断点并进入调试模式、以及在动态链接库文件将相同的接口设置为断点之后,终端设备能够根据接收到的运行指令对第一文件和第二文件执行运行动作。由于在本申请实施例中,运行第一文件和第二文件是在调试模式下运行,即可以单步执行代码,因此,无需进行日志记录或查看控制台输出的变量就能查查看变量是否存在错误,从而不仅实现了跨语言之间的调试,也极大提高了调试的效率以及准确率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1是本申请实施例一提供的一种编程语言调试方法的流程图;
图2是本申请实施例二提供的一种编程语言调试方法的流程图;
图3是本申请实施例三提供的一种编程语言调试装置的结构示意图;
图4是本申请实施例四提供的一种终端设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。
实施例一:
现有方法中,当一个程序包含2种编程语言时,研发人员只能通过日志或者控制台的输出查看变量是否存在错误。但由于日志或控制台输出的数据量较多,因此,当研发人员从大面积的数据中进行信息查找时,需要花费大量的时间,且可能存在查找遗漏的问题。
为了解决上述技术问题,本申请实施例提供了一种编程语言调试方法,在该方法中,将第二编程语言编写的文件封装为动态链接库文件后,第一编程语言再通过调用动态链接库文件来实现对第二编程语言的调用。从而实现了跨语言的调用。
下面结合附图对本申请实施例提供的编程语言调试方法进行描述。
图1示出了本申请实施例提供的一种编程语言调试方法的流程图,该方法应用于终端设备,详述如下:
步骤S11,在第一编译器中打开第一文件,上述第一编译器能够编译上述第一文件,上述第一文件采用第一编程语言编写,上述第一文件包含用于调用第二文件的代码的接口,其中,上述第二文件采用第二编程语言编写,上述第二编程语言与上述第一编程语言不同。
具体地,获取采用第一编程语言编写的第一文件,以及采用第二编程语言编写的第二文件。上述的第一编程语言和第二编程语言为不同的编程语言,例如,若第一编程语言为Python语言,则第二编程语言可以为C语言,也可以为C++语言等。
在本实施例中,第一编译器能够编译采用第一编程语言编写的各个文件,例如,假设第一编程语言为Python语言,则第一编译器可以为“PyCharm”,该“PyCharm”为JetBrains公司开发的是python集成开发环境。假设该第一编程语言为Java语言,则第一编译器可以为“Eclipse”(或“Eclipse Java Neon”)。
本实施例的第一文件包含一个或多个用于调用第二文件的代码的接口(当然,接口不同,调用的第二文件的代码也不同),这里的接口通常指接口的名称。例如,假设第二文件中包含用于实现登录功能的代码,这些用于实现登录功能的代码对应的函数名.为“Qtlogin”,若第一文件需要调用第二文件的登录功能,则该第一文件包含接口名称“Qtlogin”。
步骤S12,将上述接口设置为断点,并进入上述第一编译器的调试模式。
其中,调试模式是指Debug模式,在Debug模式中,遇到代码中设置的断点会停下来,然后可以单步执行代码。而运行模式(Run模式)是直接运行程序,遇到断点不会停止。
本实施例中,在打开第一文件后,显示该第一文件包含的代码,再将第一文件中用于调用第二文件的代码的接口设置为断点。在设置断点时,可通过终端设备自动设置,也可通过用户手动设置。
若通过终端设备自动设置,则由终端设备自动搜索接口,再将搜索到的接口所在的行自动设置为“断点”,即自动将搜索到的接口所在的行的代码自动设置为“断点”。需要指出的是,在终端设备搜索接口之前,也可接收用户输入的接口标识(如接收用户输入的接口名称),之后,终端设备根据接收到的接口标识搜索对应的接口。这样,能够提高设置的断点的准确性。
若通过用户手动设置,则检测用户在屏幕上执行点击动作时的点击位置,将该位置与代码的行号的位置进行比较,若判断出该位置在某个行号的位置的范围内,则判定用户希望将该行号所在的行的代码设置为断点。
步骤S13,在第二编译器中将指定的可执行文件附加到进程,其中,上述指定的可执行文件为能够运行上述第一文件的文件,上述第二编译器与上述第一编译器不同。
其中,第二编译器为与第一编译器不同的编译器。例如,若第二编程语言为C语言,或者为C++语言,则第二编译器为VS2010或VS2015。
具体地,指定的可执行文件根据第一编程语言确定,以运行第一文件。例如,若第一编程语言为Java语言,则指定的可执行文件通常为“javaw.exe”。若第一编程语言为Python语言,则指定的可执行文件通常为“python.exe”。
步骤S14,在上述第二编译器打开的动态链接库文件中,对与上述接口对应的代码进行断点设置,其中,上述动态链接库文件由上述第二文件封装得到,上述第二编译器能够编译上述第二文件。
具体地,预先对第二文件进行封装,得到对应的动态链接库文件。这样,由于该第二编译器已将指定的可执行文件附加到进程,而指定的可执行文件可识别动态链接库文件,因此,在该第二编译器打开该动态链接库文件后,该指定的可执行文件能够识别该动态库文件,即能够识别该动态库文件对应的第二文件。
在本实施例中,在动态链接库文件(即第二文件)中查找与第一文件中设置为断点的接口相同的接口,并将在该动态链接库文件中查找到的接口也设置为断点,以对该动态链接库文件的接口进行调试。
步骤S15,若在上述第一编译器的调试模式中接收到运行指令,则对上述第一文件和上述第二文件执行运行动作。
具体地,在第一编译器的调试模式显示“运行”按键,当用户点击该“运行”按键后,终端设备接收到运行指令,之后,将运行第一文件中采用第一编程语言编写的代码和运行第二文件中采用第二编程语言编写的代码。
本申请实施例中,由于将第二文件封装为动态链接库文件,而能够运行第一文件的指定的可执行文件能够识别动态链接库文件,因此,即使第二文件采用第二编程语言编写,该指定的可执行文件也能够识别该第二文件。故,在第二编译器将该指定的可执行文件附加到进程、第一编译器在采用第一编程语言编写的第一文件中将用于调用第二文件的代码的接口设置为断点并进入调试模式、以及在动态链接库文件将相同的接口设置为断点之后,终端设备能够根据接收到的运行指令对第一文件和第二文件执行运行动作。由于在本申请实施例中,运行第一文件和第二文件是在调试模式下运行,即可以单步执行代码,因此,无需进行日志记录或查看控制台输出的变量就能查查看变量是否存在错误,从而不仅实现了跨语言之间的调试,也极大提高了调试的效率以及准确率。
实施例二:
图2示出了本申请实施例提供的另一种编程语言调试方法的流程图,在本实施例中,主要对上述步骤S13进行细化,其余步骤与上述实施例一的相同,此处不再赘述。
步骤S21,在第一编译器中打开第一文件,上述第一编译器能够编译上述第一文件,上述第一文件采用第一编程语言编写,上述第一文件包含用于调用第二文件的代码的接口,其中,上述第二文件采用第二编程语言编写,上述第二编程语言与上述第一编程语言不同。
步骤S22,将上述接口设置为断点,并进入上述第一编译器的调试模式。
步骤S23,检测上述第一编译器的调试模式下是否有指定的可执行文件启动,若有指定的可执行文件启动,则在上述第二编译器将上述指定的可执行文件附加到进程,其中,上述指定的可执行文件为能够运行上述第一文件的文件,上述第二编译器与上述第一编译器不同。
具体地,若在第一编译器的调试模式对应的显示界面生成指定的可执行文件的信息,则判定指定的可执行文件启动。例如,假设指定的可执行文件为“javaw.exe”,若在第一编译器的调试模式对应的显示界面生成包含“javaw.exe”的信息,则判定该“javaw.exe”启动。
本实施例中,只有在判断出指定的可执行文件在第一编译器中启动之后,才能在第二编译器中查找到该指定的可执行文件,进而才能成功将该指定的可执行文件附加到进程,因此,先检测指定的可执行文件是否启动再执行将该指定的可执行文件附加到进程的动作,能够提高将该指定的可执行文件附加到进程的成功率。
在一些实施例中,可在接收到用户发出的指令后,再将指定的可执行文件附加到进程,此时,上述步骤S23中若有指定的可执行文件启动,则在上述第二编译器将上述指定的可执行文件附加到进程,包括:
若在第一编译器的调试模式下有指定的可执行文件启动,且在第二编译器中接收到用于将指定的可执行文件附加到进程的指令,则检测上述指令携带的可执行文件的标识所指示的可执行文件是否与启动的指定的可执行文件相同,若相同,则在上述第二编译器将上述指定的可执行文件附加到进程。
具体地,用户可通过执行以下操作发出用于将指定的可执行文件附加到进程的指令:用户点击第二编译器的顶部的“调试”菜单,再点击“附加到进程”,在弹出的页面中查找指定的可执行文件,再点击“附加”按钮。
本实施例中,由于在接收到用于将指定的可执行文件附加到进程的指令后,先判断该指令指示的可执行文件与第一编译器中启动的指定的可执行文件是否相同,且只有在两者相同时,才执行附加到进程的动作,因此,能够避免附加错误的可执行文件到进程,从而提高附加到进程的成功率。
在一些实施例中,若指令携带的可执行文件的标识所指示的可执行文件与启动的指定的可执行文件不相同,则发出可执行文件附加错误的提示。
具体地,在第二编译器中发出可执行文件附加错误的提示。
本实施例中,由于在指定所指示的可执行文件与启动的指定的可执行文件不相同时,发出可执行文件附加错误的提示,因此,使得用户能够及时获知可执行文件附加错误。
步骤S24,在上述第二编译器打开的动态链接库文件中,对与上述接口对应的代码进行断点设置,其中,上述动态链接库文件由上述第二文件封装得到,上述第二编译器能够编译上述第二文件。
步骤S25,若在上述第一编译器的调试模式中接收到运行指令,则对上述第一文件和上述第二文件执行运行动作。
本申请实施例中,由于先检测指定的可执行文件是否启动再执行将该指定的可执行文件附加到进程的动作,因此,能够提高将该指定的可执行文件附加到进程的成功率。
在一些实施例中,步骤S25(或步骤S15)中对上述第一文件和上述第二文件执行运行动作,包括:
按照上述第一文件的代码顺序执行运行动作,当运行到上述用于调用第二文件的代码的接口时,对上述第二文件中与上述接口对应的代码执行运行动作。
本实施例中,由于按照第一文件的代码顺序执行运行动作,因此,能够保证得到的运行结果与该第一文件的代码逻辑相符,即保证得到准确的运行结果。
在一些实施例中,为了便于用户查看,则上述编程语言调试方法,还包括:
A1、在上述第一编译器中显示对上述第一文件执行运行动作后得到的运行结果。
A2、在上述第二编译器中显示对上述第二文件执行运行动作后得到的运行结果。
本实施例中,由于在不同的编译器中显示对应文件的运行结果,因此,有利于用户快速定位出存在错误的代码,进而能够提高代码的修改速度。
在一些实施例中,若上述第一编程语言为Python语言,上述第二编程语言为C语言或C++语言,则通过以下方式将上述第二文件封装为动态链接库文件:
将上述第二文件的后缀名更改为:pyd或dll。
本实施例中,在第二编译器中查找需要封装的第二文件,并进入查找到的第二文件的属性页,在显示的属性页中对该第二文件的属性进行设置,即将属性页中的“目标文件扩展名”(即第二文件的后缀名)更改为“pyd”或“dll”。当然,若需要更改第二文件的文件名也可以对“目标文件名”这一属性进行设置。在将第二文件的后缀名更改之后,终端设备检测到用户执行点击右键的动作,且“生成”这一选项也检测到用户的点击指令,就生成动态链接库文件,从而实现第二文件的封装。
在一些实施例中,若上述第一编程语言为Java语言,上述第二编程语言为C语言或C++语言,则通过以下方式将上述第二文件封装为动态链接库文件:
将上述第二文件的后缀名更改为:dll。
本实施例的第二文件的封装过程与上述的第二文件的封装过程类似,此处不再赘述。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
实施例三:
对应于上文实施例一和实施例二上述的编程语言调试方法,图3示出了本申请实施例提供的编程语言调试装置的结构框图,为了便于说明,仅示出了与本申请实施例相关的部分。
参照图3,该编程语言调试装置3应用于终端设备,包括:第一文件打开模块31、第一文件的断点设置模块32、文件附加到进程模块33、第二文件的断点设置模块34、运行模块35。其中:
第一文件打开模块31,用于在第一编译器中打开第一文件,上述第一编译器能够编译上述第一文件,上述第一文件采用第一编程语言编写,上述第一文件包含用于调用第二文件的代码的接口,其中,上述第二文件采用第二编程语言编写,上述第二编程语言与上述第一编程语言不同。
本实施例的第一文件包含一个或多个用于调用第二文件的代码的接口(当然,接口不同,调用的第二文件的代码也不同),这里的接口通常指接口的名称。
第一文件的断点设置模块32,用于将上述接口设置为断点,并进入上述第一编译器的调试模式。
其中,调试模式是指Debug模式。
本实施例中,在打开第一文件后,显示该第一文件包含的代码,再将第一文件中用于调用第二文件的代码的接口设置为断点。在设置断点时,可通过终端设备自动设置,也可通过用户手动设置。
文件附加到进程模块33,用于在第二编译器中将指定的可执行文件附加到进程,其中,上述指定的可执行文件为能够运行上述第一文件的文件,上述第二编译器与上述第一编译器不同。
本实施例中,若第一编程语言为Java语言,则指定的可执行文件通常为“javaw.exe”。若第一编程语言为Python语言,则指定的可执行文件通常为“python.exe”。
第二文件的断点设置模块34,用于在上述第二编译器打开的动态链接库文件中,对与上述接口对应的代码进行断点设置,其中,上述动态链接库文件由上述第二文件封装得到,上述第二编译器能够编译上述第二文件。
运行模块35,用于若在上述第一编译器的调试模式中接收到运行指令,则对上述第一文件和上述第二文件执行运行动作。
本申请实施例中,由于将第二文件封装为动态链接库文件,而能够运行第一文件的指定的可执行文件能够识别动态链接库文件,因此,即使第二文件采用第二编程语言编写,该指定的可执行文件也能够识别该第二文件。故,在第二编译器将该指定的可执行文件附加到进程、第一编译器在采用第一编程语言编写的第一文件中将用于调用第二文件的代码的接口设置为断点并进入调试模式、以及在动态链接库文件将相同的接口设置为断点之后,终端设备能够根据接收到的运行指令对第一文件和第二文件执行运行动作。由于在本申请实施例中,运行第一文件和第二文件是在调试模式下运行,即可以单步执行代码,因此,无需进行日志记录或查看控制台输出的变量就能查查看变量是否存在错误,从而不仅实现了跨语言之间的调试,也极大提高了调试的效率以及准确率。
在一些实施例中,上述文件附加到进程模块33具体用于:
检测上述第一编译器的调试模式下是否有指定的可执行文件启动,若有指定的可执行文件启动,则在上述第二编译器将上述指定的可执行文件附加到进程。
在一些实施例中,上述文件附加到进程模块33中若有指定的可执行文件启动,则在上述第二编译器将上述指定的可执行文件附加到进程,具体用于:
若在第一编译器的调试模式下有指定的可执行文件启动,且在第二编译器中接收到用于将指定的可执行文件附加到进程的指令,则检测上述指令携带的可执行文件的标识所指示的可执行文件是否与启动的指定的可执行文件相同,若相同,则在上述第二编译器将上述指定的可执行文件附加到进程。
在一些实施例中,该编程语言调试装置3还包括:
错误提示模块,用于若指令携带的可执行文件的标识所指示的可执行文件与启动的指定的可执行文件不相同,则发出可执行文件附加错误的提示。
在一些实施例中,上述运行模块35中对上述第一文件和上述第二文件执行运行动作,具体用于:
按照上述第一文件的代码顺序执行运行动作,当运行到上述用于调用第二文件的代码的接口时,对上述第二文件中与上述接口对应的代码执行运行动作。
在一些实施例中,上述编程语言调试装置3,还包括:
第一运行结果显示模块,用于在上述第一编译器中显示对上述第一文件执行运行动作后得到的运行结果。
第二运行结果显示模块,用于在上述第二编译器中显示对上述第二文件执行运行动作后得到的运行结果。
在一些实施例中,若上述第一编程语言为Python语言,上述第二编程语言为C语言或C++语言,则通过以下方式将上述第二文件封装为动态链接库文件:
将上述第二文件的后缀名更改为:pyd或dll。
在一些实施例中,若上述第一编程语言为Java语言,上述第二编程语言为C语言或C++语言,则通过以下方式将上述第二文件封装为动态链接库文件:
将上述第二文件的后缀名更改为:dll。
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
实施例四:
图4为本申请一实施例提供的终端设备的结构示意图。如图4所示,该实施例的终端设备4包括:至少一个处理器40(图4中仅示出一个处理器)、存储器41以及存储在上述存储器41中并可在上述至少一个处理器40上运行的计算机程序42,上述处理器40执行上述计算机程序42时实现上述任意各个方法实施例中的步骤:
在第一编译器中打开第一文件,上述第一编译器能够编译上述第一文件,上述第一文件采用第一编程语言编写,上述第一文件包含用于调用第二文件的代码的接口,其中,上述第二文件采用第二编程语言编写,上述第二编程语言与上述第一编程语言不同;
将上述接口设置为断点,并进入上述第一编译器的调试模式;
在第二编译器中将指定的可执行文件附加到进程,其中,上述指定的可执行文件为能够运行上述第一文件的文件,上述第二编译器与上述第一编译器不同;
在上述第二编译器打开的动态链接库文件中,对与上述接口对应的代码进行断点设置,其中,上述动态链接库文件由上述第二文件封装得到,上述第二编译器能够编译上述第二文件;
若在上述第一编译器的调试模式中接收到运行指令,则对上述第一文件和上述第二文件执行运行动作。
可选地,上述在第二编译器中将指定的可执行文件附加到进程,包括:
检测上述第一编译器的调试模式下是否有指定的可执行文件启动,若有指定的可执行文件启动,则在上述第二编译器将上述指定的可执行文件附加到进程。
可选地,上述若有指定的可执行文件启动,则在上述第二编译器将上述指定的可执行文件附加到进程,包括:
若在第一编译器的调试模式下有指定的可执行文件启动,且在第二编译器中接收到用于将指定的可执行文件附加到进程的指令,则检测上述指令携带的可执行文件的标识所指示的可执行文件是否与启动的指定的可执行文件相同,若相同,则在上述第二编译器将上述指定的可执行文件附加到进程。
可选地,上述对上述第一文件和上述第二文件执行运行动作,包括:
按照上述第一文件的代码顺序执行运行动作,当运行到上述用于调用第二文件的代码的接口时,对上述第二文件中与上述接口对应的代码执行运行动作。
可选地,上述编程语言调试方法,还包括:
在上述第一编译器中显示对上述第一文件执行运行动作后得到的运行结果;
在上述第二编译器中显示对上述第二文件执行运行动作后得到的运行结果。
可选地,若上述第一编程语言为Python语言,上述第二编程语言为C语言或C++语言,则通过以下方式将上述第二文件封装为动态链接库文件:
将上述第二文件的后缀名更改为:pyd或dll。
可选地,若上述第一编程语言为Java语言,上述第二编程语言为C语言或C++语言,则通过以下方式将上述第二文件封装为动态链接库文件:
将上述第二文件的后缀名更改为:dll。
上述终端设备4可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该终端设备可包括,但不仅限于,处理器40、存储器41。本领域技术人员可以理解,图4仅仅是终端设备4的举例,并不构成对终端设备4的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器40可以是中央处理单元(Central Processing Unit,CPU),该处理器40还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
上述存储器41在一些实施例中可以是上述终端设备4的内部存储单元,例如终端设备4的硬盘或内存。上述存储器41在另一些实施例中也可以是上述终端设备4的外部存储设备,例如上述终端设备4上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,上述存储器41还可以既包括上述终端设备4的内部存储单元也包括外部存储设备。上述存储器41用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如上述计算机程序的程序代码等。上述存储器41还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例还提供了一种网络设备,该网络设备包括:至少一个处理器、存储器以及存储在所述存储器中并可在所述至少一个处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意各个方法实施例中的步骤。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在移动终端上运行时,使得移动终端执行时实现可实现上述各个方法实施例中的步骤。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种编程语言调试方法,其特征在于,包括:
在第一编译器中打开第一文件,所述第一编译器能够编译所述第一文件,所述第一文件采用第一编程语言编写,所述第一文件包含用于调用第二文件的代码的接口,其中,所述第二文件采用第二编程语言编写,所述第二编程语言与所述第一编程语言不同;
将所述接口设置为断点,并进入所述第一编译器的调试模式;
在第二编译器中将指定的可执行文件附加到进程,其中,所述指定的可执行文件为能够运行所述第一文件的文件,所述第二编译器与所述第一编译器不同;
在所述第二编译器打开的动态链接库文件中,对与所述接口对应的代码进行断点设置,其中,所述动态链接库文件由所述第二文件封装得到,所述第二编译器能够编译所述第二文件;
若在所述第一编译器的调试模式中接收到运行指令,则对所述第一文件和所述第二文件执行运行动作。
2.如权利要求1所述的编程语言调试方法,其特征在于,所述在第二编译器中将指定的可执行文件附加到进程,包括:
检测所述第一编译器的调试模式下是否有指定的可执行文件启动,若有指定的可执行文件启动,则在所述第二编译器将所述指定的可执行文件附加到进程。
3.如权利要求2所述的编程语言调试方法,其特征在于,所述若有指定的可执行文件启动,则在所述第二编译器将所述指定的可执行文件附加到进程,包括:
若在第一编译器的调试模式下有指定的可执行文件启动,且在第二编译器中接收到用于将指定的可执行文件附加到进程的指令,则检测所述指令携带的可执行文件的标识所指示的可执行文件是否与启动的指定的可执行文件相同,若相同,则在所述第二编译器将所述指定的可执行文件附加到进程。
4.如权利要求1所述的编程语言调试方法,其特征在于,所述对所述第一文件和所述第二文件执行运行动作,包括:
按照所述第一文件的代码顺序执行运行动作,当运行到所述用于调用第二文件的代码的接口时,对所述第二文件中与所述接口对应的代码执行运行动作。
5.如权利要求4所述的编程语言调试方法,其特征在于,所述编程语言调试方法,还包括:
在所述第一编译器中显示对所述第一文件执行运行动作后得到的运行结果;
在所述第二编译器中显示对所述第二文件执行运行动作后得到的运行结果。
6.如权利要求1至5任一项所述的编程语言调试方法,其特征在于,若所述第一编程语言为Python语言,所述第二编程语言为C语言或C++语言,则通过以下方式将所述第二文件封装为动态链接库文件:
将所述第二文件的后缀名更改为:pyd或dll。
7.如权利要求1至5任一项所述的编程语言调试方法,其特征在于,若所述第一编程语言为Java语言,所述第二编程语言为C语言或C++语言,则通过以下方式将所述第二文件封装为动态链接库文件:
将所述第二文件的后缀名更改为:dll。
8.一种编程语言调试装置,其特征在于,包括:
第一文件打开模块,用于在第一编译器中打开第一文件,所述第一编译器能够编译所述第一文件,所述第一文件采用第一编程语言编写,所述第一文件包含用于调用第二文件的代码的接口,其中,所述第二文件采用第二编程语言编写,所述第二编程语言与所述第一编程语言不同;
第一文件的断点设置模块,用于将所述接口设置为断点,并进入所述第一编译器的调试模式;
文件附加到进程模块,用于在第二编译器中将指定的可执行文件附加到进程,其中,所述指定的可执行文件为能够运行所述第一文件的文件,所述第二编译器与所述第一编译器不同;
第二文件的断点设置模块,用于在所述第二编译器打开的动态链接库文件中,对与所述接口对应的代码进行断点设置,其中,所述动态链接库文件由所述第二文件封装得到,所述第二编译器能够编译所述第二文件;
运行模块,用于若在所述第一编译器的调试模式中接收到运行指令,则对所述第一文件和所述第二文件执行运行动作。
9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110491016.7A CN113282487A (zh) | 2021-05-06 | 2021-05-06 | 编程语言调试方法、装置及终端设备 |
CN202210029340.1A CN114356779A (zh) | 2021-05-06 | 2022-01-11 | 编程语言调试方法、装置及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110491016.7A CN113282487A (zh) | 2021-05-06 | 2021-05-06 | 编程语言调试方法、装置及终端设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113282487A true CN113282487A (zh) | 2021-08-20 |
Family
ID=77278052
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110491016.7A Pending CN113282487A (zh) | 2021-05-06 | 2021-05-06 | 编程语言调试方法、装置及终端设备 |
CN202210029340.1A Pending CN114356779A (zh) | 2021-05-06 | 2022-01-11 | 编程语言调试方法、装置及终端设备 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210029340.1A Pending CN114356779A (zh) | 2021-05-06 | 2022-01-11 | 编程语言调试方法、装置及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN113282487A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115185539A (zh) * | 2022-09-06 | 2022-10-14 | 西安羚控电子科技有限公司 | 一种生成可执行动态链接库文件方法、装置及存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971635A (zh) * | 2022-10-25 | 2024-05-03 | 华为技术有限公司 | 代码调试方法、电子设备及计算机可读存储介质 |
-
2021
- 2021-05-06 CN CN202110491016.7A patent/CN113282487A/zh active Pending
-
2022
- 2022-01-11 CN CN202210029340.1A patent/CN114356779A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115185539A (zh) * | 2022-09-06 | 2022-10-14 | 西安羚控电子科技有限公司 | 一种生成可执行动态链接库文件方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114356779A (zh) | 2022-04-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108027722B (zh) | 在编译和部署中动态更新应用 | |
CN107526625B (zh) | 一种基于字节码检查的Java智能合约安全检测方法 | |
CN110046479B (zh) | 一种基于安卓操作系统的链接库文件反调试方法及装置 | |
US9009678B2 (en) | Software debugging with execution match determinations | |
US20190004774A1 (en) | Automated source code adaption to inject features between platform versions | |
CN114356779A (zh) | 编程语言调试方法、装置及终端设备 | |
US9489182B1 (en) | Transparent process interception | |
EP3147783A1 (en) | Automatic determination of compiler configuration | |
CN110673837B (zh) | 代码修复方法及装置、电子设备、计算机可读存储介质 | |
US20060161896A1 (en) | Performing debug requests that are within the debug domain of a class loader | |
US20080307397A1 (en) | Program Analysis by Partial Emulation | |
CN110659210A (zh) | 一种信息获取方法、装置、电子设备及存储介质 | |
CN111427782B (zh) | 安卓动态链接库的运行方法、装置、设备及存储介质 | |
CN114625660A (zh) | 调试方法及装置 | |
EP3211526A1 (en) | Compilation cache with imports scanner | |
CN114895935A (zh) | 刷写车辆ecu的方法、装置、电子设备及存储介质 | |
CN111782239B (zh) | 软件打包和源码版本信息获取方法、装置及存储介质 | |
US20070150866A1 (en) | Displaying parameters associated with call statements | |
CN113127329B (zh) | 脚本调试方法、装置及计算机存储介质 | |
CN111352631B (zh) | 一种接口兼容性检测方法及装置 | |
CN112445706A (zh) | 程序异常代码获取方法、装置、电子设备以及存储介质 | |
CN111736817A (zh) | 函数执行耗时的确定方法、装置、终端设备及存储介质 | |
CN111385661B (zh) | 语音控制全屏播放的方法、装置、终端及存储介质 | |
CN111258802A (zh) | 捕获应用程序崩溃信息的方法及相关设备 | |
CN110889116A (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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20210820 |