CN107015841A - 一种程序编译的预处理方法及程序编译设备 - Google Patents
一种程序编译的预处理方法及程序编译设备 Download PDFInfo
- Publication number
- CN107015841A CN107015841A CN201710209351.7A CN201710209351A CN107015841A CN 107015841 A CN107015841 A CN 107015841A CN 201710209351 A CN201710209351 A CN 201710209351A CN 107015841 A CN107015841 A CN 107015841A
- Authority
- CN
- China
- Prior art keywords
- function
- information
- program
- equipment
- compiling
- 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.)
- Granted
Links
Classifications
-
- 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
- G06F8/42—Syntactic analysis
- G06F8/423—Preprocessors
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了程序编译的预处理方法及程序编译设备,应用于信息处理技术领域。本实施例的方法中,在程序编译设备添加了预处理模块,当程序编译设备在启动对目标程序的编译时,调用预处理模块以获取目标程序的源代码文件中各个函数的引用函数的信息并输出给程序编译设备,由程序编译设备将各个函数的相关信息写入到目标程序的编译日志中;且预处理模块还会将各个函数的相关信息储存到数据库中,以便数据分析系统根据各个函数的引用函数的信息确定目标程序的函数调用链。本实施例的方法为测试系统提供了真实可靠的变动范围,让有限的系统测试资源更加集中的注入到相关变动的部分,提高了测试效率。
Description
技术领域
本发明涉及信息处理技术领域,特别涉及一种程序编译的预处理方法及程序编译设备。
背景技术
目前在编写终端设备所执行的应用程序时,一般都会先基于一定的编程语言(比如objective-c等)编写应用程序的源代码,然后再将源代码转化为终端设备的可执行文件,最后对该可执行文件进行测试。
其中,在将源代码转化为可执行文件的过程中,可以通过编译器(比如Xcode编译器)先得到源代码的抽象语法树(abstract syntax tree,AST)文本,然后再根据AST文件得到可执行文件。而在对可执行文件进行测试时,可以通过测试系统测试目标程序的各个功能模块运行的正确与否。
发明内容
本发明实施例提供一种程序编译的预处理方法及程序编译设备,实现了在程序编译设备对目标程序进行编译的过程中获取目标程序的各个函数的相关信息。
本发明实施例提供一种程序编译的预处理方法,应用于程序编译设备,所述方法包括:
所述程序编译设备在启动对目标程序的编译时,调用预处理模块;
所述预处理模块获取目标程序的源代码文件中各个函数的相关信息,其中,某一函数的相关信息包括:所述某一函数的引用函数的信息;
所述预处理模块将所述各个函数的相关信息输出给所述程序编译设备,且将所述各个函数的相关信息储存到数据库,以便数据分析系统根据所述数据库中储存的各个函数的引用函数的信息确定所述目标程序的函数调用链;
所述程序编译设备将所述各个函数的相关信息写入到所述目标程序的编译日志中。
本发明实施例还提供一种程序编译设备,包括预处理模块,调用单元,编译单元和日志单元,其中:
所述调用单元,用于在启动所述编译单元时,调用预处理模块;
所述预处理模块,用于获取目标程序的源代码文件中各个函数的相关信息,将所述各个函数的相关信息输出给所述日志单元,且将所述各个函数的相关信息储存到数据库,以便数据分析系统根据所述数据库中储存的各个函数的引用函数的信息确定所述目标程序的函数调用链,其中,某一函数的相关信息包括:所述某一函数的引用函数的信息;
所述日志单元,用于将所述各个函数的相关信息写入到所述目标程序的编译日志中;
所述编译单元,用于对所述目标程序的源代码文件进行编译。
可见,在本实施例的方法中,在程序编译设备添加了预处理模块,当程序编译设备在启动对目标程序的编译时,调用预处理模块以获取目标程序的源代码文件中各个函数的引用函数的信息并输出给程序编译设备,由程序编译设备将各个函数的相关信息写入到目标程序的编译日志中;且预处理模块还会将各个函数的相关信息储存到数据库中。这样如果将一个目标程序修改为另一目标程序,则数据分析系统可以根据数据库中储存的另一目标程序的各个函数的引用函数的信息确定另一目标程序的函数调用链,进而得知一个目标程序与另一目标程序的差别函数的调用链,使得测试系统在对另一目标程序进行测试时,可以集中关注差别函数的相关调用函数,快速将测试问题进行定位。可见,本实施例的方法为测试系统提供了真实可靠的变动范围,让有限的系统测试资源更加集中的注入到相关变动的部分,提高了测试效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中程序编译的预处理方法应用于的场景的示意图;
图2是本发明实施例提供的一种程序编译的预处理方法的流程图;
图3是本发明实施例中程序编译设备添加预处理模块的方法流程图;
图4是本发明应用实施例中程序编译的预处理方法应用于的场景的示意图;
图5是本发明应用实施例中Xcode编译器添加clang插件的方法流程图;
图6是本发明应用实施例中提供的Xcode编译器调用clang插件进行预处理的方法流程图;
图7是本发明实施例提供的一种程序编译设备的结构示意图;
图8是本发明实施例提供的另一种程序编译设备的结构示意图;
图9是本发明实施例提供的一种终端设备程序的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排它的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例提供的程序编译的预处理方法可以应用于程序编译设备对目标程序进行编译的场景中,具体应用于如图1所示的场景中,在该场景中包括程序编译设备,数据库,预处理模块和数据分析系统,在发明实施例中,程序编译设备可以在启动对目标程序的编译时,调用预处理模块,由预处理模块获取目标程序的源代码文件中各个函数的相关信息并将各个函数的相关信息传输给程序编译设备,由程序编译设备将各个函数的相关信息写入到目标程序的编译日志中;且预处理模块还会将各个函数的相关信息储存到数据库中,其中,某一函数的相关信息包括:该函数的引用函数的信息。这样如果将一个目标程序修改为另一目标程序,则数据分析系统可以根据数据库中储存的另一目标程序的各个函数的引用函数的信息确定另一目标程序的函数调用链,进而得知一个目标程序与另一目标程序的差别函数的调用链,使得测试系统在对另一目标程序进行测试时,可以集中关注差别函数的相关调用函数,快速将测试问题进行定位。其中,程序编译设备可以是Xcode等形式的编译器,预处理模块可以Clang插件,Clang是一个C语言、C++、Objective-C、Objective-C++语言的轻量级编译器,通过Clang插件可以获取目标程序的源代码文件中各个函数的相关信息。
本发明一个实施例提供一种程序编译的预处理方法,主要是程序编译设备所执行的方法,流程图如图2所示,包括:
步骤101,程序编译设备在启动对目标程序的编译时,调用预处理模块。
可以理解,在本实施例中,用户可以通过程序编译设备提供的接口(比如用户自定义接口)将预处理模块添加到程序编译设备中,这样,当程序编译设备在启动对目标程序的编译时,调用预处理模块。
且程序编译设备对目标程序的编译流程与预处理模块运行的流程之间互不干扰,一般情况下,程序编译设备对目标程序的编译是指将目标程序的源代码文件编译成用户终端的可执行文件的流程,而预处理模块运行的流程即为下述步骤102和103中的流程。
步骤102,预处理模块获取目标程序的源代码文件中各个函数的相关信息,其中,某一函数的相关信息包括:该函数的引用函数的信息,比如引用函数的名称等信息,这里引用函数可以为一个或多个。
可以理解,一个目标程序可以有多个功能模块,这些功能模块的源代码可以分别通过不同的源代码文件储存,一个或多个功能模块的源代码可以用一个源代码文件储存,则一个目标程序可以对应多个源代码文件。其中,如果某一源代码文件中包含了另一源代码文件,说明这两个源代码文件对应的功能模块之间具有包含关系。在本实施例中预处理模块获取的某一函数的相关信息中还可以包括该函数所在的源代码文件的文件路径,即源代码文件在程序编译设备的磁盘中的存储位置或路径等信息。
具体地,预处理模块在获取各个函数的引用函数的信息时,可以遍历目标程序的源代码文件中的每个函数定义,访问每个函数定义的内部信息,该内部信息中可以包括引用函数的信息;分别解析每个函数定义的内部信息中引用函数的信息得到各个函数的引用函数的信息。
其中,在访问某一函数定义的内部信息时,可以通过ASTvisitor函数进行访问,在解析某一函数定义的内部信息时,可以通过CalleeVisitor函数进行解析。
步骤103,预处理模块将各个函数的相关信息输出给程序编译设备,且将各个函数的相关信息储存到数据库中,以便数据分析系统根据数据库中储存的各个函数的引用函数的信息确定目标程序的函数调用链。
具体地,预处理模块可以根据各个函数的相关信息生成中间文件(比如txt文本形式的文件),再将中间文件储存到数据库中。且预处理模块可以直接将各个函数的相关信息输出给程序编译设备,也可以将上述生成的中间文件传输给程序编译设备。
步骤104,程序编译设备将各个函数的相关信息写入到目标程序的编译日志中。
程序编译设备可以直接将预处理模块输出的各个函数的相关信息直接打印到编译日志中,也可以将预处理模块输出的中间文件储存为编译日志。
其中,编译日志中一般包括程序编译设备运行编译流程的过程中得到的编译信息,在本实施例中该编译日志还可以包括各个函数的相关信息。
需要说明的是,如果用户需要对目标程序进行调试时,可以通过操作程序编译设备,以触发上述步骤101到104的流程,比如用户可以在程序编译设备提供的界面输入一行命令以启动程序编译设备对目标程序进行编译,进而触发了上述步骤101到104。
这样每次调试结束后,预处理模块都会向数据库储存由目标程序的各个函数的相关信息组成的中间文件,如果对目标程序进行多次调试,数据库中就会储存有多份目标程序的中间文件,这样数据库就会冗余。为了解决这个问题,用户可以在进行一次调试后,操作程序编译设备,以清空数据库,比如在程序编译设备提供的界面输入另一行命令。
可见,在本实施例的方法中,在程序编译设备添加了预处理模块,当程序编译设备在启动对目标程序的编译时,调用预处理模块以获取目标程序的源代码文件中各个函数的引用函数的信息并输出给程序编译设备,由程序编译设备将各个函数的相关信息写入到目标程序的编译日志中;且预处理模块还会将各个函数的相关信息储存到数据库中。这样如果将一个目标程序修改为另一目标程序,则数据分析系统可以根据数据库中储存的另一目标程序的各个函数的引用函数的信息确定另一目标程序的函数调用链,进而得知一个目标程序与另一目标程序的差别函数的调用链,使得测试系统在对另一目标程序进行测试时,可以集中关注差别函数的相关调用函数,快速将测试问题进行定位。可见,本实施例的方法为测试系统提供了真实可靠的变动范围,让有限的系统测试资源更加集中的注入到相关变动的部分,提高了测试效率。
在一个具体的实施例中,当预处理模块将目标程序的各个函数的相关信息储存到数据库后,数据分析系统可以根据各个函数的相关信息确定目标程序的函数调用链。
这里,函数调用链是指各个函数之间相互调用的关系信息,比如函数A调用函数B,而函数B又调用函数C,则函数A,B和C之间的调用关系就构成了一条函数调用链。数据分析系统在确定函数调用链时,可以将一个函数的引用函数确定为该函数的调用函数,这样遍历每个函数的引用函数的信息,即可得到各个函数之间的调用关系,即函数调用链。
进一步地,如果该目标程序的源代码文件是在另一个目标程序的源代码文件的基础上修改得到的,则数据分析系统还可以获取该目标程序与另一目标程序之间的差别函数,并从上述确定的函数调用链中查找到差别函数的调用链。其中,在获取该目标程序与另一目标程序之间的差别函数时,可以由数据分析系统直接获取,或数据分析系统从另一个独立的功能设备获取到,该功能设备主要是获取目标程序的源代码文件在更新过程中所更新的函数的信息。
在另一个具体的实施例中,预处理模块在执行上述步骤102时,获取的各个函数的相关信息中还可以包括对应函数所在的源代码文件的文件路径。
进一步地,当预处理模块将各个函数的相关信息以文本形式输出到数据库后,数据分析系统还可以根据各个函数所在的源代码文件的文件路径分别确定各个函数对应的目标程序的功能模块,并储存各个函数对应的功能模块的信息。
具体地,由于一个源代码文件中储存着一个或多个功能模块的源代码,则数据分析系统根据源代码文件的文件路径就可以确定该源代码文件所对应的功能模块的信息,进而确定该源代码文件中各个函数对应的功能模块的信息。数据分析系统最终确定的一个函数可以对应一个或多个功能模块。例如某个函数的源代码文件的文件路径为/a/b,则程序编译设备确定该函数对应的功能模块为:源代码文件a对应的功能模块下的源代码文件b对应的功能子模块。
进一步地,如果该目标程序的源代码文件是在另一个目标程序的源代码文件的基础上修改得到的,则数据分析系统还可以确定该目标程序与另一目标程序之间的差别函数对应的功能模块。进而使得测试系统可以针对性地对相关的功能模块进行测试,避免了盲目进行测试,从而提高了测试效率。
在其它具体的实施例中,为了实现上述实施例中的方法,程序编译设备可以提供用户接口以添加上述预处理模块。具体可以通过如下步骤实现,流程图如图3所示,包括:
步骤201,显示设置界面,在设置界面模块添加接口。
可以理解,用户可以操作程序编译设备,使得程序编译设备显示设置界面,本实施例中,在设置界面上可以包括模块添加接口,该模块添加接口用于添加任一模块以实现某种功能。
步骤202,从模块添加接口获取用户输入的信息,该用户输入的信息包括:预处理模块的代码文件的存储路径,及预处理模块与程序编译设备之间的接口信息。
其中,预处理模块的代码文件的存储路径是指该预处理模块的代码文件在程序编译设备中储存的路径信息。如果程序编译设备有外接的存储设备,则该存储路径还可以是预处理模块的代码文件在外接的存储设备中储存的路径信息。
预处理模块与程序编译设备之间的接口信息可以包括:程序编译设备开始调用预处理模块的接口信息,及预处理模块输出信息到程序编译设备的接口信息。
例如程序编译设备在启动对目标程序的编译时,调用预处理模块,具体地,程序编译设备开始调用预处理模块的接口为:程序编译设备在执行某一行启动代码之后开始调用预处理模块;且预处理模块在得到各个函数的相关信息后输出给程序编译设备中日志模块,该日志模块主要用来得到目标程序的编译日志,具体地,预处理模块输出信息给程序编译设备的接口为:程序编译设备中日志模块的输入接口。
步骤203,储存上述用户输入的信息。
本实施例中,程序编译设备在执行上述步骤101时,具体是根据该接口信息调用存储路径中储存的预处理模块的代码文件。
以下以一个具体的实施例来说明本发明实施例的方法,本实施例的方法应用的场景可以如图4所示,在本实施例中,程序编译设备为Xcode编译器,该Xcode编译器包括编译模块和日志模块,其中,编译模块用于运行对目标程序的编译流程,日志模块用于形成目标程序的编译日志;预处理模块为clang插件。
具体参考图5和图6所示,本实施例的方法包括:
(1)在Xcode编译器中添加clang插件
步骤301,Xcode编译器显示设置界面,在设置界面中包括模块添加接口,具体可以为用户自定义(user-defined)接口。
步骤302,用户在用户自定义接口输入clang插件的代码文件的存储路径,比如,存储路径为/Users/sanren/clang-llvm/build/bin/clang;且用户还需要在用户自定义接口输入其它参数信息,比如clang插件与Xcode编译器之间的接口信息,比如,Xcode编译器开始调用clang插件的接口为Xcode编译器在执行某一行启动代码之后,clang插件输出信息到Xcode编译器的接口为日志模块的输入接口等。Xcode编译器会储存从用户自定义接口获取的用户输入信息。
(2)在Xcode编译器启动时调用clang插件
步骤303,用户通过Xcode编译器提供的编译接口,输入一行命令,使得Xcode编译器启动编译模块对一目标程序的编译流程。在本实施例中,目标程序可以为腾讯即时通信程序,或是独立版手机空间,或是腾讯音乐等应用程序。
步骤304,Xcode编译器在启动编译模块时调用clang插件,这样clang插件会遍历目标程序的源代码文件中的每个函数定义,访问每个函数定义的内部信息,解析内部信息得到每个函数的引用函数的信息;clang插件还会获取各个函数所在源代码文件的文件路径等。
而编译模块主要是将目标程序的源代码文件编译成可执行文件。
步骤305,clang插件会将获取的每个函数的相关信息输出给Xcode编译器的日志模块,日志模块将每个函数的相关信息写入到目标程序的编译日志中。任一函数的相关信息包括:该函数的引用函数的信息,及该函数所在源代码文件的文件路径等信息。
需要说明的是,Xcode编译器的日志模块还可以记录编译模块对目标程序进行编译过程中的信息。
步骤306,clang插件将获取的每个函数的相关信息以文本形式储存到数据库。
步骤307,数据分析系统会根据数据库中储存的每个函数的相关信息中每个函数的引用函数的信息确定目标程序的函数调用链,根据每个函数所在源代码文件的文件路径确定每个函数对应的目标程序的功能模块。
另外,如果该目标程序是在另一目标程序的基础上修改得到的,数据分析系统还会执行如下步骤308。
步骤308,数据分析系统获取该目标程序与另一目标程序之间的差别函数,然后从上述步骤307中得到的函数调用链中查找差别函数的调用链,并查找到调用链上各个函数对应的功能模块的信息。且数据分析系统可以将查找到的函数调用链及对应的功能模块的信息显示到用户界面,以供用户查看。
例如,函数名为:SpriteNetReqCenter::-getTaskAndRemoveOutTimeWithUrl的差别函数,对应的功能模块包括:业务-增值-可视网页(webview),基础-组件,及基础-多功能一体(All In One,AIO)。这样,测试系统可以针对性地对这些功能模块进行功能测试,避免了盲目的测试,提高了测试效率。
本发明实施例还提供一种程序编译设备,其结构示意图如图7所示,具体可以包括:预处理模块10,调用单元11,日志单元12和编译单元13,其中:
所述调用单元11,用于在启动所述编译单元13时,调用预处理模块10;
所述预处理模块10,用于获取目标程序的源代码文件中各个函数的相关信息,将所述各个函数的相关信息输出给所述日志单元12,且将所述各个函数的相关信息储存到数据库,以便数据分析系统根据所述数据库中储存的各个函数的引用函数的信息确定所述目标程序的函数调用链,其中,某一函数的相关信息包括:所述某一函数的引用函数的信息。
该预处理模块10,具体用于遍历所述目标程序的源代码文件中的每个函数定义,访问每个函数定义的内部信息,所述内部信息中包括引用函数的信息;分别解析所述每个函数定义的内部信息中所述引用函数的信息得到各个函数的引用函数的信息。
所述日志单元12,用于将所述预处理模块10输出的各个函数的相关信息写入到所述目标程序的编译日志中;
所述编译单元13,用于对所述目标程序的源代码文件进行编译。
可见,在本实施例的程序编译设备中添加了预处理模块,当程序编译设备在启动编译单元13时,调用单元11调用预处理模块10以获取目标程序的源代码文件中各个函数的引用函数的信息并输出给程序编译设备的日志单元12,由程序编译设备的日志单元12将各个函数的相关信息写入到目标程序的编译日志中;且预处理模块10还会将各个函数的相关信息储存到数据库中。这样如果将一个目标程序修改为另一目标程序,则数据分析系统可以根据数据库中储存的另一目标程序的各个函数的引用函数的信息确定另一目标程序的函数调用链,进而得知一个目标程序与另一目标程序的差别函数的调用链,使得测试系统在对另一目标程序进行测试时,可以集中关注差别函数的相关调用函数,快速将测试问题进行定位。可见,本实施例的程序编译设备为测试系统提供了真实可靠的变动范围,让有限的系统测试资源更加集中的注入到相关变动的部分,提高了测试效率。
参考图8所示,在一个具体的实施例中,程序编译设备除了可以包括如图7所示的结构外,还可以包括:界面显示单元14和储存单元15,其中:
界面显示单元14,用于显示设置界面,所述设置界面模块添加接口;
储存单元15,用于从所述界面显示单元14显示的模块添加接口获取用户输入的信息,所述用户输入的信息包括所述预处理模块的代码文件的存储路径,及所述预处理模块与所述程序编译设备之间的接口信息;储存所述用户输入的信息;这样所述调用单元11,具体用于根据所述储存单元14储存的接口信息调用所述存储路径中储存的预处理模块的代码文件。
其中,所述预处理模块与所述程序编译设备之间的接口信息,具体包括:所述程序编译设备开始调用所述预处理模块的接口信息,及所述预处理模块输出信息到所述程序编译设备的接口信息。
本发明实施例还提供一种终端设备,其结构示意图如图9所示,该终端设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessing units,CPU)20(例如,一个或一个以上处理器)和存储器21,一个或一个以上存储应用程序221或数据222的存储介质22(例如一个或一个以上海量存储设备)。其中,存储器21和存储介质22可以是短暂存储或持久存储。存储在存储介质22的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对终端设备中的一系列指令操作。更进一步地,中央处理器20可以设置为与存储介质22通信,在终端设备上执行存储介质22中的一系列指令操作。
具体地,在存储介质22中储存的应用程序221包括程序编译的预处理应用程序,且该程序可以包括上述程序编辑设备中的预处理模块10,调用单元11,日志单元12,编译单元13,界面显示单元14及储存单元15,在此不进行赘述。更进一步地,中央处理器20可以设置为与存储介质22通信,在终端设备上执行存储介质22中储存的程序编译的预处理应用程序对应的一系列操作。
终端设备还可以包括一个或一个以上电源23,一个或一个以上有线或无线网络接口24,一个或一个以上输入输出接口25,和/或,一个或一个以上操作系统223,例如WindowsServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述方法实施例中所述的由程序编译设备所执行的步骤可以基于该图9所示的终端设备的结构。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM)、随机存取存储器RAM)、磁盘或光盘等。
以上对本发明实施例所提供的程序编译的预处理方法及程序编译设备进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种程序编译的预处理方法,其特征在于,应用于程序编译设备,所述方法包括:
所述程序编译设备在启动对目标程序的编译时,调用预处理模块;
所述预处理模块获取所述目标程序的源代码文件中各个函数的相关信息,其中,某一函数的相关信息包括:所述某一函数的引用函数的信息;
所述预处理模块将所述各个函数的相关信息输出给所述程序编译设备,且将所述各个函数的相关信息储存到数据库,以便数据分析系统根据所述数据库中储存的各个函数的引用函数的信息确定所述目标程序的函数调用链;
所述程序编译设备将所述各个函数的相关信息写入到所述目标程序的编译日志中。
2.如权利要求1所述的方法,其特征在于,所述预处理模块获取目标程序的源代码文件中各个函数的相关信息,具体包括:
遍历所述目标程序的源代码文件中的每个函数定义,访问每个函数定义的内部信息,所述内部信息中包括引用函数的信息;
分别解析所述每个函数定义的内部信息中所述引用函数的信息得到各个函数的引用函数的信息。
3.如权利要求1所述的方法,其特征在于,所述某一函数的相关信息还包括:所述某一函数所在的源代码文件的文件路径;
所述方法还包括:所述数据分析系统根据所述各个函数所在的源代码文件的文件路径分别确定各个函数对应的所述目标程序的功能模块,储存所述各个函数对应的功能模块的信息。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
所述数据分析系统根据所述各个函数的相关信息中各个函数的引用函数的信息确定所述目标程序的函数调用链。
5.如权利要求4所述的方法,其特征在于,所述方法还包括:
所述数据分析系统获取所述目标程序与另一目标程序之间的差别函数,从所述函数调用链中查找差别函数的调用链。
6.如权利要求1至5任一项所述的方法,其特征在于,所述程序编译设备调用预处理模块之前,所述方法还包括:
显示设置界面,所述设置界面模块添加接口;
从所述模块添加接口获取用户输入的信息,所述用户输入的信息包括所述预处理模块的代码文件的存储路径,及所述预处理模块与所述程序编译设备之间的接口信息;
储存所述用户输入的信息;
所述程序编译设备调用预处理模块,具体包括:
根据所述接口信息调用所述存储路径中储存的预处理模块的代码文件。
7.如权利要求6所述的方法,其特征在于,所述预处理模块与所述程序编译设备之间的接口信息,具体包括:所述程序编译设备开始调用所述预处理模块的接口信息,及所述预处理模块输出信息到所述程序编译设备的接口信息。
8.一种程序编译设备,其特征在于,包括预处理模块,调用单元,编译单元和日志单元,其中:
所述调用单元,用于在启动所述编译单元时,调用预处理模块;
所述预处理模块,用于获取目标程序的源代码文件中各个函数的相关信息,将所述各个函数的相关信息输出给所述日志单元,且将所述各个函数的相关信息储存到数据库,以便数据分析系统根据所述数据库中储存的各个函数的引用函数的信息确定所述目标程序的函数调用链,其中,某一函数的相关信息包括:所述某一函数的引用函数的信息;
所述日志单元,用于将所述各个函数的相关信息写入到所述目标程序的编译日志中;
所述编译单元,用于对所述目标程序的源代码文件进行编译。
9.如权利要求8所述的设备,其特征在于,
所述预处理模块,具体用于遍历所述目标程序的源代码文件中的每个函数定义,访问每个函数定义的内部信息,所述内部信息中包括引用函数的信息;分别解析所述每个函数定义的内部信息中所述引用函数的信息得到各个函数的引用函数的信息。
10.如权利要求8所述的设备,其特征在于,所述某一函数的相关信息还包括:所述某一函数所在的源代码文件的文件路径,以便所述数据分析系统根据所述各个函数所在的源代码文件的文件路径分别确定各个函数对应的所述目标程序的功能模块,储存所述各个函数对应的功能模块的信息。
11.如权利要求8至10任一项所述的设备,其特征在于,所述程序编译设备还包括:
界面显示单元,用于显示设置界面,所述设置界面模块添加接口;
储存单元,用于从所述模块添加接口获取用户输入的信息,所述用户输入的信息包括所述预处理模块的代码文件的存储路径,及所述预处理模块与所述程序编译设备之间的接口信息;储存所述用户输入的信息;
则所述调用单元,具体用于根据所述接口信息调用所述存储路径中储存的预处理模块的代码文件。
12.如权利要求11所述的设备,其特征在于,所述预处理模块与所述程序编译设备之间的接口信息,具体包括:所述程序编译设备开始调用所述预处理模块的接口信息,及所述预处理模块输出信息到所述程序编译设备的接口信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710209351.7A CN107015841B (zh) | 2017-03-31 | 2017-03-31 | 一种程序编译的预处理方法及程序编译设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710209351.7A CN107015841B (zh) | 2017-03-31 | 2017-03-31 | 一种程序编译的预处理方法及程序编译设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107015841A true CN107015841A (zh) | 2017-08-04 |
CN107015841B CN107015841B (zh) | 2021-01-08 |
Family
ID=59445776
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710209351.7A Active CN107015841B (zh) | 2017-03-31 | 2017-03-31 | 一种程序编译的预处理方法及程序编译设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107015841B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109739506A (zh) * | 2018-12-27 | 2019-05-10 | 郑州云海信息技术有限公司 | 一种高性能应用编译中库函数缺失的处理方法及系统 |
CN110134373A (zh) * | 2019-04-04 | 2019-08-16 | 口碑(上海)信息技术有限公司 | 一种函数信息获取的方法以及装置 |
CN110147313A (zh) * | 2019-04-10 | 2019-08-20 | 口碑(上海)信息技术有限公司 | 一种日志输出方法及装置 |
CN111008151A (zh) * | 2019-12-20 | 2020-04-14 | 上海品顺信息科技有限公司 | 程序扫描方法、终端设备及计算机可读存储介质 |
CN112363729A (zh) * | 2020-11-23 | 2021-02-12 | 北京轩宇信息技术有限公司 | 用于静态分析的多编译器混合编译的监控方法及装置 |
CN112596737A (zh) * | 2020-12-28 | 2021-04-02 | 上海品顺信息科技有限公司 | 一种函数调用关系的扫描方法、系统、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140258997A1 (en) * | 2013-03-06 | 2014-09-11 | Qualcomm Incorporated | Dynamic reconfigurable compiler |
CN105094939A (zh) * | 2015-07-16 | 2015-11-25 | 南京富士通南大软件技术有限公司 | 一种基于Makefile自动编译技术实现的软件源文件静态分析方法 |
CN105138335A (zh) * | 2015-08-28 | 2015-12-09 | 牟永敏 | 一种基于控制流图的函数调用路径提取方法及装置 |
CN106354625A (zh) * | 2015-07-21 | 2017-01-25 | 北京搜狗科技发展有限公司 | 一种测试范围确定方法及装置 |
-
2017
- 2017-03-31 CN CN201710209351.7A patent/CN107015841B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140258997A1 (en) * | 2013-03-06 | 2014-09-11 | Qualcomm Incorporated | Dynamic reconfigurable compiler |
CN105094939A (zh) * | 2015-07-16 | 2015-11-25 | 南京富士通南大软件技术有限公司 | 一种基于Makefile自动编译技术实现的软件源文件静态分析方法 |
CN106354625A (zh) * | 2015-07-21 | 2017-01-25 | 北京搜狗科技发展有限公司 | 一种测试范围确定方法及装置 |
CN105138335A (zh) * | 2015-08-28 | 2015-12-09 | 牟永敏 | 一种基于控制流图的函数调用路径提取方法及装置 |
Non-Patent Citations (2)
Title |
---|
王亚刚等: "多语言源程序函数调用关系图的生成方法", 《计算机与自控技术》 * |
贾荻等: "基于数据库的在线函数调用图工具", 《小型微型计算机系统》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109739506A (zh) * | 2018-12-27 | 2019-05-10 | 郑州云海信息技术有限公司 | 一种高性能应用编译中库函数缺失的处理方法及系统 |
CN109739506B (zh) * | 2018-12-27 | 2022-02-18 | 郑州云海信息技术有限公司 | 一种高性能应用编译中库函数缺失的处理方法及系统 |
CN110134373A (zh) * | 2019-04-04 | 2019-08-16 | 口碑(上海)信息技术有限公司 | 一种函数信息获取的方法以及装置 |
CN110147313A (zh) * | 2019-04-10 | 2019-08-20 | 口碑(上海)信息技术有限公司 | 一种日志输出方法及装置 |
CN110147313B (zh) * | 2019-04-10 | 2023-11-10 | 口碑(上海)信息技术有限公司 | 一种日志输出方法及装置 |
CN111008151A (zh) * | 2019-12-20 | 2020-04-14 | 上海品顺信息科技有限公司 | 程序扫描方法、终端设备及计算机可读存储介质 |
CN111008151B (zh) * | 2019-12-20 | 2023-06-13 | 上海品顺信息科技有限公司 | 程序扫描方法、终端设备及计算机可读存储介质 |
CN112363729A (zh) * | 2020-11-23 | 2021-02-12 | 北京轩宇信息技术有限公司 | 用于静态分析的多编译器混合编译的监控方法及装置 |
CN112363729B (zh) * | 2020-11-23 | 2024-05-14 | 北京轩宇信息技术有限公司 | 用于静态分析的多编译器混合编译的监控方法及装置 |
CN112596737A (zh) * | 2020-12-28 | 2021-04-02 | 上海品顺信息科技有限公司 | 一种函数调用关系的扫描方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107015841B (zh) | 2021-01-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107015841A (zh) | 一种程序编译的预处理方法及程序编译设备 | |
Kuchaiev et al. | Nemo: a toolkit for building ai applications using neural modules | |
CN104683386B (zh) | 可定制响应的桩服务实现方法及装置 | |
CN106293664A (zh) | 代码生成方法及装置 | |
CN114841326B (zh) | 深度学习框架的算子处理方法、装置、设备和存储介质 | |
CN111782265B (zh) | 基于字段级血缘关系的软件资源系统及其建立方法 | |
CN110389898A (zh) | 测试策略的获取方法、装置、终端及计算机可读存储介质 | |
CN107918666A (zh) | 一种区块链上的数据同步方法和系统 | |
CN104063325A (zh) | 一种针对嵌入式软件的测试用例自动化生成装置及其方法 | |
CN111309752A (zh) | 面向业务流式数据处理的领域特定语言组件及其运作方法 | |
CN103019928A (zh) | 一种自动化测试方法和系统 | |
EP1583076A1 (en) | System and method for automatic generation of dialogue run time systems | |
CN106547520A (zh) | 一种代码路径分析方法及装置 | |
CN101408849A (zh) | Ttcn-3语言的编译执行方法及系统 | |
CN110750298B (zh) | 一种ai模型编译方法、设备及存储介质 | |
CN101980546B (zh) | 智能网平台、业务执行方法和分析业务异常的方法 | |
CN111209211A (zh) | 一种基于长短期记忆神经网络的跨项目软件缺陷预测方法 | |
CN108874985B (zh) | 智能变电站scd文件的分布式解析配置方法 | |
CN116450616A (zh) | 一种基于解析树的通用异构关系型数据库sql迁移方法 | |
CN106709143A (zh) | 基于atp自动建模的vfto批量仿真分析方法及系统 | |
CN111782266B (zh) | 软件性能基准确定方法及装置 | |
CN109597618A (zh) | 程序开发方法、装置、计算机设备及存储介质 | |
CN105893052A (zh) | 一种war包分析器 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
CN112988163B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |