如果我们利用Monte Carlo Profiler测试我们外部的应用程序(非嵌入到平台的程序),你会发现在相关的数据中根本无法观察到我们的应用程序的相关信息,而只会看到在“MODULES”和 “SYMBOLS”中“unknown”名字模块的Hits,这是为什么呢?
经过多方查找原因,原来Monte Carlo Profiler 中“MODULES”和 “SYMBOLS”的名字是从一个嵌入到平台中并存储在ROM中的一张表(其实就是releasedir下的.map文件组成的),从中读出运行程序的SYMBOLS(名称),从而可以识别各个运行程序的名称。其实,profiler是使用这张表把一个地址转化成一个名称,如:0x01234567转化成_ProfileStart。象我们集成到平台的应用程序都有相应的.map文件,profiler就是从中读取相应的信息,一些朋友可能会说,那我们把相关应用的.map文件给我们的平台不就行了,其实这是没有办法实现的,因为Monte Carlo Profiler只会读取存储在平台自身的.map文件,对外部的.map文件它是置之不理。
难道真的没有其他办法了吗?其实不然,还有一种做法可以解决这个问题,而且包含Monte Carlo Profile的功能,并能更好的实现,这个工具就是Perfalyzer。
Perfalyzer工具其实是结合了Monte Carlo Profile和CELOG。Monte Carlo Profile之前我们已经介绍了,我们来说说这个CELOG工具,CELOG是一个数据log工具,它可以记录各种系统数据,并把这些数据存储在celog.clg文件中,我们可以从celog.clg文件中读取我们需要的数据(celog.clg数据的读取等相关内容,我会在下面结合实际介绍)。Perfalyzer是无需要KITL支持,可以独立运行在设备上,无需要与PB交互。现在我们对这个工具做具体的介绍;
(一)、准备工作
1、平台的构建
平台的建设跟前面Monte Carlo Profile构建方法是一致的,区别主要是对Build Option设置,我们设置如下:
其中如下两个选项是必须设置的:
● Enable Event Tracking During Boot:可以使CELOG可用。
● Enable Profiling: 这个当然也要。
● Flush tracked events to Release Directory:这个选项可选可不选,它的功能是可以自动启动CeLog,如果选了这个当我们的平台启动CeLog就跟着启动,celog.clg文件会不断的增大,因而我选择手动启动。这个会在下面的设计中具体说明。
其他选项由于主要因为没有启用KITL无法通过TOOL连接到目标平台,所以在仿真器上弄了个Folded Sharing方便我跟机器通讯。
之后,就可以Sysgen平台了。
2、一些应用程序的准备
(1)、perfalyzer.exe
这个应用程序存储在这个目录下%_WINCEROOT%\public\common\oak\bin\i386\perfalyzer.exe,我们要把这个perfalyzer.exe这个应用程序拷贝到我们目标机器的RelDir 下面,以我的机器为例:%_WINCEROOT% \PBWorkspaces\Test924\RelDir\Emulator_x86_Release
还有在%_WINCEROOT%\public\common\oak\bin\i386\cedb400.dll这个.dll也拷贝到我们的目标机器上,这样perfalyzer.exe才能运行起来。
(2)、建立一个启动celogflush.exe的快捷方式
如果之前勾选Flush tracked events to Release Directory这一步就可以省略。celogflush.exe这个exe在我们的RelDir下面。快捷方式的建立如下:
83#\Windows\celogflush.exe -buf 0x100000 -time 60000 -n \celog.clg -z 0x00800000 -ui 1
我们可以新建一个文本文件,把上面的代码拷贝进去,然后把它命名为以lnk为后缀的文件,关于快捷方式的创建大家可以参看msdn:http://msdn2.microsoft.com/en-us/library/aa935642.aspx
我们这个是60秒写一次celog。之后我们要把这个CeLog.dll(正常都会有的,如果没有可以到如下目录查找%_WINCEROOT%\PUBLIC\COMMON\OAK\TARGET)和celogflush.exe放到目标机器的Windows(就是上面我们快捷方式上面写的目录,大家也可以通过改上面的快捷方式想放哪就放哪,但记得把CeLog.dll拷贝到同一目录下)目录之下。
(3)、建立一个关闭CeLogFlush的应用程序
关闭CeLogFlush的应用程序的源代码(CeLogStopFlush.exe)可以在如下目录找到的%_WINCEROOT%\Public\Common\SDK\Samples\CeLog\Flush\Stopflush找到,使用build –c可以生成CeLogStopFlush.exe。这样我们就可以自己启动和关闭Celog了。
(4)、建立一个启动PROFILER的应用程序(ProfileStart)
我们可以建立一个启动PROFILER的应用程序,在这边我是使用EVC ++4.0来建立这个应用程序,我们可以建立一个WCE Application 应用程序,也是选择“ A simple Windows CE application”。这样就建立了一个应用程序。
在WINMAIN函数中写入如下代码:
● ProfileStart(200,PROFILE_CELOG);
PROFILE_CELOG)这个模式在帮助文档中是没有说明的,但是可以使用的,它的功能是启动并把PROFILER转到CELOG模式。
(5)、建立一个关闭PROFILER的应用程序(ProfileStop)
跟建立ProfileStart一样,建立一个工程,在WINMAIN输入如下代码:
● ProfileStop();
这样就能顺利的结束PROFILER。记得在工程里面要加入profiler.h头文件,这个头文件可以在如下目录找到:%_WINCEROOT%\PUBLIC\COMMON\OAK\INC
(6)、准备被测试应用程序的.map文件和.exe文件
生成exe文件的时候要记得同时让它生成map文件,map文件可以让perfalyzer工具找到相应的信息,生成的map文件要放在RelDir目录下。.exe的生成要按照你的平台的bulid属性生成相应的exe文件。Perfalyzer比MONTE CARLO 优势之处就是它可以找reldir目录下的所有.map文件不管是否平台应用程序。
至此,准备工作已经准备完毕,可以开始使用perfalyzer来测试我们程序的效率了。
(二)、开始使用perfalyzer进行具体的测试
现在我以我们的应用程序TESTMODE作为测试程序,可以开始Attach Device,把平台下载到仿真模拟器中。然后把
● CeLog.dll和celogflush.exe放到Windows目录下
● 把上面准备工作中的2—6步中的exe文件放到目标机器上
完成以上之后就可以开始进行具体测试了。
1、首先启动celog,双击那个lnk文件,它就会提示如下,这样就会在我的设备目录下生成celog.clg文件
2、双击ProfileStart启动Profiler
3、运行待测试exe
4、等待测试程序运行完成,双击ProfileStop关闭Proflier。
5、之后,可以双击celogstopflush停止celog(如果时间没有1分钟,建议还是一分钟后停止,或者可以改变lnk里面写入时间)
6、把celog.clg拷贝到PC机上,并且放到跟perfalyzer同目录下,
7、进入cmd模式,进入到perfalyzer.exe目录下,运行perfalyzer celog.clg,就会在%_WINCEROOT%\PBWorkspaces\Test924\RelDir\Emulator_x86_Release\Perf目录下生成几个htm文件,这几个文件就记录了测试的结果。
● 这是每个模块的信息:
● 这是每个Symbol的信息:
● 这是每个THREAD的信息:
对以上的信息是不是感觉很熟悉,是不是跟MONTE CARLO 中的MONTE CARLO HIT REPORT很相似。
至此,对于PROFILER的全部相关技术就讲到这里,需要能给大家有启发。
本文转自Walzer博客园博客,原文链接:http://www.cnblogs.com/walzer/archive/2008/02/20/1074522.html,如需转载请自行联系原作者