アプリケーションまたはサービスのクラッシュ動作のトラブルシューティング ガイダンス
この記事では、アプリケーションまたはサービスのクラッシュ動作のトラブルシューティング方法に関するガイダンスを提供します。
適用対象: サポートされているすべてのバージョンの Windows Server および Windows クライアント
アプリケーション ログにイベント ID 1001 とイベント ID 1000 が繰り返し表示されると、アプリケーションのクラッシュ動作が示されます。 これは、ファースト パーティまたはサード パーティのプロセスと共に発生し、障害が発生している可能性のあるモジュールを指します。
この記事では、イベントを確認するプロセス、イベント内の情報を理解するプロセス、およびイベントがファースト パーティアプリケーションかサードパーティ製アプリケーションかに基づいてイベントを処理するプロセスについて詳しく説明します。 このプロセスでは、Windows 用のデバッグ ツール が使用されます。
開始する前に
考慮事項:
- インストールされているオペレーティング システムバージョンの最新の更新プログラムを実行していることを確認します。
- 影響を受けるアプリケーションが最新であることを確認します。
- ウイルス対策ソフトウェアがインストールされている場合は、最新バージョンで実行されていること、および必要な除外が適用されていることを確認します。
イベント ID 1001 level
情報は、システムでWindows エラー報告 (WER) が有効になっているかどうかを示します。 ただし、調査に必要な level
情報を収集するには、このサービスを変更する必要があります。 パフォーマンスのわずかなオーバーヘッドを回避するために、この情報は既定ではログに記録されません。
Error
レベルのイベント ID 1000 は、実際のアプリケーションクラッシュ イベントです。 次の情報を例として示します。
Log Name: Application
Source: Application Error
Date: <Date Time>
Event ID: 1000
Task Category: Application Crashing Events
Level: Error
Keywords:
User: SYSTEM
Computer: demo.contoso.com
Description:
Faulting application name: netsh.exe, version: 10.0.22621.1, time stamp: 0x13af0815
Faulting module name: netsh.exe, version: 10.0.22621.1, time stamp: 0x13af0815
Exception code: 0xc0000005
Fault offset: 0x0000000000005399
Faulting process id: 0x0xFEE4
Faulting application start time: 0x0x1DAB66BB5BE07D4
Faulting application path: C:\WINDOWS\system32\netsh.exe
Faulting module path: C:\WINDOWS\system32\netsh.exe
Report Id: <Report ID>
Faulting package full name:
Faulting package-relative application ID:
多くの場合、 ntdll.dll、 kernel32.dll、 kernelbase.dllなど、障害が発生しているモジュールとして Microsoft モジュールが表示されます。 これらのモジュールは、プロセスの実行中やユーザー モードとカーネル モードの間の遷移中に頻繁に使用されます。 このプロセスでは、モジュールの不適切な動作によって以前に実行された他の種類の破損の被害者としてキャッチされます。
一般的な例外:
0xc0000022
STATUS_ACCESS_DENIED
0xc0000005
STATUS_ACCESS_VIOLATION
0xc0000374
STATUS_HEAP_CORRUPTION
例外が発生した場合は、Windows エラー報告 (WER) と GFlags (gflags.exe) を使用して、プロセスの詳細ログを追加で有効にし、完全なプロセス ダンプを収集できます。
Debugging Tools for Windows をインストールして、ツールに含まれているgflags.exeを取得します。 ただし、トラブルシューティングが必要なコンピューターにツールをインストールせずにファイルをコピーするだけで済みます。
データを収集する
上記の netsh.exe クラッシュの例では、クラッシュの原因の詳細については、ダンプを収集するようにマシンを設定します。 netsh.exeを、デバイスのイベント ID 1000 で識別された実行可能ファイルに置き換えます。
管理者特権のコマンド プロンプトから次のコマンドを実行して、例外の完全なプロセス ダンプを収集するように WER を設定します。
reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe"/v DumpFolder /t REG_EXPAND_SZ /d "C:\WER" /f md C:\WER reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" /v DumpCount /t REG_DWORD /d 10 /f reg add "HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" /v DumpType /t REG_DWORD /d 2 /f reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" /v DumpFolder /t REG_EXPAND_SZ /d "C:\WER" /f reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" /v DumpCount /t REG_DWORD /d 10 /f reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\Windows Error Reporting\LocalDumps\netsh.exe" /v DumpType /t REG_DWORD /d 2 /f
これらのコマンドを使用すると、 netsh.exe プロセスの最大 10 個の完全なプロセス ダンプを収集し、 C:\WER フォルダーに格納できます。
Note
Windows 64 上の Windows (WOW64) レジストリの場所が追加され、32 ビット アプリケーションを 64 ビット システムで実行できます。
破損を追跡するためにヒープ割り当てを監視するように GFlags を設定します。
ツールが配置されているディレクトリに移動し、管理者特権のコマンド プロンプトから次のコマンドを実行します。
有効ページ ヒープ (hpa) フラグを有効にするには:
Gflags.exe /i netsh.exe +hpa
有効ページ ヒープフラグをオフにするには:
Gflags.exe /i netsh.exe -hpa
設定を有効にするには、プロセスを再起動します。
C:\WER フォルダーを監視し、作成されたダンプがあるかどうかを確認します。
データを分析する
プロセス ダンプを取得したら、次のことができます。
- プロセスがサードパーティのプロセスである場合は、調査のために関連するダンプをサード パーティと共有します。
- プロセスがファースト パーティ プロセスの場合は、Microsoft サポートに連絡してデータを分析します。
- Debugging Tools for Windows を使用してインストールされたデバッガー (windbg.exe) を使用し!analyze 拡張機能使用して障害のあるモジュールを特定してみてください。
データを収集して調査を完了したら、レジストリ キー (プロセス名を持つキー) を削除し、GFlags の 有効なページ ヒープ フラグをオフにします。