共用方式為


在 Visual Studio 中使用 Just-In-Time 偵錯工具進行偵錯

Just-In-Time 偵錯可以在 Visual Studio 外部執行的應用程式發生錯誤或當機時自動啟動 Visual Studio。 使用 Just-In-Time 偵錯,您可以在 Visual Studio 外部測試應用程式,並在發生問題時開啟 Visual Studio 以開始偵錯。

Just-In-Time 除錯適用於 Windows 桌面應用程式。 它不適用於通用 Windows 應用程式,或裝載於原生應用程式 (例如視覺化工具) 中的 Managed 程式碼。

小提示

如果您只想停止 [Just-In-Time Debugger] 對話方塊出現,但未安裝 Visual Studio,請參閱 停用 Just-In-Time Debugger。 如果您曾經安裝過 Visual Studio,您可能需要 從 Windows 登錄停用 Just-In-Time 偵錯

在 Visual Studio 中啟用或停用 Just-In-Time 偵錯

當您在 Visual Studio 中使用 Just-In-Time 偵錯工具時,您可以從 [工具>選項 ] 或 [偵錯>選項 ] 功能表存取偵錯工具的設定選項。 Just-In-Time 偵錯工具可在安裝程式的 個別元件>偵錯和測試 區段中使用。

備註

若要啟用或停用 Just-In-Time 偵錯,您必須以系統管理員身分執行 Visual Studio。 啟用或停用 Just-In-Time 偵錯會設定登錄機碼,而且可能需要系統管理員許可權才能變更機碼。 若要以系統管理員身分開啟 Visual Studio,請以滑鼠右鍵按一下 Visual Studio 應用程式,然後選擇 [以系統管理員身分執行]。

若要啟用或停用及時偵錯:

  1. 工具>選項 窗格中,展開 所有設定>偵錯>一般 區段。

  2. 在右窗格中,選取 [設定 Just-In-Time Debugging ] 連結。

    螢幕擷取畫面,示範如何在 Visual Studio 中設定 Just-In-Time 偵錯。

  3. [Visual Studio 偵錯工具選項] 對話方塊中,設定 [針對這些類型的程式碼啟用即時偵錯] 選項。 選取您想要 Just-In-Time 偵錯來偵錯的程式碼類型: 受控 (.NET Framework) 或 原生

  4. 請選擇 [確定]

  1. [工具>選項 ] 對話方塊中,展開 [偵錯>Just-In-Time ] 區段。

  2. [ 為這些類型的程式碼啟用 Just-In-Time 偵錯 ] 方塊中,選取您要 Just-In-Time 偵錯進行偵錯的程式碼類型: 受控原生和/或 Script

    啟用或停用 JIT 偵錯

  3. 請選擇 [確定]

如果您啟用 Just-In-Time 偵錯工具,但它在應用程式當機或錯誤時不會開啟,請參閱 針對 Just-In-Time 偵錯進行疑難排解

在 Windows 註冊表中停用 Just-In-Time 偵錯

即使您的電腦上不再安裝 Visual Studio,Just-In-Time 即時偵錯可能仍會啟用。 如果不再安裝 Visual Studio,您可以編輯 Windows 登錄來停用 Just-In-Time 偵錯。

若要透過編輯登錄來停用 Just-In-Time 偵錯:

  1. 從 Windows 的 [ 開始] 功能表中,執行 登錄編輯器regedit.exe)。

  2. [登錄編輯器 ] 視窗中,找出並刪除下列登錄項目 (如果存在):

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger

    JIT 登錄機碼

  3. 如果存在,請刪除下列登錄項目:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

    請確定不要刪除或變更任何其他登錄機碼。

  4. 關閉 登錄編輯器 窗口。

啟用 Windows Form 的 Just-In-Time 偵錯功能

根據預設,Windows 表單應用程式具有最上層例外狀況處理常式,可讓應用程式在可以復原時繼續執行。 如果 Windows Forms 應用程式擲回未處理的例外狀況,它會顯示下列對話方塊:

Windows 表單未處理的例外狀況

若要啟用 Just-In-Time 偵錯,而不是標準 Windows 表單錯誤處理,請新增下列設定:

  • system.windows.forms 或> 檔案區段中,將jitDebugging值設定為true

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • 在 C++ Windows 表單應用程式中,也要在.config檔案或程式碼中將DebuggableAttribute設為true。 如果您使用 /Zi 進行編譯,而不使用 /Og,編譯器會為您設定此屬性。 不過,如果您想要偵錯未最佳化的發行版本組建,則必須在應用程式的DebuggableAttribute檔案中新增下列行來設定

    [assembly:System::Diagnostics::DebuggableAttribute(true, true)];
    

    如需詳細資訊,請參閱DebuggableAttribute

使用 Just-In-Time(即時)偵錯

此範例會逐步引導您在應用程式拋出錯誤時,進行 Just-In-Time 偵錯。

  • 您必須安裝 Visual Studio 才能遵循這些步驟。 如果您沒有 Visual Studio,可以下載免費的 Visual Studio 社群版

  • 確定已啟用 [Just-In-Time 偵錯],方法是在[工具選項] 中設定>] 選項。

在此範例中,您會在 Visual Studio 中建立擲回 NullReferenceException 的 C# 主控台應用程式。

  1. 在 Visual Studio 中,建立名為 ThrowsNullException 的 C# 主控台應用程式 (>>>>主控台應用程式)。 如需在 Visual Studio 中建立專案的詳細資訊,請參閱 逐步解說:建立簡單的應用程式

  2. 當專案在 Visual Studio 中開啟時,請開啟 Program.cs 檔案。 將 Main() 方法取代為下列程式碼,該程式碼會將一行列印到控制台,然後擲回 NullReferenceException:

    static void Main(string[] args)
    {
        Console.WriteLine("we will now throw a NullReferenceException");
        throw new NullReferenceException("this is the exception thrown by the console app");
    }
    
  3. 若要建置解決方案,請選擇 [偵錯 (預設)] 或 [發行 設定],然後選取 [建置>重建解決方案]。

    • 如需完整的偵錯體驗,請選取 [偵錯] 設定。

    • 如果您選取 發行 組態,則必須關閉 僅我的程式碼 才能運作此程序。

      [工具>選項] 窗格中,展開 [所有設定>偵錯一般>] 區段,然後清除 [只啟用我的程式碼] 核取方塊。

      [工具>選項] 對話方塊中,展開 [偵錯]> 一般 區段,然後清除 [只啟用我的程式碼] 核取方塊。

      當您取消選取此選項時,將自動停用 在開始偵錯時如果沒有使用者代碼則警告(僅限受管理) 選項。

    如需建置組態的相關資訊,請參閱 瞭解建置組態

  4. 在 C# 專案資料夾 (...\ThrowsNullException\ThrowsNullException\bin\Debug...\ThrowsNullException\ThrowsNullException\bin\Release) 中開啟建置的應用程式 ThrowsNullException.exe

    您應該會看到下列命令視窗:

    ThrowsNullException.exe主控台的螢幕擷取畫面,會擲回未處理的 Null 參考例外狀況 (System.NullReferenceException)。

  5. 選擇 Just-In-Time Debugger 對話方塊將開啟。

    以下是 [選擇即時偵錯工具] 對話方塊的截圖,此對話方塊會在 ThrowsNullException.exe 主控台視窗中出現例外狀況後彈出。

    [可用的偵錯工具] 底下,選取 您慣用的 <Visual Studio 版本/版本>的新實例(如果尚未選取)。

  6. 請選擇 [確定]

    ThrowsNullException 專案會在 Visual Studio 的新執行個體中開啟,並在執行至拋出例外狀況的程式碼行時停止:

    Visual Studio 中 ThrowsNullException 專案的螢幕擷取畫面,突出顯示了觸發例外的原始程式碼行。

此時您可以開始偵錯。 如果您要偵錯真實的應用程式,則需要找出程式碼擲回例外狀況的原因。

謹慎

如果您的應用程式包含不受信任的程式碼,則會出現安全性警告對話方塊,讓您決定是否要繼續偵錯。 在繼續偵錯之前,請決定您是否信任程式碼。 程式碼是你自己寫的嗎? 如果應用程式在遠端電腦上執行,您是否認識進程的名稱? 如果應用程式在本地運行,請考慮惡意程式碼在您的電腦上運行的可能性。 如果您認為程式碼值得信任,請選取 [確定]。 否則,請選取 [取消]。

疑難排解「Just-In-Time」除錯

如果 Just-In-Time 除錯在應用程式當機時未啟動,即使已在 Visual Studio 中啟用:

  • 已知的 Windows 問題可能會導致 Just-In-Time 偵錯工具失敗。

    修正是將 DWORD 值Auto值資料 設為 1,新增至下列登錄機碼:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

    • (適用於 64 位計算機上的 32 位應用程序) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

  • Windows 錯誤回報可能會接管您電腦上的錯誤處理。

    若要修正此問題,請使用登錄編輯器將 DWORD 值 [ 已停用] 新增至下列登錄機碼,且 [值資料]1

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting

    • (適用於 64 位計算機上的 32 位應用程序) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    如需詳細資訊,請參閱 。WER 設定

您可能會在 Just-In-Time 偵錯期間看到下列錯誤訊息:

  • 無法附加至當機處理程序。 指定的程式不是 Windows 或 MS-DOS 程式。

    除錯器嘗試連接到在另一個使用者下執行的程序。

    若要解決此問題,請在 Visual Studio 中開啟 [偵錯>附加至進程 ] (或按 Ctrl + Alt + P),然後在 [可用的進程] 清單中尋找您要偵錯的進程。 如果您不知道進程的名稱,請在 Visual Studio Just-In-Time Debugger 對話方塊中尋找進程識別碼。 在 可用程序 清單中選取程序,然後選取 附加。 選取 [ ] 以關閉 [ Just-In-Time 偵錯工具 ] 對話方塊。

  • 無法啟動偵錯工具,因為沒有使用者登入。

    沒有使用者登入主控台,因此沒有使用者工作階段來顯示即時偵錯對話方塊。

    若要修正此問題,請登入電腦。

  • 班級未註冊。

    偵錯工具嘗試建立未註冊的 COM 類別,可能是因為安裝問題。

    若要修正此問題,請使用 Visual Studio 安裝程式來重新安裝或修復 Visual Studio 安裝。