【问题标题】:Code profiling / performance analysis tools for Windows CE/Mobile适用于 Windows CE/Mobile 的代码分析/性能分析工具
【发布时间】:2010-09-20 08:31:32
【问题描述】:

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

【问题讨论】:

    标签: windows-mobile windows-ce native profiling


    【解决方案1】:

    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 感谢您提出此建议。这是一个救命稻草 :) 用它的分析数据疯狂地优化了我的 blitter。
    【解决方案2】:

    我还没有找到任何用于 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;
    }
    

    【讨论】:

    • 谢谢,谢恩。正如你所说,不完全是我想要的。但仍然是一个很好的提示。我已经有一些用于分析的实用程序类,但直到现在我只是通过可疑代码中的宏手动添加它们。
    【解决方案3】:

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

    http://www.codeprophet.co.cc

    HTH

    -扎克

    【讨论】:

    • 看起来很有希望,我试试看。
    【解决方案4】:

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

    【讨论】:

    • 抱歉,我应该提一下,我知道 Power Toys,但就我而言,它们无法使用,因为代码是原生的。
    最近更新 更多