| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- 在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,分析结果取决于线程,你可以用以下方式分析一个独立线程:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
否则,分析结果很难解释。 |
VC使用的文章(转)
最新推荐文章于 2021-12-11 21:11:51 发布