Windows CE/Mobile向けのコードプロファイリング/パフォーマンス分析ツール
-
05-07-2019 - |
質問
Windows CE/モバイル アプリケーションのパフォーマンスのボトルネックを分析するための、Visual Studio のツール以外にどのようなツールを知っていますか?ネイティブ コードにコンパイルされた C/C++ アプリケーションをプロファイリングするために、CE/Mobile 用の AQTime のようなものを探しています。
解決
WindowsMobile のネイティブ開発用のそのようなツールは見つかりませんでした。
私が見つけた中で最も近いのは EnTrek ツールセット (CodeSnitch / ProcMan) ですが、これらは実際にはプロファイリング ツールではありません。http://www.entrek.com/products.htm
私たちが行ったのは、VC++ 用の Visual Studio の "/callcap" スイッチを使用して、独自のプロファイリング サポートを独自の製品に組み込むことです。このスイッチを使用すると、好みに合わせてタイミングやカウントをダンプするプロファイリング ライブラリを構築できます。ほとんどの場合はうまく機能しますが、場合によっては、これらのフック関数のオーバーヘッドが大きすぎて、タイミング結果が大量の関数呼び出しの領域に偏る可能性があります。
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;
}
他のヒント
Windows CEはリモートコールプロファイラをサポートしています(OEMが追加された場合それのサポート)箱から出して。 WinMoイメージは、通常、そのイメージで既にサポートされていると思います。 CEの場合、IMAGEPROFILER環境変数セット(プロジェクトプロパティを使用)が必要です。
MSDNで不明な点は、Platform Builderでビルドされていないアプリをインストルメントする方法ですが、実際には非常に簡単です。 / callcap swithをコンパイラーのコマンドラインに追加し、cecap.libをリンカー設定に追加する必要があります。
もちろん、プロファイラーデータをキャプチャして表示するツールが必要になります。そのためには、Platform Builderの評価版を使用できます( 5.0 または 6.0 )(評価は無料)または eVC 4.0 (無料)。
プロファイラーの使用方法の詳細については、CEコアチームのSue Lohがそれについて少しブログを書いています。
Windows Mobile用のCall Graphプロファイラーを作成しました。現在(2010年1月現在)ベータ段階であり、無料でダウンロードできます。
HTH
-Zak
.NET CF開発を行っている場合は、 Power Toys for .NET CF 3.5 は、特にメモリ関連のボトルネックを特定するのに役立つユーティリティ用です。