2012-04-05 6 views
8

VB6アプリケーションでイベントビューアにApplication Hangイベントが表示される場合、アプリケーションが停止している理由の詳細を確認するにはどうすればよいですか?アプリケーションハングイベントの詳細については、どのように調べるのですか?

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

私はこのイベントのイベントログに取得するすべてがされています。十分ではありません

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

それと私はそれがぶら下がっている理由についての詳細を調べることができるようにしたいです。アプリケーションがイベントログに詳細を表示させるためには、コードの変更やその他の手順を実行する必要がありますか?

+0

アプリケーションがビジー状態でWindowsメッセージに応答できないときに、実行時間が長いルーチンがありますか? – jac

+0

私は気づいていません。このイベントログはクライアントサイトからのものです。当時の出来事について、より多くの情報を提供したいと思います。 – CJ7

+0

アプリケーションがハングしたときに、プロセスメモリダンプを実行する(またはユーザーに実行させる)ことができます。その後、解析して呼び出しスタックを調べます。 – MicSim

答えて

5

Windows Performance Toolkitの使用をお勧めします。使用するベストバージョンは、Windows評価版&デプロイメントキットhttp://www.microsoft.com/download/en/details.aspx?id=28997

です。インストールが完了したら、Windows Performance Recorder(WPR)を起動して、[開始]ボタンをクリックして録画を開始します。次に、あなたのアプリで問題を再現します。次にWPRに戻り、[保存]ボタンを押します。次に、Windowsパフォーマンスアナライザを読み込み、生成された* .ETLファイルを開きます。次に、グラフエクスプローラのシステムアクティビティセクションに移動して展開し、UI遅延グラフ(またはシステムアクティビティで最初にパークされたグラフ)を探します。それをダブルクリックすると、[分析]タブで詳細なバージョンが表示されます。

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

+0

上記のリンクが壊れている場合は、こちらを試してみてくださいhttps://www.microsoft.com/en-US/download/details.aspx?id=39982それは私にはADK for Win 8.1を示しています... – Jakob

+0

私はそれが今SDKはWindows 10から始まります。https://dev.windows.com/en-us/downloads/windows-10-sdk –

2

アプリケーションハングイベントは、Windowsがアプリケーションが応答しないと判断したことを意味します。イベントはアプリケーションではなくオペレーティングシステムによって生成されるため、イベントで追加情報を取得するオプションは非常に限定されています。 5%0Xアドレスハング、ハンギングアプリケーション%1、バージョン%2、モジュール%3、バージョン%4ハング:

メッセージ:

これは、アプリケーションハングイベントに利用可能であると思われるものです。

から:

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

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

ロギング情報がない場合、またはアプリケーションにロギングフレームワークがない場合は、そのがあなたの努力に集中すべき場所です。利点は、今後もより良いログの恩恵を受けることです。ただし、ロギングフレームワークを使用すると、すべてがスムーズに実行されている運用環境でデバッグレベルのロギングを無効にすることができます。

2

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

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

Windowsは、メッセージに応答しなくなったためにアプリケーションがハングアップしていると考えています。残念ながら、VB6アプリケーションで2番目のスレッドを実装することは、.NETとは異なり、簡単なことではありません。他のスレッドを追加することで、アプリケーションを応答性の高い状態に保つことはできますが、「コードを実行するのに時間がかかりすぎるのはなぜですか?」という質問にはまだ答えが残っている可能性があります。

0

Windowsイベントパースペクティブからの情報の取得は役に立ちません。正確な原因を把握するのに役立つトレースをアプリケーションで実行してください。

関連する問題