适用于Windows CE/Mobile的代码分析/性能分析工具

6

除了Visual Studio中的工具,你还知道哪些可以分析Windows CE/Mobile应用程序性能瓶颈的工具吗?我正在寻找类似于AQTime适用于CE/Mobile的工具,以便对编译为本机代码的C/C++应用程序进行分析。

4个回答

9
Windows CE自带支持Remote Call Profiler(如果OEM添加了支持)。WinMo镜像通常已经在镜像中支持它。对于CE,您需要设置IMAGEPROFILER环境变量(在项目属性下)。

MSDN上不清楚如何令一个不是由Platform Builder构建的应用程序受监控,但实际上很简单。您需要在编译器命令行中添加/callcap开关,并在链接器设置中添加cecap.lib。

当然,您需要一款工具来捕获和显示分析数据。您可以使用Platform Builder的评估版本(5.06.0)(评估版是免费的),也可以使用eVC 4.0(同样免费)。

有关分析使用的更多信息,CE核心团队的Sue Loh在博客中谈到了一些内容。


+1 感谢您的建议。这真是救命稻草 :) 通过它的分析数据,我疯狂地优化了我的位块传送器。 - legends2k

5

我没有找到任何适用于WindowsMobile本地开发的工具。

最接近的工具是EnTrek工具集(CodeSnitch / ProcMan),但它们并不是真正的性能分析工具。 http://www.entrek.com/products.htm

我们做的是使用Vistual Studio的“/callcap”开关为VC ++构建自己的产品支持性能分析。使用该开关,您可以构建一个性能分析库,该库会输出时间和计数等信息。对我们来说,它基本上运行良好,但有时这些钩子函数的开销可能太大,会将定时结果偏向于大量函数调用的区域。

来自MSDN文档:

/callcap选项会导致编译器在每个函数的开头和结尾插入对性能分析钩子的调用。

必须使用未带callcap开关的编译性能分析钩子。如果使用callcap开关编译性能分析钩子函数,则函数将对其自身执行无限递归调用。

下面的代码示例Callcaphooks.c显示了一个用于编译不带callcap的性能分析钩子函数_CAP_Enter_Function。

// File: callcaphooks.c

#include <stdio.h>
int main();

void _CAP_Enter_Function(void *p) 
{
    if (p != main) 
        printf("Enter function   (at address %p) at %d\n", 
            p, GetTickCount());
        return;
}
void _CAP_Exit_Function(void *p) 
{
    if (p != main) 
        printf("Leaving function (at address %p) at %d\n", 
            p, GetTickCount());
    return;
}

谢谢,Shane。正如你所说,不完全是我想要的。但仍然是一个很好的提示。我已经有一些用于分析的实用类,但直到现在我才只是通过宏手动添加到可疑代码中。 - Fabio Ceconello

3
我已经为Windows Mobile编写了一个调用图分析器。目前(截至2010年1月)处于测试阶段,可以免费下载。希望对你有所帮助。- Zak http://www.codeprophet.co.cc

看起来很有前途,我会试一试的。 - Fabio Ceconello

0
如果你正在进行.NET CF开发,请查看.NET CF 3.5 Power Toys,以获取可以帮助你定位瓶颈的实用工具,特别是与内存相关的问题。

抱歉,我应该提到,我知道 Power Toys,但在我的情况下它们无法使用,因为代码是本地的。 - Fabio Ceconello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接