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的使用 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- 对于涉及函数分析的功能
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- 对于涉及行分析的功能
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
配置Profile的三种方式 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- 修改profiler.ini文件 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
profiler.ini位于VC98/bin目录下,在其[profiler]段中,你可以指定不参与分析的LIB文件或OBJ文件。比如:
|
VC的Profile(测试程序瓶颈)
最新推荐文章于 2024-02-11 12:29:41 发布