1

Windows CE と Windows Mobile で、さまざまなデバイス タイプでモバイル データを取得するためのかなり複雑なソフトウェアを実行しています。Windows CE 6.0 がインストールされている唯一のデバイス タイプでは、クライアントはオペレーティング システムをランダムにフリーズします (そのため、ウォーム ブートが必要です)。クライアントは、フリーズする前に 1 ~ 2 日間は正常に動作する可能性がありますが、5 分かかる場合もあります (ハンドルとメモリ リークについては既にチェック済みです)。デバイス メーカーのログ ファイルには、デバイスがフリーズしたときに次のようなエントリが表示されます。

例外 'データの中止' (4): スレッド ID = 070a003e (pth = 89ca07e0)、Proc ID = 0709003e (pprc = 8a01d3d0) 'OurClient.exe'、VM アクティブ = 0709003e (pprc = 8a01d3d0) 'OurClient.exe ' PC=41a66b28(mscoree3_5.dll+0x00056b28) RA=41a64ab4(mscoree3_5.dll+0x00054ab4) SP=0003e28c, BVA=​​00000132

メッセージは時々異なります (kernel.dll、k.core.dll、nk.exe を除いて、これまでに 20 の異なるメッセージを数えたと思います)。

私の質問は基本的に、.NET フレームワークとカーネルの奥深くで発生するこのようなエラーをどのようにデバッグできますか? たとえば、プログラム カウンターを mscorlib 内のメソッドに変換するにはどうすればよいでしょうか (リターン アドレスも同じです)。私たちのプログラムは CE 6 でうまく動作しない可能性がありますか、それともドライバーの問題でしょうか?

更新:デバイス ドライバーの 1 つがキーボード フックの実装に干渉していることが判明しました。

4

2 に答える 2

2

正直なところ、(MS 以外で) 与えられたもので、このようなネイティブ例外をデバッグし、その時点で mscoree3_5 が呼び出されていたものを見つけることができるとは思いません。これを行うことを検討してからしばらく経ちましたが、これができない理由があったことを覚えています。おそらく、デバッグ シンボルを持っていなかったためか、.NET ランタイムの別の性質によるものだったのかもしれませんが、思い出すことはできません。

ただし、データ中止メッセージを翻訳して、例外の意味を理解することに成功しました...

あなたの例外では:

RA: リターン アドレス BVA: ベース仮想アドレス PC: プログラム カウンタ SP: スタック ポインタ FSR: フォルト ステータス レジスタ

あなたの例外にFSRが含まれていなかったことに少し驚いています。それを切り捨てましたか? これは、ミスアライメントされた読み取りなどを見つけるのに役立ちました。これらのメッセージをデバッグする方法を説明するのに役立つ適切なリンクがあります。

印刷された例外文字列 - これらのフラグは何を意味するのですか?

于 2013-01-30T19:14:56.953 に答える