6

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

4

4 回答 4

9

Windows CE 支持开箱即用的Remote Call Profiler (如果 OEM 添加了对它的支持)。我相信,WinMo 图像通常已经在图像中支持它。对于 CE,您需要设置 IMAGEPROFILER 环境变量(使用项目属性)。

MSDN 中不清楚的是如何检测不是使用 Platform Builder 构建的应用程序,但它实际上非常简单。您必须将 /callcap 开关添加到编译器命令行并将 cecap.lib 添加到链接器设置。

当然,您需要一个工具来捕获和显示探查器数据。为此,您可以使用 Platform Builder 的评估版(5.06.0)(eval 是免费的)或eVC 4.0(也是免费的)。

有关分析器使用的更多信息,来自 CE 核心团队的 Sue Loh 已在博客中介绍了一些相关信息。

于 2008-12-01T21:42:08.427 回答
5

我还没有为 WindowsMo​​bile 找到任何此类用于本机开发的工具。

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

我们所做的是使用 VC++ 的 Vistual Studio "/callcap" 开关将自己的分析支持构建到我们自己的产品中。使用该开关,您可以构建一个分析库,该库可以输出时间和计数,无论您喜欢什么。它对我们来说效果很好,但有时这些钩子函数的开销可能太大,它可能会将计时结果倾斜到大量函数调用的区域。

来自 MSDN 文档:

/callcap 选项使编译器在每个函数的开头和结尾插入对分析挂钩的调用。

您必须在没有 callcap 开关的情况下编译分析挂钩。如果您使用 callcap 开关编译分析挂钩函数,这些函数将对它们自己执行无限递归调用。

以下代码示例 Callcaphooks.c 显示了一个分析挂钩函数 _CAP_Enter_Function,用于在没有 callcap 的情况下进行编译。

// 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;
}
于 2008-11-02T04:24:19.737 回答
3

我为 Windows Mobile 编写了一个调用图分析器。它目前(截至 2010 年 1 月)处于 Beta 阶段,可以免费下载。

http://www.codeprophet.co.cc

高温高压

-扎克

于 2010-01-26T21:43:13.097 回答
0

如果您正在进行 .NET CF 开发,请查看Power Toys for .NET CF 3.5,了解可以帮助您查明瓶颈的实用程序,尤其是与内存相关的瓶颈。

于 2008-11-02T00:21:39.353 回答