共用方式為


應用程式或服務當機行為疑難解答指引

本文提供如何針對應用程式或服務當機行為進行疑難解答的指引。

適用於: 所有支援的 Windows Server 和 Windows 用戶端版本

當您在應用程式記錄檔中看到事件標識碼 1001 和事件識別碼 1000 時,表示應用程式當機行為。 它會與第一方或第三方進程一起發生,並指向可能的錯誤模組。

本文詳細說明檢查事件、瞭解事件中的資訊,以及根據事件是第一方或第三方應用程式來處理事件的程式。 此程式會使用適用於 Windows 的偵錯工具。

開始之前

考量因素:

  • 確認您正在執行已安裝作業系統版本的最新更新。
  • 確認受影響的應用程式是最新的。
  • 如果已安裝防病毒軟體,請確認它已在最新版本上執行,並已備妥必要的排除專案。

事件標識碼 1001 level 資訊會顯示系統中是否已啟用 Windows 錯誤報告 (WER)。 不過,您必須變更此服務,以收集 level 調查所需的資訊。 系統預設不會記錄這項資訊,以避免效能額外負荷略有。

層級的事件 Error 標識碼 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:

它通常會將Microsoft模組呈現為故障模組,例如 ntdll.dllkernel32.dllkernelbase.dll。 當進程在使用者模式和核心模式之間執行和轉換時,這些模組會大量使用。 在這個過程中,他們被抓獲為其他類型的腐敗的受害者,以前由不當行為模組執行。

常見例外狀況:

  • 0xc0000022

    STATUS_ACCESS_DENIED

  • 0xc0000005

    STATUS_ACCESS_VIOLATION

  • 0xc0000374

    STATUS_HEAP_CORRUPTION

發生例外狀況時,您可以啟用進程的其他詳細信息記錄,並使用 Windows 錯誤報告 (WER) 和 GFlagsgflags.exe) 收集完整進程傾印。

安裝適用於 Windows偵錯工具以取得gflags.exe,因為它包含在工具中。 不過,您只需要複製檔案,而不需要在需要疑難解答的計算機上安裝工具。

收集資料

針對上述netsh.exe損毀範例,請設定計算機以收集傾印,以取得造成損毀之原因的詳細資訊。 將netsh.exe取代為裝置上事件標識碼 1000 中所識別的可執行檔。

  1. 從提升權限的命令提示字元執行下列命令,設定 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
    

    這些命令最多允許收集並儲存在 C:\WER 資料夾中netsh.exe處理程式的 10 個完整進程傾印

    注意

    新增 Windows 64 上的 Windows (WOW64) 登錄位置,可讓 32 位應用程式在 64 位系統上執行。

  2. 設定 GFlags 以監視堆積配置以追蹤損毀。

    流覽至工具所在的目錄,然後從提升許可權的命令提示字元執行下列命令。

    若要開啟 [ 啟用] 頁面堆積 (hpa) 旗標:

    Gflags.exe /i netsh.exe +hpa
    

    若要關閉 [ 啟用頁面堆積 ] 旗標:

    Gflags.exe /i netsh.exe -hpa
    

    重新啟動程式,讓設定生效。

  3. 監視 C:\WER 資料夾,並檢查是否有任何已建立的傾印。

分析資料

擁有進程傾印之後,您可以:

  • 如果程式是第三方程式,請與第三方共用相關傾印以供調查。
  • 如果程式是第一方程式,請連絡 Microsoft 支援服務 分析數據。
  • 使用適用於 Windows 的偵錯工具安裝的調試程式(windbg.exe),並嘗試使用 !analyze 擴充功能來判斷錯誤模組。

收集數據並完成調查之後,請刪除登錄機碼(具有進程名稱的登錄機碼),並關閉 GFlags 的 [啟用頁面堆積 ] 旗標。