【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/,moyingzz@etang.com
(续篇)
Profile的作用
帮助你分析并发现程序运行的瓶颈,找到耗时所在,同时也能帮助你发现不会被执行的代码。从而最终实现程序的优化。
Profile的组成
Profile包括3个命令行工具:PREP,PROFILE,PLIST。可以以命令行方式运行Profile,其过程是:PREP读取应用程序的可执行文件并生成一个.PBI文件和一个.PBT文件;PROFILE根据.PBI文件,实际运行并分析程序,生成.PBO输出文件;PREP再根据.PBO文件和.PBT文件,生成新的.PBT文件;PLIST根据.PBT文件生成可阅读的输出。
Profile的具体功能
![](/images/load.gif)
![](/images/load.gif)
![](/images/load.gif)
![](/images/load.gif)
![](/images/load.gif)
此外,Profile对话框还提供了Merge功能,用以把多次运行Profile之后的统计结果组合起来。如果你正在使用Function coverage功能,则会看到是否测试了所有函数;如果你正在使用Function timing功能,则会看到以往分析与本次分析所有合并运行的累计时间。
IDE环境下Profile的使用
![](/images/load.gif)
选择Project->Settings->Link,选择Enable profiling复选框
重建项目
选择Build->Profile,弹出Profile对话框
做必要设置后,选择OK,开始运行程序
![](/images/load.gif)
选择Project->Settings->Link,选择Enable profiling复选框和Generate debug info复选框
选择Project->Settings->C/C++,选择Line Numbers Only
重建项目
选择Build->Profile,弹出Profile对话框
做必要设置后,选择OK,开始运行程序
配置Profile的三种方式
![](/images/load.gif)
profiler.ini位于VC98\bin目录下,在其[profiler]段中,你可以指定不参与分析的LIB文件或OBJ文件。比如:
[profiler]
exclude:user32.lib
exclude:gdi32.lib
![](/images/load.gif)
若你选择了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得到。
![](/images/load.gif)
可以参考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电子表格中。
注意
![](/images/load.gif)
![](/images/load.gif)
![](/images/load.gif)
![](/images/load.gif)
将线程的主函数声明为初始函数(用PREP /SF选项)
包含程序中的所有函数(不要使用PREP /EXC选项)
否则,分析结果很难解释。
(完)