基于GCC和Chromium的代码跟踪方法及系统的制作方法

文档序号:9865196阅读:399来源:国知局
基于GCC和Chromium的代码跟踪方法及系统的制作方法
【技术领域】
[0001]本发明涉及软件技术领域,尤其涉及一种基于GCC(GNU Compiler Collect1n,GNU编译器套装)和Chromium的代码跟踪方法及系统。
【背景技术】
[0002]熟悉和研究程序,最直接的方式是花时间阅读程序的源代码,可以查看到所有的函数调用过程,但是如果函数指针非常复杂,或者源代码太长且晦涩难懂,这个过程就可能很困难。为了更方便地理解程序的内部行为,以及获得有关程序优化方面的信息,例如,哪些经常调用的函数可以进行优化以获得更好的程序性能,通常会在程序中插入跟踪代码用以跟踪程序中函数的调用,这个过程也称为代码跟踪。
[0003]具体来说,代码跟踪是收集函数调用的踪迹,例如函数的调用关系和调用次数,以及函数自身执行时间和子函数的调用时间等。原始的代码跟踪是通过分别在函数的入口处和退出处插入一个惟一的符号来手工检测每个函数,这个过程非常繁琐,而且很容易出错,需要对源代码进行大量修改。为简化代码跟踪过程,目前常用的代码跟踪是通过Gprof (GNUprofiler)工具自动检测程序中的各个函数,在程序中插入用于跟踪的代码片断,在执行程序时,通过Gprof的分析函数收集相关的分析数据。
[0004]但是通常的Gprof代码跟踪,具有如下缺陷:会产生大量的跟踪数据,需要花时间分析,可视化程度低;对一些宏生成的函数难以添加跟踪代码,不能支持常见的C语言源文件,也不能使用C兼容的方式;而且只能得到函数的CPU使用时间,不能得到函数的CPU流逝时间,也不能跟踪函数的开始时间和结束时间。

【发明内容】

[0005]为克服相关技术中代码跟踪可视化程度低的问题,本申请提供一种基于GCC和Chromium的代码跟踪方法及系统。
[0006]根据本申请实施例的第一方面,提供一种基于GCC和Chromium的代码跟踪方法,包括:
[0007]使用GNU编译器套装GCC编译待跟踪程序;
[0008]在编译过程中修改所述待跟踪程序中各个函数的G頂PLE中间表示形式,插入跟踪代码;
[0009]编译结束后,运行所述待跟踪程序;
[0010]所述跟踪代码记录各个函数执行的过程,生成跟踪记录文件;
[0011]将所述跟踪记录文件导入Chromium跟踪可视化工具并展示。
[0012]可选的,所述的基于GCC和Chromium的代码跟踪方法中,所述插入跟踪代码为在待跟踪程序中各个函数的入口点和退出点分别插入第一分析函数和对应的第二分析函数,所述第一分析函数和第二分析函数用于记录对应的被跟踪的函数的执行过程,所述第一分析函数在每次执行对应的被跟踪的函数时调用,所述第二分析函数在每次退出对应的被跟踪的函数时调用。
[0013]可选的,所述的基于GCC和Chromium的代码跟踪方法,在待跟踪程序中各个函数的异常安全推出点插入第二分析函数。
[0014]可选的,所述的基于GCC和Chromium的代码跟踪方法,将被跟踪的函数包含于第一 try语句中,将所述第一分析函数插入于所述第一 try语句之前,将所述第二分析函数包含于对应于所述第一 try语句的第一 final语句中。
[0015]可选的,所述的基于GCC和Chromium的代码跟踪方法,将所述第一分析函数、第一try语句和第一 final语句包含于第二 try语句中,在对应与第二 try语句的第二 final语句中包含Clobber构造器表达式,所述Clobber构造器表达式用于延长第一分析函数和第二分析函数的参数变量的声明周期至第二分析函数的调用返回为止,所述Clobber构造器表达式的类型为第一分析函数和第二分析函数的参数变量的类型。
[0016]与本申请实施例的第一方面相应,根据本申请实施例的第二方面,提供一种基于GCC和Chromium的代码跟踪系统,包括:
[0017]编译单元,用于使用GNU编译器套装GCC编译待跟踪程序;
[0018]中间表示修改单元,用于在编译过程中修改所述待跟踪程序中各个函数的G頂PLE中间表示形式,插入跟踪代码;
[0019]执行单元,用于编译结束后,运行所述待跟踪程序;
[0020]跟踪记录文件生成单元,用于根据所述跟踪代码记录的各个函数的执行过程,生成跟踪记录文件;
[0021]可视化单元,用于将所述跟踪记录文件导入Chromium跟踪可视化工具并展示。
[0022]可选的,所述中间表示修改单元,包括:
[0023]中间表示修改子单元,用于在编译过程中修改所述待跟踪程序中各个函数的GIMPLE中间表示形式;
[0024]第一插入子单元,用于在编译过程中于待跟踪程序中各个函数的入口点插入第一分析函数;
[0025]第二插入子单元,用于在编译过程中于待跟踪程序中各个函数的退出点插入对应的第二分析函数,
[0026]其中,所述第一分析函数和第二分析函数用于记录对应的被跟踪的函数的执行过程,所述第一分析函数在每次执行对应的被跟踪的函数时调用,所述第二分析函数在每次退出对应的被跟踪的函数时调用。
[0027]可选的,所述第二插入单元用于在编译过程中于待跟踪程序中各个函数的异常安全推出点插入第二分析函数。
[0028]可选的,所述中间表示修改单元,包括:
[0029]中间表示修改子单元,用于在编译过程中修改所述待跟踪程序中各个函数的GIMPLE中间表示形式;
[0030]第一修改子单元,用于在编译过程中将被跟踪的函数包含于第一 try语句中;
[0031]第三插入子单元,用于在编译过程中于所述第一 try语句之前插入第一分析函数;
[0032]第四插入子单元,用于在编译过程中在对应于所述第一 try语句的第一final语句中插入第二分析函数。
[0033]可选的,所述中间表示修改单元,还包括:
[0034]第二修改子单元,用于将所述第一分析函数、第一 try语句和第一 final语句包含于第二 try语句中;
[0035]第三修改子单元,用于在对应与第二 try语句的第二 final语句中包含Clobber构造器表达式,所述Clobber构造器表达式用于延长第一分析函数和第二分析函数的参数变量的声明周期至第二分析函数的调用返回为止,所述Clobber构造器表达式的类型为第一分析函数和第二分析函数的参数变量的类型。
[0036]本申请实施例提供的技术方案可以包括以下有益效果:使用GCC编译待跟踪的程序,通过修改编译过程中各个函数的G頂PLE中间表示形式,在函数的G頂PLE中间表示形式中插入跟踪代码,使用跟踪代码在程序运行时记录各个函数的执行过程,生成跟踪记录文件,从而实现在程序中自动加入跟踪代码,以及程序运行时自动跟踪函数,由于GCC对C源文件的兼容性,本申请也具有对C源文件的兼容性。生成的跟踪记录文件导入Chromium跟踪可视化工具,通过Chromium跟踪可视化工具形象地展示函数的跟踪数据,从而实现代码跟踪的可视化。
[0037]应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
【附图说明】
[0038]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0039]图1为本申请一示例性实施例示出的一种基于GCC和Chromium的代码跟踪方法的流程示意图;
[0040]图2为本申请一示例性实施例示出的一种基于GCC和Chromium的代码跟踪系统的结构示意图。
【具体实施方式】
[0041]这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
[0042]为了全面理解本申请,在以下详细描述中提到了众多具体的细节,但是本领域技术人员应该理解,本申请可以无需这些具体细节而实现。在其他实施例中,不详细描述公知的方法、过程、组件和电路,以免不必要地导致实施例模糊。
[0043]为了更好地理解本身,先对GCC(GNU Compiler Collect1n,GNU编译器套装)和Chromium跟踪可视化工具作简单介绍如下。GCC是一套由GNU工程开发的支持多种编程语言的编
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1