Profile的作用
|
帮助你分析并发现程序运行的瓶颈,找到耗时所在,同时也能帮助你发现不会被执行的代码。从而最终实现程序的优化。
|
Profile的组成
|
Profile包括3个命令行工具:PREP,PROFILE,PLIST。可以以命令行方式运行Profile,其过程是:PREP读取应用程序的可执行文件并生成一个.PBI文件和一个.PBT文件;PROFILE根据.PBI文件,实际运行并分析程序,生成.PBO输出文件;PREP再根据.PBO文件和.PBT文件,生成新的.PBT文件;PLIST根据.PBT文件生成可阅读的输出。
|
Profile的具体功能
|
- Function timing:对程序花费在执行特定函数上的时间进行评估。可以通过Profile对话框激活该功能。分析结果中,Func Time一栏以秒为单位记录了函数运行所花时间,下一栏显示了该函数时间占总运行时间的百分比;Func+Child Time栏记录了函数及其所调用的子函数运行所花的总时间,下一栏显示了前述时间占总运行时间的百分比;Hit Count栏记录函数被调用的次数;Function栏显示函数的名称。
|
|
- Function coverage:记录特定函数是否被调用,可以用来确定代码中的未执行部分。可以通过Profile对话框激活该功能。分析结果列出所有被分析的函数,并使用*号标记执行过的函数。
|
|
- Function counting:记录程序调用特定函数的次数。在Profile对话框中选择Custom,并在Custome Settings中指定fcount.bat(位于VC98\bin目录下)。需要注意的是,在指定fcount.bat所在目录时,最好不要用长文件名的方式,这样有可能出错,比如要将c:\Program Files写成c:\Progra~1。
|
|
- Line counting:记录程序所执行的代码中特定行的次数。在Profile对话框中选择Custom,并在Custome Settings中指定lcount.bat(位于VC98\bin目录下)。该功能使用.EXE中的调试信息启动Profile,因此不需要.MAP文件。分析结果中,Line栏标示源代码的行号,Hit Count栏记录该行执行次数,下一栏显示了该行执行次数占所有代码行执行次数的百分比,Source Line显示了对应的源代码。
|
|
- Line coverage:记录代码中的特定行是否被执行,可以用来确定代码中的未执行部分。可以通过Profile对话框激活该功能。分析结果列出所有被分析的代码行,并使用*号标记执行过的行。由于Line coverage只记录代码行是否被执行过,所以其执行开销要比Line counting小。
|
|
此外,Profile对话框还提供了Merge功能,用以把多次运行Profile之后的统计结果组合起来。如果你正在使用Function coverage功能,则会看到是否测试了所有函数;如果你正在使用Function timing功能,则会看到以往分析与本次分析所有合并运行的累计时间。
|
IDE环境下Profile的使用
|
- 对于涉及函数分析的功能
-
选择Project->Settings->Link,选择Enable profiling复选框
-
重建项目
-
选择Build->Profile,弹出Profile对话框
-
做必要设置后,选择OK,开始运行程序
|
|
- 对于涉及行分析的功能
-
选择Project->Settings->Link,选择Enable profiling复选框和Generate debug info复选框
-
选择Project->Settings->C/C++,选择Line Numbers Only
-
重建项目
-
选择Build->Profile,弹出Profile对话框
-
做必要设置后,选择OK,开始运行程序
|
配置Profile的三种方式
|
- 修改profiler.ini文件
|
|
profiler.ini位于VC98\bin目录下,在其[profiler]段中,你可以指定不参与分析的LIB文件或OBJ文件。比如:
|
|
[profiler]
exclude:user32.lib
exclude:gdi32.lib
|
|
|
- 在Profile对话框中指定选项
|
|
若你选择了Funciton timing、Function coverage或Line coverage选项,则你可以在Advanced settings中指定进一步的范围,比如:你希望Profile只分析SampleApp.cpp文件中特定范围内的代码,可以在Advanced settings中填入,/EXCALL /INC SampleApp.cpp(30-67)。又如:你希望file1.obj和file2.obj不参与分析,则可以在Advanced
settings中填入,/EXC file1.obj /EXC file2.obj。再如:你希望只描述指定函数,则可以在Advanced settings中填入,/SF ?SampleFunc@@YAXPAH@@,紧跟SF参数的是特定函数的修饰符名,获取该名称的最简单的方式是在创建项目时生成的MAP文件中查找。
|
|
SF,EXCALL,EXC,INC都是PREP的命令行参数,有关其他参数的详细说明可以通过在命令行提示符输入PREP /H得到。
|
|
- 编写批命令文件
|
|
可以参考fcount.bat、fcover.bat、ftime.bat、lcount.bat以及lcover.bat
|
从Profile中输出数据
|
PLIST /T命令允许PLIST将.PBT文件内容以制表格式输出到文本文件中,该格式适合输入到电子表格或数据库中。比如:PLIST /T MYPROG > MYPROG.TXT,生成的MYPROG.TXT可以利用profiler.xlm(位于VC98\bin目录下)导入到Microsoft Excel电子表格中。
|
注意
|
- 通常,分析整个程序的意义不大,因为大多数Windows应用程序,主要时间花费在消息等待上,因此精确定位要分析的代码,可以加快Profile的执行速度,提高其分析准确度。在Profile执行期间尽量关闭其他不相干的应用程序。
|
|
- 若启用了远程调试,则不能够从Build菜单中调用Profile功能。
|
|
- 对于inline函数,编译器以实际代码替换函数调用,因此inline函数不生成.MAP文件或CALL指令,所以当执行这样的函数时,Profile将无法得知,花费时间、运行次数等数据都归属于调用该函数的函数。Profile可以提供有关inline函数的行一级的运行次数和覆盖信息。
|
|
- 对于多线程应用程序,Profile的行为取决于你所选择的分析方式,对于Line counting和Line coverage,Profile并未区分线程之间有何不同,它将包含当前运行的所有线程。对于Function timing、Function coverage和Function counting,分析结果取决于线程,你可以用以下方式分析一个独立线程:
-
将线程的主函数声明为初始函数(用PREP /SF选项)
-
包含程序中的所有函数(不要使用PREP /EXC选项)
|
|
否则,分析结果很难解释。
|
|
(完)
|
http://blog.chinaunix.net/space.php?uid=7437948&do=blog&id=2054891
分享到:
相关推荐
基本介绍了如何使用 VC6.0的profile
VC++2010学习版密钥 professional key
SpringBoot中的Profile配置的使用示例源码
VC++ resource for amateursinclude basic programming method and basic principle.The profile is good welcome to load.
C++6.0中profile选项为灰色的解决办法,及profile的使用
1.上面这三个文件是bash shell的用户环境配置文件,位于用户的主目录下。其中.bash_profile是最重要的一个配置文件,它在用户每次登录系统时...但一般 来说都会在.bash_profile里调用.bashrc脚本以便统一配置用户环境。
ORACLE_PROFILE的使用详解;Oracle数据库审计功能的使用
VsCode配置-profile
使用Photoshop编辑数码打样的ICC Profile
Windows下Neor Profile SQL 配置监控centos(linux)mysql详细步骤
用IT8卡和扫描仪制作打印机ICC的软件 使用Profile Prism生成打印机配置文件的简单步骤 ...注意:使用色彩配置文件,必须用步骤2和3的设置,同时在打印机的属性里颜色管理中添加生成的色彩配置文件.
如何使用flex的profile进行性能分析
domino xpages systemprofile使用例子
许多ASP.NET应用程序需要跨访问的用户...但如今,使用 ASP.NET 2.0的Profile对象,这个过程变得异常简单。Stephen Walther将验证该对象,并向你展示如何使用Profile来跟踪用户属性、创建一个购物篮,及其他一些例子。
本篇文章主要介绍了spring @profile注解的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
ANTS Memory Profile 是一款使用方便,可以很快看到内存使用情况的分析工具,对内存泄漏有很好的监视功能!
报错libpng warning: iCCP: known incorrect sRGB profile的问题
/etc/profile 每个用户,首次登录时被执行; /etc/bashrc 每个运行bash shell的用户都执行此文件,当bsh被打开时,该文件被读取; ~/.bash_profile 专用于本用户的shell信息,仅被执行一次; ~/.bashrc 文件包含本...
如何在Flex中使用profile的教程
重写profile,让profile工作与自己的数据库