8

VB6アプリが原因でApplication Hangイベントビューアにイベントが表示される場合、アプリケーションがハングしている理由を詳しく知るにはどうすればよいですか?

イベントは、アプリがフリーズしてクラッシュしたことを意味しますかApplication Hang、それとも一時的にハングしたことを意味しますか?

このイベントのイベントログに記録されるのは次のとおりです。

Hanging application [MyAppName].exe, version [MyAppVersionNo], hang module hungapp, version 0.0.0.0, hang address 0x00000000.

それだけでは不十分で、なぜぶら下がっているのかをもっと知りたいと思います。アプリがイベントログに詳細を提供するようにするには、どのようなコード変更またはその他の手順を実行する必要がありますか?

4

4 に答える 4

5

WindowsPerformanceToolkitの使用をお勧めします。使用するのに最適なバージョンは、Windowsアセスメント&デプロイメントキット(http://www.microsoft.com/download/en/details.aspx?id=28997 )にあります。

インストールしたら、Windows Performance Recorder(WPR)を起動し、[スタート]ボタンをクリックして記録を開始します。次に、アプリで問題を再現します。次に、WPRに戻り、[保存]ボタンを押します。次に、Windows Performance Analyzerをロードし、生成された*.ETLファイルを開きます。次に、グラフエクスプローラーの[システムアクティビティ]セクションに移動して展開し、UI遅延グラフを見つけます(または、システムアクティビティにパークされた最初のグラフである可能性があります)。それをダブルクリックして、[分析]タブの詳細バージョンを取得します。

関心のあるUI遅延が見つかったら、グラフエクスプローラーの処理ノードからCPU使用率(サンプル)などの別のグラフを追加できます。2つのグラフが同じ[分析]タブにある場合、それらのスクロールと選択は同期されます。したがって、UI遅延イベントをクリックすると、CPU使用率の対応する範囲も強調表示されます。

于 2012-04-25T23:38:21.647 に答える
2

Application Hangイベントは、Windowsがアプリケーションが応答しないと判断したことを意味します。イベントはアプリケーションではなくオペレーティングシステムによって生成されるため、イベントで追加情報を取得するためのオプションは非常に限られています。

これは、ApplicationHangイベントで利用できるようです。

メッセージ:ハングしているアプリケーション%1、バージョン%2、ハングしているモジュール%3、バージョン%4、ハングしているアドレス0x%5。

から:

http://www.microsoft.com/technet/support/ee/transform.aspx?ProdName=Windows+Operating+System&ProdVer=5.2&EvtID=1002&EvtSrc=Application+Hang&LCID=1033

イベントの原因が(アプリケーションが実行されている環境での何かではなく)アプリケーションが行うことであると思われる場合は、情報をhangイベントに渡そうとするのではなく、ログ情報のレベルを次のように上げる必要があります。デバッグモードでアプリケーションのログファイルを調べ、応答しなくなる直前にアプリケーションが何をしているかを確認します。

ロギング情報、またはアプリケーションのロギングフレームワークが不足している場合、そこに集中して取り組む必要があります。利点は、将来的にもより良いロギングの恩恵を受けることです。ただし、ロギングフレームワークを使用すると、すべてがスムーズに実行されているときに、実稼働環境でデバッグレベルのロギングを無効にできます。

于 2012-04-19T14:19:18.410 に答える
2

私は、Windowsがハングしていると判断したモジュールのコードを確認することでこれにアプローチします。その名前は、イベントログに書き込まれます。Windowsがアプリが応答しないと判断した場合、手遅れであるため、ハングイベントで詳細を取得しようとすることはできません。

ハングしているモジュールに、DoEventsへの複数の呼び出しを追加し、ステータスメッセージを直接EventLogに記録します。この時点でログフレームワークを追加すると、複雑さが増し、ログを保存するためのデータベースまたはファイルアクセスが必要になります。

Windowsは、メッセージへの応答を停止したため、アプリがハングしたと見なします。残念ながら、VB6アプリに2番目のスレッドを実装することは、.NETとは異なり簡単ではありません。それでも、別のスレッドを追加するとアプリの応答性は維持されますが、「コードの実行に時間がかかるのはなぜですか」という質問に答える必要があります。

于 2012-04-19T19:24:45.650 に答える
0

Windowsイベントの観点から情報を取得することは役に立ちません。正確な原因を突き止めるのに役立つトレースをアプリケーションに含めるようにしてください。

于 2012-04-26T11:39:15.690 に答える