gprof
在类Unix操作系统上,gprof命令是一个软件开发工具,用于显示编译的二进制文件的调用图配置文件数据。
查看英文版
1 gprof 运行系统环境
2 gprof 描述
3 gprof 语法
4 gprof 选项
gprof 运行系统环境
Unix&Linux
gprof 描述
gprof生成C、Pascal或Fortran77程序的执行概要文件。被调用例程的效果包含在每个调用方的配置文件中。配置文件数据取自调用图配置文件(gmon.out公司,这是由使用cc、pc和f77的-pg选项编译的程序创建的。pg选项还链接到为评测而编译的库例程的版本。gprof读取给定的对象文件(默认为a.out),并从中建立其符号表和调用图配置文件之间的关系gmon.out公司. 如果指定了多个配置文件,gprof输出将显示给定配置文件中配置文件信息的总和。
如果使用GCC 2.95.x或3.0来编译二进制文件,则可能需要将-fprofile-arcs添加到编译命令行,以便调用图正确存储在gmon.out中。
gprof计算每个例程花费的时间。接下来,这些时间沿调用图的边缘传播。发现周期,并调用周期以共享周期的时间。
分析提供了几种形式的输出:
- 平面配置文件显示程序在每个函数上花费了多少时间,以及该函数被调用了多少次。如果你想知道哪些函数消耗了大部分的周期,这里就简单地说明了。
- 对于每个函数,调用图显示了哪些函数调用了它,它调用了哪些其他函数,以及调用了多少次。还估计了每个函数的子例程花费了多少时间。这可能会建议您在哪些地方尝试消除耗费大量时间的函数调用。
- 带注释的源代码清单是程序源代码的副本,上面标有程序的每一行执行的次数。
查看英文版
gprof 语法
gprof [ -[abcDhilLrsTvwxyz] ] [ -[ACeEfFJnNOpPqQZ][name] ] [ -I dirs ] [ -d[num] ] [ -k from/to ] [ -m min-count ] [ -R map_file ] [ -t table-length ] [ --[no-]annotated-source[=name] ] [ --[no-]exec-counts[=name] ] [ --[no-]flat-profile[=name] ] [ --[no-]graph[=name] ] [ --[no-]time=name] [ --all-lines ] [ --brief ] [ --debug[=level] ] [ --function-ordering ] [ --file-ordering map_file ] [ --directory-path=dirs ] [ --display-unused-functions ] [ --file-format=name ] [ --file-info ] [ --help ] [ --line ] [ --min-count=n ] [ --no-static ] [ --print-path ] [ --separate-files ] [ --static-call-graph ] [ --sum ] [ --table-length=len ] [ --traditional ] [ --version ] [ --width=n ] [ --ignore-non-functions ] [ --demangle[=STYLE] ] [ --no-demangle ] [--external-symbol-table=name] [ image-file ] [ profile-file ... ]
查看英文版
gprof 选项
这些选项指定gprof应该产生几种输出格式中的哪一种。
这些选项中的许多选项都带有可选的符号规范,以指定要包括或排除的功能。可以使用不同的符号规格多次指定这些选项,以包括或排除符号集。
指定这些选项中的任何一个都会覆盖默认值(-p -q),该默认值将打印平面轮廓并为所有功能调用图分析。
-A [ symspec ],--annotated-source [= symspec ] | 该-A选项原因GPROF打印注释的源代码。如果指定了symspec,则仅输出匹配符号的输出。 |
-b, --brief | 如果给出了-b选项,则gprof不会打印试图解释表中所有字段含义的详细内容。如果您打算打印输出,或厌倦了看到模糊效果,这很有用。 |
-C [ symspec],-- exec -counts [= symspec ] |
的-C选项原因GPROF打印的功能的帐簿和次,每次被调用的数目。如果指定了symspec,则仅对匹配的符号打印提示符。 如果概要文件数据文件包含基本块计数记录,则将-l选项与-C一起指定将导致对基本块执行计数进行计数和显示。 |
-i,-- file -info | 的-i选项原因GPROF至约简档数据文件(一个或多个),然后退出显示摘要信息。显示直方图,调用图和基本块计数记录的数量。 |
-I dirs,-- directory-path=dirs | 该-I选项指定搜索目录,在其中找到源文件的列表。环境变量GPROF_PATH也可以用于传达此信息。主要用于带注释的源输出。 |
-J [ symspec ],-- no-annotated-source [= symspec ] | 在-J选项的原因GPROF不打印注释的源代码。如果指定了symspec,则gprof将打印带注释的源,但排除匹配的符号。 |
-L, --print-path | 通常,打印源文件名时会压缩路径部分。的-L选项原因GPROF打印源文件名,这是从符号调试信息中确定的图像文件中,并且相对于在其中编译器被调用的目录的全路径名。 |
-p [ symspec ],--flat-profile [= symspec ] | 该-p选项原因GPROF打印平面轮廓。如果指定了symspec,则仅打印匹配符号的平面轮廓。 |
-P [ symspec ],-- no-flat-profile [= symspec ] | 该-P选项原因GPROF压制印刷平面轮廓。如果指定了symspec,则gprof将打印平面轮廓,但排除匹配的符号。 |
-q [ symspec ],-- graph [=symspec ] | 该-q选项的原因GPROF打印调用图分析。如果指定了symspec,则仅打印匹配符号及其子代的调用图。 |
-Q [ symspec ],-- no -graph [=symspec ] | 在-Q选项原因GPROF打压打印调用图。如果指定了symspec,则gprof将打印调用图,但不包括匹配的符号。 |
-t,-- table-length = num | 的-t选项使NUM在每个源文件最活跃的源极线被使能源注释时被列出。默认值为10。 |
-y,-- separate-files | 此选项仅影响带注释的源输出。通常,gprof将带注释的源文件打印到标准输出。如果指定了此选项,则在文件filename-ann中生成名为path / filename的文件的带注释的源。如果底层文件系统将截断文件名-ANN,使得它覆盖原来的文件名,gprof的生成在文件中注释的源filename.ann代替(如果原来的文件名具有扩展,该扩展名替换为.ANN)。 |
-Z [ symspec ],-- no-exec-counts [= symspec ] | 该-Z选项的原因GPROF不打印功能理货和每次被呼叫的号码。如果指定了symspec,则打印提示符,但排除匹配的符号。 |
-r, --function-ordering |
该--function排序选项的原因GPROF打印基于分析数据的程序的建议功能排序。此选项建议一种排序,可以改善在支持可执行文件中功能的任意排序的系统上程序的分页,tlb和缓存行为。 如何强制链接程序以特定顺序放置功能的确切详细信息取决于系统,并且不在本手册的范围之内。 |
-R map_file,-- file -orderingmap_file |
在--file排序选项的原因GPROF打印建议的.o基于分析数据的程序链接网上订购。此选项建议一种排序方式,可以改善不支持可执行文件中功能的任意排序的系统上程序的页面调度,tlb和缓存行为。强烈建议在此选项中 使用-a参数。 所述MAP_FILE参数是一个路径到提供函数名对象文件的映射的文件。文件的格式类似于程序nm的输出。 c-parse.o:00000000 T yyparsec-parse.o:00000004 C yyerrflagc-lang.o:00000000 Tmay_objc_method_namec-lang.o:00000000 T print_lang_statisticsc-lang.o:00000000 Tognize_objc_keywordc-decl.o:00000000 T print_lang_identifierc- decl.o:00000000 T print_lang_type ...要使用GNU nm创建map_file,请输入“ nm --extern-only --defined-only -v --print-file-name program-name ”之类的命令。 |
-T, --traditional | 该-T选项的原因GPROF打印其“传统”输出BSD风格。 |
-w width,--width = width | 将输出线的宽度设置为width。当前仅在调用图底部打印功能索引时使用。 |
-x, --all-lines | 此选项仅影响带注释的源输出。默认情况下,仅注释基本块开头的行。如果指定了此选项,则通过重复第一行的注释来注释基本块中的每一行。 |
--demangle [= style ],-- no -demangle | 这些选项控制在打印输出时是否应该对C ++符号名称进行解密。默认设置是使符号脱嵌。该--no-还原函数选项可以用来关闭demangling。不同的编译器具有不同的处理样式。可选的demangling样式参数可用于为编译器选择适当的demangling样式。 |
-a --no-static | 该-a选项的原因GPROF压制的静态声明(私人)功能的打印。(这些函数的名称未列出为全局函数,并且在定义它们的文件/函数/块之外不可见。)这些函数所花费的时间,对其的调用/从中进行的调用等等,都将归因于在可执行文件中直接加载的函数。此选项会影响平面轮廓和调用图。 |
-c --static-call-graph | 的-c选项使程序的调用图以由被扩充启发式它检查在二进制机器代码的目标文件,并标识函数调用的文本空间。由于仅在输入函数时才生成常规调用图记录,因此此选项标识了可以调用但从未调用过的子级。仅在符号表项存在的情况下,也会标识对未启用概要分析的未编译函数的调用。此选项通常找不到对动态库例程的调用。通过此试探法确定的父母或孩子将在呼叫图中显示,呼叫计数为0。 |
-D,-- ignore-non-functions | 所述-D选项原因GPROF到忽略未已知的功能的符号。此选项可在受支持的系统上提供更准确的配置文件数据(例如Solaris和HPUX)。 |
-k from/to | 该-k选项允许你从调用图任何弧线从匹配symspec符号删除从那些匹配symspec 来。 |
-l --line |
的-l选项允许代替功能行由线谱,这会导致直方图命中被充电至个别行源代码。此功能仅适用于由旧版gcc编译器编译的程序。较新版本的gcc旨在与gcov工具配合使用。 如果在启用基本块计数的情况下编译程序,则此选项还将标识每行代码执行了多少次。虽然逐行概要分析可以帮助隔离程序在大型函数中花费时间的位置,但它也显着增加了gprof的运行时间,并放大了统计上的不准确性。 |
-m num,-- min-count = num | 此选项仅影响执行计数输出。执行少于num次的符号被抑制。 |
-n symspec,-- time = symspec | 在-n选项使gprof的,在其调用图分析,仅传播时间匹配符号symspec。 |
-N symspec,-- no -time =symspec | 在-n选项使gprof的,在其调用图分析,不传播时间匹配符号symspec。 |
-S filename,--external-symbol-table=filename | 的-S选项原因GPROF读取外部符号表文件,如/ PROC / kallsyms,而不是从给定对象文件中读取的符号表(默认为“ a.out的”)。这对于分析内核模块很有用。 |
-z,-- display-unused-functions | 如果提供-z选项,则gprof将在平面配置文件中提及所有函数,甚至包括那些从未调用过且没有时间花费的函数。与-c选项结合使用时,发现从未调用过的例程非常有用。 |
-d [ num ],--debug [= num ] | 该-d NUM选项指定调试选项。如果未指定num,则打开所有调试信息。 |
-h,--help | 该-h选项打印命令行用法。 |
-Oname, --file-format=name | 选择配置文件数据文件的格式。公认的格式是auto(默认),bsd,4.4bsd,magic和prof(尚不支持)。 |
-s,-- sum |
该-s选项的原因GPROF总结在配置文件中的数据文件,它读取的信息,并写出称为配置数据文件gmon.sum,其中包含从配置文件数据文件,所有的信息GPROF读取该文件gmon。 sum可以是指定的输入文件之一;这样的效果是将其他输入文件中的数据合并到gmon.sum中。 最终,您可以再次运行不带-s的gprof来分析文件gmon.sum中的累积数据。 |
-v,-- version | 该-v标志导致GPROF打印当前版本号,然后退出。 |
这些选项已被使用symspecs的较新版本替换。
-e function_name | 该-e功能选项告诉gprof的有关函数的不打印信息函数名调用图(和它的孩子们......)。该函数仍将作为任何调用该函数的子函数列出,但其索引号将显示为[not print]。可以给出多个-e选项;每个-e选项只能指示一个function_name。 |
-E function_name | 该-E 功能选项的作用类似于-e选项,但时间的函数花费(和孩子谁不是从别的地方调用),将不会被用于计算百分比-的时间用于调用图。可以给出多个-E选项;每个-E选项只能指示一个function_name。 |
-f function_name | 该-f功能选项原因GPROF限制调用图的功能函数名和它的孩子(和他们的孩子......)。可以给出多个-f选项;每个-f选项只能指示一个function_name。 |
-F function_name | 该-F功能选项的作用类似于-f选项,但只有在功能和它的孩子所花费的时间(和他们的孩子......)将被用于测定总时间和百分比-的时间用于调用图。可以给出多个-F选项;每个-F选项只能指示一个function_name。该-F选项将覆盖-E选项。 |
查看英文版