【发布时间】:2010-09-20 08:31:32
【问题描述】:
除了 Visual Studio 中的工具之外,您还知道哪些工具可以分析 Windows CE/Mobile 应用程序中的性能瓶颈?我正在寻找类似 AQTime for CE/Mobile 之类的东西来分析编译为本机代码的 C/C++ 应用程序。
【问题讨论】:
标签: windows-mobile windows-ce native profiling
除了 Visual Studio 中的工具之外,您还知道哪些工具可以分析 Windows CE/Mobile 应用程序中的性能瓶颈?我正在寻找类似 AQTime for CE/Mobile 之类的东西来分析编译为本机代码的 C/C++ 应用程序。
【问题讨论】:
标签: windows-mobile windows-ce native profiling
Windows CE 开箱即用地支持Remote Call Profiler(如果OEM 添加了对它的支持)。我相信,WinMo 图像通常已经在图像中支持它。对于 CE,您需要设置 IMAGEPROFILER 环境变量(使用项目属性)。
MSDN 中不清楚的是如何检测不是使用 Platform Builder 构建的应用程序,但它实际上非常简单。您必须将 /callcap 开关添加到编译器命令行并将 cecap.lib 添加到链接器设置。
当然,您需要一个工具来捕获和显示探查器数据。为此,您可以使用 Platform Builder 的评估版(5.0 或 6.0)(评估是免费的)或eVC 4.0(也是免费的)。
有关分析器使用的更多信息,来自 CE 核心团队的 Sue Loh 已在博客中介绍了一些相关信息。
【讨论】:
我还没有找到任何用于 WindowsMobile 本地开发的此类工具。
我发现最接近的是 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;
}
【讨论】:
我为 Windows Mobile 编写了一个调用图分析器。目前(截至 2010 年 1 月)处于 Beta 阶段,可以免费下载。
HTH
-扎克
【讨论】:
如果您正在进行 .NET CF 开发,请查看 Power Toys for .NET CF 3.5 以了解可帮助您查明瓶颈的实用程序,尤其是与内存相关的瓶颈。
【讨论】: