Windows CE (.NET) とか IoTとか

組込みWindows と IoTの話を扱います

Windows Mobile5/6でKernelTrackerを使う

Windows CE Platform BuilderにはKernelTrackerという強力なデバッグツールが付いています。このツールを使うと、実行中のWindows CE OSのプロセス情報、スレッド情報を記録し、どのように実行スレッドが変化していったかをグラフィカルに表示させることができます。

以下はCE.NET 4.xの頃のドキュメントです。

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/remtools/htm/pbconcelogremotekerneltracker.asp

Visual Studio 2005の場合も、Platform Builder 6 Add OnにはKernel Tracker 6.00が付属しており、Visual Studio 2005のメニューから起動できます。ただし、このKernelTrackerも接続方法はPlatform Managerのみサポートしているので、WM5/6で主流のCoreConで簡単に接続、とはいかないのが現状です。

以下の方法で、Windows XPで動作しているWM6のエミュレータでKernelTrackerを動かすことができましたので、参考にしてみてください。セキュリティのかかっている(キャリアブランドの)実機ではデータが取れないかもしれませんが、少なくともエミュレータでは可能でした。

1. 準備

手近にあった関係で Visual Studio 2005 (SP1) Professional と Windows CE Embedded 6.0 (Platform Builder) SP1を利用しています。 当方の環境ではWindows CE Embedded 6.0のKernelTracker バイナリは

C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\bin\wce600

にありました。

2. Device Emulator ManagerでWindows Mobile 6 Professional SDK以下のターゲットを起動

今回は「JPN Windows Mobile 6 Classic Emulator」を起動してみました。

3. 実機だと問題ないですが、エミュレータの場合には、ActiveSyncの設定で「DMA接続」を有効にしなければならないのでこれを確認。

Activesync45connect

↑こんな感じ

4. Device Emulator Managerで起動したターゲット表示を右クリックして、"Cradle"状態にする。

Deviceemulatormanager2

↑こんな感じ

ActiveSync接続が完了します。同期ウィザードは単にキャンセルします。

5. Kernel Trackerを起動します。

標準ではすぐにConnectダイアログが出てきますが、いったんこれをキャンセルします。

6. KernelTrackerのConnectionメニューから「Configure Platform Manager...」を起動します。

ここではPlatform Manager を使用する(WM2003以前の) SDKも表示されるのですが、WM5/6用のSDKは表示されません。そこで、「Windows CE Default Platform」を選択した状態で[Add Device]を押して、出てきたデバイスアイコンを仮に[WM6]などと名付けます。

そして、[WM6]アイコンを選択した状態で[Properties]ボタンを押して、TrasportとStartupServerをともに「Microsoft ActiveSync」にします。ActiveSyncではConfigure項目は何も設定するところはありません。

Activesync45config

[TEST]ボタンを押すと、必要なターゲット側モジュールがActiveSync経由で転送されたあと起動され「Connection to device established」になります。

さらに5秒くらい待つと[OK]ボタンが押せるようになるので、[OK]を(3回)押して設定ダイアログを終了します。

Activesync45connectok

7. KernelTrackerのConnectionメニューから「Connect to Device」を実行し、さきほど設定したWM6アイコンを選択しOKを押します。

これでリアルタイムキャプチャが始まります。Zoom Range の数字が大きいと表示にすごく時間がかかるので、接続前に1000msecくらいにしておくと反応が悪くならないです。

8. キャプチャを終えるときはConnectionメニューから「Disconnect from Device」を選びます。

いったん接続を切った後、自由にキャプチャした情報を眺めることができます。

また、Fileメニューからキャプチャした情報をCELOGファイルをして保存し、あとからKernel Trackerで開くこともできます。

※ここから先、どのようなところを調べればよいかというのはノウハウですが、たとえば複数スレッドのデッドロックとか、あるスレッドが異常にCPU時間を消費しているとかは一発でわかります。

Kernel Trackerのキャプチャスレッドは優先度が通常より上げてありますが、それでも通信が維持できない場合は、リモートキャプチャではなく、CE上でキャプチャのみ行う実行ファイルを動かし、あとでCELOGファイルを取り出してデスクトップで解析する方法もあります。

======================================

CE6付属のKernelTrackerは基本的に前バージョン(4.x用または5.0用)の上位コンパチです。拡張部分は32以上のプロセスサポートとCE6で拡張されたCELOGフォーマットのサポートだと考えています。CE5ベースのWM5/6で使用しても問題ありません。

Kernel TrackerはPlatform Managerでつなぎさえすれば動作するので、データ伝送方法としてActiveSync、TCP/IP、KITLのいずれかの方法で伝送可能です。データ転送速度的にはUSB 1.0経由のActiveSyncよりWireless LAN経由のTCP/IPのほうが高速です。リモートプログラム起動方法にはActiveSync、CESH、Manual Serverがありますが、こちらは細い線でOKなのでSerialやBlueTooth経由のActiveSync起動でも問題なく使用できます。最悪通信が使用できないときには本体内で完結するCeLogFlushやOSCapture(あるいは自作のキャプチャツール)などを使うことができます。

Kerneltracker6

↑KernelTracker6(クリックして拡大)