CN114328149B - 编译时长的统计方法、装置、电子设备及可读介质 - Google Patents
编译时长的统计方法、装置、电子设备及可读介质 Download PDFInfo
- Publication number
- CN114328149B CN114328149B CN202111519050.7A CN202111519050A CN114328149B CN 114328149 B CN114328149 B CN 114328149B CN 202111519050 A CN202111519050 A CN 202111519050A CN 114328149 B CN114328149 B CN 114328149B
- Authority
- CN
- China
- Prior art keywords
- compiling
- module
- file
- stage
- engineering
- 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.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种编译时长的统计方法、装置、电子设备及可读介质,所述方法包括:在对应用工程文件进行编译时长的统计过程中,以模块为维度,对模块下各个编译阶段统计编译耗时,细化编译时长的统计粒度,进而在计算文件整体编译时长时,能够有效提高数据的准确性与真实性,提高编译耗时统计的精度。
Description
技术领域
本发明涉及代码处理技术领域,特别是涉及一种编译时长的统计方法、一种编译时长的统计装置、一种电子设备以及一种计算机可读介质。
背景技术
在计算科学中,编译是将某种编程语言写成的源代码转换成另一种编译语言(目标语言)的过程。其中,将编译与链接合并在一起统称为构建,构建过程中链接耗时相对有限,可优化的空间不大,因此,构建过程的优化主要是针对编译过程进行优化。
具体的,应用程序文件构建需要一定的时间,对于小型应用工程项目而言,构建耗时较短,开发人员感知并不明显,但对于大型应用工程项目的构建,不管是在开发初期,还是在之后对项目文件进行更新的过程,则需要较长的时间。对此,在相关技术中,通过将一个应用工程项目划分为多个模块进行编译时长的统计,然而在该过程中,由于并行编译机制的存在,在上述编译过程间隙,可能存在执行其他操作的情况,且这段时间内执行的操作与该模块的编译无关,但执行这个操作所耗费的时长也会被统计进编译时长中,从而容易导致最终得到的编译时长与模块真实的编译时长并不对应,无法准确反应各个模块的真实编译时长,降低了数据统计的准确性。
发明内容
本发明实施例是提供一种编译时长的统计方法、装置、电子设备以及计算机可读存储介质,以解决或部分解决相关技术中对应用工程文件进行编译时长统计时存在统计数据不准确的问题。
本发明实施例公开了一种编译时长的统计方法,包括:
获取应用工程文件的目标日志文件,所述应用工程文件包括若干个工程模块,每一所述工程模块包括若干个编译阶段,所述目标日志文件至少包括各个所述工程模块的编译时间信息;
根据所述工程模块的编译时间信息,生成所述工程模块中各个所述编译阶段的阶段编译时长以及与所述阶段编译时长对应的模块编译时长;
统计各个所述工程模块的模块编译时长,获得所述应用工程文件的编译总时长。
可选地,所述获取应用工程文件的目标日志文件,包括:
获取应用工程文件的文件目录,所述文件目录包括构建日志目录;
从所述构建日志目录中提取文件类型为日志类型的历史日志文件;
获取各个所述历史日志文件的文件时间;
按照所述文件时间的排序信息,提取文件时间最新的历史日志文件作为所述应用工程文件的目标日志文件。
可选地,应用于Xcode,所述获取应用工程文件的文件目录,包括:
获取所述Xcode的数据目录以及应用工程文件的文件标识;
从所述数据目录中提取所述文件标识对应的文件目录。
可选地,所述获取应用工程文件的目标日志文件之后,所述方法还包括:
将所述目标日志文件导入预设数据表,获得各个所述工程模块的模块编译记录标识符;
从所述目标日志文件中提取各个所述模块编译记录标识符对应的模块编译日志记录,所述模块编译日志记录包括工程模块的各个阶段标识以及所述阶段标识对应的编译起始时间和编译结束时间。
可选地,所述编译时间信息包括阶段标识以及所述阶段标识对应的编译起始时间和编译结束时间,所述根据所述工程模块的编译时间信息,生成所述工程模块中各个所述编译阶段的阶段编译时长以及与所述阶段编译时长对应的模块编译时长,包括:
采用各个所述阶段标识对应的编译起始时间和编译结束时间,计算所述阶段标识对应的编译阶段的阶段编译时长;
统计同一个所述工程模块中各个所述编译阶段的阶段编译时长,获得所述工程模块的模块编译时长。
可选地,所述编译阶段至少包括编译准备阶段、编译执行阶段以及静态库创建阶段。
可选地,还包括:
获取各个所述工程模块的模块标识;
建立同一所述工程模块中各个所述阶段标识与对应的阶段编译时长之间的第一编译关系,同一所述应用工程文件中各个所述模块标识与对应的模块编译时长之间的第二编译关系;
采用所述第一编译关系与所述第二编译关系,对所述编译总时长进行可视化显示。
本发明实施例还公开了一种编译时长的统计装置,包括:
目标日志文件获取模块,用于获取应用工程文件的目标日志文件,所述应用工程文件包括若干个工程模块,每一所述工程模块包括若干个编译阶段,所述目标日志文件至少包括各个所述工程模块的编译时间信息;
编译时长生成模块,用于根据所述工程模块的编译时间信息,生成所述工程模块中各个所述编译阶段的阶段编译时长以及与所述阶段编译时长对应的模块编译时长;
总时长生成模块,用于统计各个所述工程模块的模块编译时长,获得所述应用工程文件的编译总时长。
可选地,所述目标日志文件获取模块包括:
文件目录获取子模块,用于获取应用工程文件的文件目录,所述文件目录包括构建日志目录;
日志文件提取子模块,用于从所述构建日志目录中提取文件类型为日志类型的历史日志文件;
文件时间获取子模块,用于获取各个所述历史日志文件的文件时间;
目标日志文件提取子模块,用于按照所述文件时间的排序信息,提取文件时间最新的历史日志文件作为所述应用工程文件的目标日志文件。
可选地,应用于Xcode,所述文件目录获取子模块具体用于:
获取所述Xcode的数据目录以及应用工程文件的文件标识;
从所述数据目录中提取所述文件标识对应的文件目录。
可选地,所述装置还包括:
标识符获取模块,用于将所述目标日志文件导入预设数据表,获得各个所述工程模块的模块编译记录标识符;
日志记录提取模块,用于从所述目标日志文件中提取各个所述模块编译记录标识符对应的模块编译日志记录,所述模块编译日志记录包括工程模块的各个阶段标识以及所述阶段标识对应的编译起始时间和编译结束时间。
可选地,所述编译时间信息包括阶段标识以及所述阶段标识对应的编译起始时间和编译结束时间,所述编译时长生成模块包括:
阶段编译时长计算子模块,用于采用各个所述阶段标识对应的编译起始时间和编译结束时间,计算所述阶段标识对应的编译阶段的阶段编译时长;
模块编译时长计算子模块,用于统计同一个所述工程模块中各个所述编译阶段的阶段编译时长,获得所述工程模块的模块编译时长。
可选地,所述编译阶段至少包括编译准备阶段、编译执行阶段以及静态库创建阶段。
可选地,还包括:
模块标识获取模块,用于获取各个所述工程模块的模块标识;
编译关系建立模块,用于建立同一所述工程模块中各个所述阶段标识与对应的阶段编译时长之间的第一编译关系,同一所述应用工程文件中各个所述模块标识与对应的模块编译时长之间的第二编译关系;
可视化处理模块,用于采用所述第一编译关系与所述第二编译关系,对所述编译总时长进行可视化显示。
本发明实施例还公开了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口以及所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行存储器上所存放的程序时,实现如本发明实施例所述的方法。
本发明实施例还公开了一个或多个计算机可读介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如本发明实施例所述的方法。
本发明实施例包括以下优点:
在本发明实施例中,在对应用工程文件进行开发、更新的过程中,可以通过获取应用工程文件的目标日志文件,并根据该目标日志文件中包含的应用工程文件各个工程模块所对应的编译时间信息进行编译时长的统计,其中,每一个工程模块可以包括若干个编译阶段,则可以根据工程模块的编译时间信息,先生成各个工程模块中各个编译阶段所对应的阶段编译时长,然后根据阶段编译时长得到工程模块对应的模块编译时长,再统计应用工程文件中所有工程模块的模块编译时长,得到应用工程文件的编译总时长,从而在对应用工程文件进行编译时长的统计过程中,以模块为维度,对模块下各个编译阶段统计编译耗时,细化编译时长的统计粒度,进而在计算文件整体编译时长时,能够有效提高数据的准确性与真实性,提高编译耗时统计的精度。
附图说明
图1是本发明实施例中提供的一种编译时长的统计方法的步骤流程图;
图2是本发明实施例中提供的编译时长统计的流程示意图;
图3是本发明实施例中提供的一种编译时长的统计装置的结构框图;
图4是本发明实施例中提供的一种电子设备的框图;
图5是本发明实施例中提供的一种计算机可读介质的示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
编译:计算机科学中,将某种编程语言写成的源代码转换成另外一种编译语言(目标语言)的过程。
链接:是指将一个或多个由编译器或汇编器生成的历史日志文件,链接为一个可执行文件的过程,链接过程通常由链接器实现。
Xcode:是指某公司向开发人员提供的集成开发环境,可以用于开发macOS、iOS、WatchOS和tvOS的应用程序。
xcactivitylog:Xcode编译过程中生成的日志文件,日志内容以SLF(SymantecLicense File)格式编码,以gzip压缩格式存储。
作为一种示例,在大型应用工程开发过程中,随着代码量的增加,工程构建、代码编译时长也会持续增加,除代码量外,计算机硬件性能也是影响编译速度的一个重要因素。而随着应用工程文件编译时间的增加,会大大增加开发工作人员在开发、维护过程中的等待时间,增加了应用工程开发的成本。其中,在相关技术中,通过将一个应用工程项目划分为多个模块进行编译时长的统计,具体的,通常一个project(应用工程项目)可以由多个target(模块)构成,在编译过程中,当完成了target的编译后,可以获取各个target的编译时长,然后根据各个target的编译时长计算编译总时长。然而在该过程中,由于并行编译机制的存在,在上述编译过程间隙,可能存在执行其他操作的情况,且这段时间内执行的操作与该模块的编译无关,但执行这个操作所耗费的时长也会被统计进编译时长中,从而容易导致最终得到的编译时长与模块真实的编译时长并不对应,无法准确反应各个模块的真实编译时长,降低了数据统计的准确性。
对此,本发明实施例的核心发明点之一在于对编译耗时的统计粒度进行细化,在应用工程文件的开发、更新过程中,通过获取应用工程文件的目标日志文件,从目标日志文件中获取应用工程文件中各个工程模块所对应的编译时间信息,接着根据工程模块的编译时间信息,生成工程模块中各个编译阶段的阶段编译时长,以及根据各个编译阶段的阶段编译时长得到工程模块的模块编译时长,然后统计各个工程模块的模块编译时长,获得应用工程文件的编译总时长,从而在对应用工程文件进行编译时长的统计过程中,以模块为维度,对模块下各个编译阶段统计编译耗时,细化编译时长的统计粒度,进而在计算文件整体编译时长时,能够有效提高数据的准确性与真实性,提高编译耗时统计的精度。
参照图1,示出了本发明实施例中提供的一种编译时长的统计方法的步骤流程图,具体可以包括如下步骤:
步骤101,获取应用工程文件的目标日志文件,所述应用工程文件包括若干个工程模块,每一所述工程模块包括若干个编译阶段,所述目标日志文件至少包括各个所述工程模块的编译时间信息;
对于应用工程文件,其可以为开发工作人员在开发工具中进行开发或更新维护的某一个应用程序对应的工程项目文件,如开发工作人员在Xcode开发的适用于macOS、iOS、WatchOS和tvOS等平台的应用程序项目,不同的应用工程文件可以对应不同的构建日志文件,构建日志文件可以用于描述构建过程中的日志信息,其可以包括多个工程模块的模块标识以及各工程模块对应的编译时间信息。
在本发明实施例中,可以先获取应用工程文件的文件目录,该文件目录可以包括应用工程文件的构建日志目录,接着可以从构建日志目录中提取文件类型为日志类型的历史日志文件,并获取各个历史日志文件的文件时间,然后按照文件时间的排序信息,提取文件时间最新的历史日志文件作为应用工程文件的目标日志文件,以便对最新版本的应用工程文件进行编译时长的统计。其中,文件时间可以用于表征日志文件的创建时间,该时间可以用于确定开发人员对应用工程文件进行处理的时间。
可选地,编译耗时的统计可以应用于Xcode,在Xcode中,不同的应用工程文件可以对应不同的文件目录,在该文件目录中可以包括应用工程文件的临时文件以及编译日志等。其中,对于编译日志,当开发工作人员对应用工程文件进行处理(如编译等)时,可以根据工程文件处理时间、处理内容生成相应的编译日志,以便开发工作人员根据编译日志获取每次对工程文件进行处理的内容、时间等。
当得到应用工程文件对应的最新的目标日志文件后,可以将目标日志文件导入预设数据表进行解析,获得应用工程文件中各个工程模块的模块编译记录标识符,然后可以从目标日志文件中提取各个模块编译记录标识符对应的模块编译日志记录,在该模块编译日志记录中可以包括工程模块的各个阶段标识以及阶段标识对应的编译起始时间和编译结束时间。其中,工程模块的编译阶段可以包括编译准备阶段、编译执行阶段以及静态库生成阶段,编译准备阶段可以为对应用工程文件的字符串等进行词法分析、语法分析等;编译执行阶段可以为对应用工程文件进行语义分析以及中间代码产生的过程;静态库创建阶段可以为对应用工程文件中重要的或公共代码编写成一个静态库文件,以便进行调用的过程。
其中,在目标日志文件中可以按照各个工程模块的模块标识、工程模块的各个阶段标识以及对应的编译时间信息建立对应的编译时间表,如下表所示:
模块标识 | 编译准备阶段 | 编译执行阶段 | 静态库创建阶段 |
模块① | Ts1;Te1 | Ts2;Te2 | Ts3;Te3 |
模块② | Ts1;Te1 | Ts2;Te2 | Ts3;Te3 |
模块③ | Ts1;Te1 | Ts2;Te2 | Ts3;Te3 |
... | ... | ... | ... |
模块N | Tsn1;Ten1 | Tsn2;Ten2 | Tsn3;Ten3 |
其中,Tsn1可以为编译准备阶段的编译起始时间,Ten1可以为编译准备阶段的编译结束时间;Tsn2可以为编译执行阶段的编译起始时间,Ten2可以为编译执行阶段的编译结束时间;Tsn3可以为静态库创建阶段的编译起始时间,Ten3可以为静态库创建阶段的编译结束时间,从而通过上述日志文件中记录的各个工程模块的各个编译阶段对应的编译时间信息,可以进行应用工程文件的编译时长统计。
在一种示例中,开发工作人员可以先打开Xcode构建衍生数据目录,该数据目录可以为Xcode的一级目录,接着可以获取需要进行编译耗时统计的应用工程文件的文件标识,并根据该文件标识从数据目录中查找对应的文件目录(即项目构建编译目录),接着可以在文件目录中查找构建日志目录,并在该构建日志目录中按照文件类型进行过滤,提取出文件类型为日志类型的历史日志文件(如xcactivitylog文件),然后可以获取各个历史日志文件的文件时间,并按照历史日志文件的创建时间的先后顺序,查找最新的编译日志文件,以便通过最新的编译日志文件对最新版本的应用工程文件进行编译时长的统计。对于编译日志文件,其可以实质上为一个gzip压缩文件,通过解压该文件得到一个文件格式为SLF的文本文件,接着可以将该文本文件导入Excel或SQLite数据表中,并根据编译类型获取各个工程模块的模块编译记录标识符,然后由模块编译记录标识符获取工程模块对应的编译准备阶段、编译执行阶段以及静态库生成阶段的编译时间信息,以便计算应用工程文件的编译时长。
步骤102,根据所述工程模块的编译时间信息,生成所述工程模块中各个所述编译阶段的阶段编译时长以及与所述阶段编译时长对应的模块编译时长;
在具体实现中,每个工程模块的编译过程可以包括编译准备阶段、编译执行阶段以及静态库创建阶段,则从目标日志文件中得到各个编译阶段所对应的编译起始时间和编译结束时间后,可以基于各个阶段标识对应的编译起始时间和编译结束时间,计算阶段标识对应的编译阶段的阶段编译时长,然后统计同一个工程模块中各个编译阶段的阶段编译时长,获得工程模块的模块编译时长。
具体的,针对同一编译阶段,可以对编译起始时间与编译结束时间进行做差得到该编译阶段的阶段编译时长,接着可以将同一工程模块的各个编译阶段的阶段编译时长进行加和得到该工程模块的模块编译时长。例如,工程模块①的编译准备阶段的编译起始时间为15:20:00,编译结束时间为15:21:00,则编译准备阶段的编译时长为60秒;编译执行阶段的编译起始时间为15:20:00,编译结束时间为15:20:40,则编译执行阶段的编译时长为40秒;静态库创建阶段的编译起始时间为15:20:00,编译结束时间为15:21:10,则静态库创建阶段的编译时长为70秒等,将所有的阶段编译时长进行加和得到工程模块①的模块编译时长为170秒,从而通过细化编译耗时的粒度,先计算通过一个工程模块的不同编译阶段的阶段编译时长,再根据阶段编译时长计算该工程模块的模块编译时长,有效提高了时长统计的准确度。
步骤103,统计各个所述工程模块的模块编译时长,获得所述应用工程文件的编译总时长。
当得到应用工程文件中各个工程模块的模块编译时长之后,可以将所有的模型编译时长进行加和得到应用工程文件的编译总时长。例如,应用工程文件可以包括工程模块①、工程模块②以及工程模块③,其中,工程模块①的模块编译时长为170秒,工程模块②的模块编译时长为100秒,工程模块③的模块编译时长为120秒,则应用工程文件的编译总时长可以为390秒,从而在对应用工程文件进行编译时长的统计过程中,以模块为维度,对模块下各个编译阶段统计编译耗时,细化编译时长的统计粒度,进而在计算文件整体编译时长时,能够有效提高数据的准确性与真实性,提高编译耗时统计的精度。
在一种可选实施例中,当统计出工程模块中各个编译阶段的阶段编译时长、各个工程模块的模块编译时长以及应用工程文件的编译总时长之后,可以对其进行可视化显示,以便开发工作人员基于可视化的时长图对应用工程文件进行分析,进而对工程文件进行优化。
具体的,可以先获取各个工程模块的模块标识,接着建立同一工程模块中各个阶段标识与对应的阶段编译时长之间的第一编译关系,同一应用工程文件中各个模块标识与对应的模块编译时长之间的第二编译关系,然后采用第一编译关系与第二编译关系,对编译总时长进行可视化显示。
例如,假设应用工程文件包括工程模块①、工程模块②以及工程模块③,三个工程模块先后进行排列,每个工程模块的阶段编译时长如下:
工程模块①的模块编译时长T1’=编译准备阶段T1+编译执行阶段T2+静态库创建阶段T3;
工程模块②的模块编译时长T2’=编译准备阶段T1+编译执行阶段T2+静态库创建阶段T3;
工程模块③的模块编译时长T3’=编译准备阶段T1+编译执行阶段T2+静态库创建阶段T3;
应用工程文件的编译总时长如下:
编译总时长=模块编译时长T1’+模块编译时长T2’+模块编译时长T3’。
接着可以将上述得到的编译时长信息转换为GoogleTrace格式文件,绘制成与应用工程文件对应的火焰图,使得开发工作人员能够通过火焰图了解到每个工程模块的各个编译阶段的阶段编译时长、各个工程模块的模块编译时长以及编译总时长,进而基于可视化的时长图对应用工程文件进行分析,进而对工程文件进行优化。
需要说明的是,本发明实施例包括但不限于上述示例,可以理解的是,在本发明实施例的思想指导下,本领域技术人员还可以根据实际需求进行设置,本发明对此不作限制。
在本发明实施例中,在对应用工程文件进行开发、更新的过程中,可以通过获取应用工程文件的目标日志文件,并根据该目标日志文件中包含的应用工程文件各个工程模块所对应的编译时间信息进行编译时长的统计,其中,每一个工程模块可以包括若干个编译阶段,则可以根据工程模块的编译时间信息,先生成各个工程模块中各个编译阶段所对应的阶段编译时长,然后根据阶段编译时长得到工程模块对应的模块编译时长,再统计应用工程文件中所有工程模块的模块编译时长,得到应用工程文件的编译总时长,从而在对应用工程文件进行编译时长的统计过程中,以模块为维度,对模块下各个编译阶段统计编译耗时,细化编译时长的统计粒度,进而在计算文件整体编译时长时,能够有效提高数据的准确性与真实性,提高编译耗时统计的精度。
为了使本领域技术人员更好地本发明实施例的技术方案,下面通过一个示例进行解释说明:
参照图2,示出了本发明实施例中提供的编译时长统计的流程示意图,可以应用于Xcode中,具体过程可以包括:
1、在对某一个应用工程文件进行编译时长统计时,开发人员可以先打开运行于终端中的Xcode,并构建对应的衍生数据目录,如默认位于~/Library/Developer/Xcode/DerivedData目录,接着可以根据应用工程文件的文件标识,从该目录中查找对应的项目构建编译目录。
2、在项目构建编译目录中,查找应用程序文件的编译日志目录,如位于./Logs/Build目录。接着可以按文件类型进行过滤,并以文件创建时间进行排序,找到最新的编译日志文件,该编译日志文件扩展名可以为xcactivitylog。
3、编译日志文件实质上是一个gzip压缩文件,则解压该文件后,可以输出一个以SLF格式编码的文本文件。然后可以进一步解析编译日志文件,并将所解析的数据导入Excel或SQLite数据表,以便进一步分析统计数据。
4、在数据表中,可以根据编译类型获取各工程模块的模块编译记录标识符,并由模块编译记录标识符获取该工程模块下对应的子记录,以此可以获取该模块中所有的编译日志记录,包括编译准备阶段、编译执行阶段以及静态库创建阶段的编译起始时间和编译结束时间。
5、按时间顺序对各个工程模块的编译日志记录进行排序,根据编译子类型将每个工程模块的编译过程分为三个阶段:编译准备阶段、编译阶段、静态库生成阶段。然后查找计算各编译阶段的编译开始时间与编译结束时间,由结束时间减去开始时间,即可计算出每个工程模块中各个编译阶段的阶段编译耗时。
6、将每个工程模块的编译准备阶段耗时、编译执行阶段耗时以及静态库生成阶段耗时相加,即可计算出工程模块的整体编译耗时,然后将所有的工程模块的整体编译耗时相加即可计算出应用工程文件的编译总时长。
通过上述过程,在对应用工程文件进行编译时长的统计过程中,以模块为维度,对模块下各个编译阶段统计编译耗时,细化编译时长的统计粒度,进而在计算文件整体编译时长时,能够有效提高数据的准确性与真实性,提高编译耗时统计的精度。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图3,示出了本发明实施例中提供的一种编译时长的统计装置的结构框图,具体可以包括如下模块:
目标日志文件获取模块301,用于获取应用工程文件的目标日志文件,所述应用工程文件包括若干个工程模块,每一所述工程模块包括若干个编译阶段,所述目标日志文件至少包括各个所述工程模块的编译时间信息;
编译时长生成模块302,用于根据所述工程模块的编译时间信息,生成所述工程模块中各个所述编译阶段的阶段编译时长以及与所述阶段编译时长对应的模块编译时长;
总时长生成模块303,用于统计各个所述工程模块的模块编译时长,获得所述应用工程文件的编译总时长。
在一种可选实施例中,所述目标日志文件获取模块301包括:
文件目录获取子模块,用于获取应用工程文件的文件目录,所述文件目录包括构建日志目录;
日志文件提取子模块,用于从所述构建日志目录中提取文件类型为日志类型的历史日志文件;
文件时间获取子模块,用于获取各个所述历史日志文件的文件时间;
目标日志文件提取子模块,用于按照所述文件时间的排序信息,提取文件时间最新的历史日志文件作为所述应用工程文件的目标日志文件。
在一种可选实施例中,应用于Xcode,所述文件目录获取子模块具体用于:
获取所述Xcode的数据目录以及应用工程文件的文件标识;
从所述数据目录中提取所述文件标识对应的文件目录。
在一种可选实施例中,所述装置还包括:
标识符获取模块,用于将所述目标日志文件导入预设数据表,获得各个所述工程模块的模块编译记录标识符;
日志记录提取模块,用于从所述目标日志文件中提取各个所述模块编译记录标识符对应的模块编译日志记录,所述模块编译日志记录包括工程模块的各个阶段标识以及所述阶段标识对应的编译起始时间和编译结束时间。
在一种可选实施例中,所述编译时间信息包括阶段标识以及所述阶段标识对应的编译起始时间和编译结束时间,所述编译时长生成模块302包括:
阶段编译时长计算子模块,用于采用各个所述阶段标识对应的编译起始时间和编译结束时间,计算所述阶段标识对应的编译阶段的阶段编译时长;
模块编译时长计算子模块,用于统计同一个所述工程模块中各个所述编译阶段的阶段编译时长,获得所述工程模块的模块编译时长。
在一种可选实施例中,所述编译阶段至少包括编译准备阶段、编译执行阶段以及静态库创建阶段。
在一种可选实施例中,还包括:
模块标识获取模块,用于获取各个所述工程模块的模块标识;
编译关系建立模块,用于建立同一所述工程模块中各个所述阶段标识与对应的阶段编译时长之间的第一编译关系,同一所述应用工程文件中各个所述模块标识与对应的模块编译时长之间的第二编译关系;
可视化处理模块,用于采用所述第一编译关系与所述第二编译关系,对所述编译总时长进行可视化显示。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
另外,本发明实施例还提供一种电子设备,如图4所示,包括处理器401、通信接口402、存储器403和通信总线404,其中,处理器401,通信接口402,存储器403通过通信总线404完成相互间的通信,
存储器403,用于存放计算机程序;
处理器401,用于执行存储器403上所存放的程序时,实现如下步骤:
获取应用工程文件的目标日志文件,所述应用工程文件包括若干个工程模块,每一所述工程模块包括若干个编译阶段,所述目标日志文件至少包括各个所述工程模块的编译时间信息;
根据所述工程模块的编译时间信息,生成所述工程模块中各个所述编译阶段的阶段编译时长以及与所述阶段编译时长对应的模块编译时长;
统计各个所述工程模块的模块编译时长,获得所述应用工程文件的编译总时长。
在一种可选实施例中,所述获取应用工程文件的目标日志文件,包括:
获取应用工程文件的文件目录,所述文件目录包括构建日志目录;
从所述构建日志目录中提取文件类型为日志类型的历史日志文件;
获取各个所述历史日志文件的文件时间;
按照所述文件时间的排序信息,提取文件时间最新的历史日志文件作为所述应用工程文件的目标日志文件。
在一种可选实施例中,应用于Xcode,所述获取应用工程文件的文件目录,包括:
获取所述Xcode的数据目录以及应用工程文件的文件标识;
从所述数据目录中提取所述文件标识对应的文件目录。
在一种可选实施例中,所述获取应用工程文件的目标日志文件之后,所述方法还包括:
将所述目标日志文件导入预设数据表,获得各个所述工程模块的模块编译记录标识符;
从所述目标日志文件中提取各个所述模块编译记录标识符对应的模块编译日志记录,所述模块编译日志记录包括工程模块的各个阶段标识以及所述阶段标识对应的编译起始时间和编译结束时间。
在一种可选实施例中,所述编译时间信息包括阶段标识以及所述阶段标识对应的编译起始时间和编译结束时间,所述根据所述工程模块的编译时间信息,生成所述工程模块中各个所述编译阶段的阶段编译时长以及与所述阶段编译时长对应的模块编译时长,包括:
采用各个所述阶段标识对应的编译起始时间和编译结束时间,计算所述阶段标识对应的编译阶段的阶段编译时长;
统计同一个所述工程模块中各个所述编译阶段的阶段编译时长,获得所述工程模块的模块编译时长。
在一种可选实施例中,所述编译阶段至少包括编译准备阶段、编译执行阶段以及静态库创建阶段。
在一种可选实施例中,还包括:
获取各个所述工程模块的模块标识;
建立同一所述工程模块中各个所述阶段标识与对应的阶段编译时长之间的第一编译关系,同一所述应用工程文件中各个所述模块标识与对应的模块编译时长之间的第二编译关系;
采用所述第一编译关系与所述第二编译关系,对所述编译总时长进行可视化显示。
上述终端提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述终端与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
如图5所示,在本发明提供的又一实施例中,还提供了一种计算机可读存储介质501,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中所述的编译时长的统计方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中所述的编译时长的统计方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (8)
1.一种编译时长的统计方法,其特征在于,包括:
获取应用工程文件的目标日志文件,所述应用工程文件包括若干个工程模块,每一所述工程模块包括若干个编译阶段,所述目标日志文件至少包括各个所述工程模块的编译时间信息,所述编译时间信息包括阶段标识以及所述阶段标识对应的编译起始时间和编译结束时间;
根据所述工程模块的编译时间信息,生成所述工程模块中各个所述编译阶段的阶段编译时长以及与所述阶段编译时长对应的模块编译时长;
统计各个所述工程模块的模块编译时长,获得所述应用工程文件的编译总时长;
其中,所述根据所述工程模块的编译时间信息,生成所述工程模块中各个所述编译阶段的阶段编译时长以及与所述阶段编译时长对应的模块编译时长,包括:
采用各个所述阶段标识对应的编译起始时间和编译结束时间,计算所述阶段标识对应的编译阶段的阶段编译时长;
统计同一个所述工程模块中各个所述编译阶段的阶段编译时长,获得所述工程模块的模块编译时长;
其中,所述方法还包括:
将所述目标日志文件导入预设数据表,根据编译类型获取各个所述工程模块的模块编译记录标识符;
从所述目标日志文件中提取各个所述模块编译记录标识符对应的模块编译日志记录;
按照时间顺序对各个所述工程模块对应的模块编译日志记录进行排序,并根据编译子类型将每个工程模块的编译过程至少分为编译准备阶段、编译执行阶段以及静态库创建阶段。
2.根据权利要求1所述的方法,其特征在于,所述获取应用工程文件的目标日志文件,包括:
获取应用工程文件的文件目录,所述文件目录包括构建日志目录;
从所述构建日志目录中提取文件类型为日志类型的历史日志文件;
获取各个所述历史日志文件的文件时间;
按照所述文件时间的排序信息,提取文件时间最新的历史日志文件作为所述应用工程文件的目标日志文件。
3.根据权利要求2所述的方法,其特征在于,应用于Xcode,所述获取应用工程文件的文件目录,包括:
获取所述Xcode的数据目录以及应用工程文件的文件标识;
从所述数据目录中提取所述文件标识对应的文件目录。
4.根据权利要求1所述的方法,其特征在于,所述模块编译日志记录包括工程模块的各个阶段标识以及所述阶段标识对应的编译起始时间和编译结束时间。
5.根据权利要求1至4任一项所述的方法,其特征在于,还包括:
获取各个所述工程模块的模块标识;
建立同一所述工程模块中各个所述阶段标识与对应的阶段编译时长之间的第一编译关系,同一所述应用工程文件中各个所述模块标识与对应的模块编译时长之间的第二编译关系;
采用所述第一编译关系与所述第二编译关系,对所述编译总时长进行可视化显示。
6.一种编译时长的统计装置,其特征在于,包括:
目标日志文件获取模块,用于获取应用工程文件的目标日志文件,所述应用工程文件包括若干个工程模块,每一所述工程模块包括若干个编译阶段,所述目标日志文件至少包括各个所述工程模块的编译时间信息,所述编译时间信息包括阶段标识以及所述阶段标识对应的编译起始时间和编译结束时间;
编译时长生成模块,用于根据所述工程模块的编译时间信息,生成所述工程模块中各个所述编译阶段的阶段编译时长以及与所述阶段编译时长对应的模块编译时长;
总时长生成模块,用于统计各个所述工程模块的模块编译时长,获得所述应用工程文件的编译总时长;
其中,所述编译时长生成模块包括:
阶段编译时长计算子模块,用于采用各个所述阶段标识对应的编译起始时间和编译结束时间,计算所述阶段标识对应的编译阶段的阶段编译时长;
模块编译时长计算子模块,用于统计同一个所述工程模块中各个所述编译阶段的阶段编译时长,获得所述工程模块的模块编译时长;
其中,所述装置还包括:
用于执行将所述目标日志文件导入预设数据表,根据编译类型获取各个所述工程模块的模块编译记录标识符;从所述目标日志文件中提取各个所述模块编译记录标识符对应的模块编译日志记录;按照时间顺序对各个所述工程模块对应的模块编译日志记录进行排序,并根据编译子类型将每个工程模块的编译过程至少分为编译准备阶段、编译执行阶段以及静态库创建阶段的模块。
7.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口以及所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行存储器上所存放的程序时,实现如权利要求1-5任一项所述的方法。
8.一种计算机可读介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如权利要求1-5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111519050.7A CN114328149B (zh) | 2021-12-13 | 2021-12-13 | 编译时长的统计方法、装置、电子设备及可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111519050.7A CN114328149B (zh) | 2021-12-13 | 2021-12-13 | 编译时长的统计方法、装置、电子设备及可读介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114328149A CN114328149A (zh) | 2022-04-12 |
CN114328149B true CN114328149B (zh) | 2023-07-07 |
Family
ID=81050908
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111519050.7A Active CN114328149B (zh) | 2021-12-13 | 2021-12-13 | 编译时长的统计方法、装置、电子设备及可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114328149B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113326046A (zh) * | 2021-05-26 | 2021-08-31 | 网易(杭州)网络有限公司 | 获取编译时长的方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727347A (zh) * | 2008-08-15 | 2010-06-09 | 北京北大众志微系统科技有限责任公司 | 一种完成软件构建的方法及系统 |
CN103176774A (zh) * | 2011-12-21 | 2013-06-26 | 中国移动通信集团广东有限公司 | 应用程序的编译方法、装置以及系统 |
CN109725906A (zh) * | 2018-12-30 | 2019-05-07 | 上海创功通讯技术有限公司 | 一种代码编译方法及对应的持续集成系统 |
CN112328259A (zh) * | 2020-11-26 | 2021-02-05 | 北京五八信息技术有限公司 | 一种编译时长的处理方法和装置 |
-
2021
- 2021-12-13 CN CN202111519050.7A patent/CN114328149B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113326046A (zh) * | 2021-05-26 | 2021-08-31 | 网易(杭州)网络有限公司 | 获取编译时长的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN114328149A (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11221832B2 (en) | Pruning engine | |
US20220269594A1 (en) | Automating Identification of Test Cases for Library Suggestion Models | |
US20210334093A1 (en) | Automating Identification of Code Snippets for Library Suggestion Models | |
US11494181B2 (en) | Automating generation of library suggestion engine models | |
US20240126543A1 (en) | Library Model Addition | |
US7340475B2 (en) | Evaluating dynamic expressions in a modeling application | |
US9400733B2 (en) | Pattern matching framework for log analysis | |
CN110502227B (zh) | 代码补全的方法及装置、存储介质、电子设备 | |
CN106843840B (zh) | 一种基于相似度分析的源代码版本演化注释复用方法 | |
CN112597373A (zh) | 一种基于分布式爬虫引擎的数据采集方法 | |
US20140298290A1 (en) | Identification of code changes using language syntax and changeset data | |
US8965797B2 (en) | Explosions of bill-of-materials lists | |
WO2022012327A1 (zh) | 代码分析的方法、系统及计算设备 | |
CN112328259A (zh) | 一种编译时长的处理方法和装置 | |
CN113268500A (zh) | 业务处理方法、装置及电子设备 | |
CN114328149B (zh) | 编译时长的统计方法、装置、电子设备及可读介质 | |
US9396239B2 (en) | Compiling method, storage medium and compiling apparatus | |
CN115454702A (zh) | 日志故障分析方法、装置、存储介质及电子设备 | |
CN114936111A (zh) | 前端变量异常检测及修复方法、装置、设备及存储介质 | |
CN113051262A (zh) | 一种数据质检方法、装置、设备及存储介质 | |
Lu et al. | DATAM: A model‐based tool for dependability analysis | |
CN117519718A (zh) | 基于自定义语言的业务规则扩展方法、装置、设备及介质 | |
CN118035210A (zh) | 数据库的数据字典管理方法、存储介质、设备及产品 | |
CN114020276A (zh) | 数据处理方法、装置、电子设备和介质 | |
KR101403298B1 (ko) | 프로그램 소스 특성 자동인식 방법 |
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 |