2011-11-14 12 views
5

Windows 7のウィンドウマネージャは定期的に自分のWPFアプリをhungとして検出し、それをゴーストして応答しないメッセージをポップアップ表示します。私はこのアプリを数週間使っていて、それを見ていないが、私と同じハードウェアを持っているユーザーは、定期的にそれを入手すると言っている。Windowsがアプリのハングを検出したときにスタックトレースを記録する

すべてのことが別のスレッドのタスクで実行されるため、どこから問題を探し始めるか分かりません。ユーザーがアプリケーションが応答するのを待っている場合は、すぐに回復するので、GUIスレッド上で問題が発生して5秒を超えることがあると仮定しています。

スタックトレースを記録できるようにアプリケーションがハングアップしているとDWMが判断したときに検出できる方法はありますか?

答えて

1

私はこれをWPFアプリケーションで行っていませんが、伝統的な方法では、SendMessageTimeoutを使用して頻繁にバックグラウンドスレッドからWM_NULLメッセージを送信し、メインUIスレッドが30秒でメッセージを送信し、そのスレッドのスタックダンプを生成します。

1

1つのアプローチは、System.Diagnostics名前空間を使用してプログラムのトレースを書き込むことです。これで、プログラムがハングアップする前の最後の動作を知ることができます。プログラムがWindowsにハングアップしていると見なしても、そのプログラムを検査することはほとんどありません。 :-(

関連する問題