在 Visual Studio 中使用 Just-In-Time 偵錯工具進行偵錯
Just-In-Time 偵錯可以在 Visual Studio 外部執行的應用程式發生錯誤或毀損時自動啟動 Visual Studio。 使用 Just-In-Time 偵錯,您可以在 Visual Studio 外部測試應用程式,並開啟 Visual Studio 以在發生問題時開始偵錯。
Just-In-Time 偵錯適用於 Windows 傳統型應用程式。 不適用於通用 Windows 應用程式,或裝載在原生應用程式的受控程式碼,例如視覺化檢視。
提示
如果您只想阻止 [Just-In-Time 偵錯工具] 對話方塊出現,但未安裝 Visual Studio,請參閱停用 Just-In-Time 偵錯工具。 如果您曾經安裝 Visual Studio,您可能需要從 Windows 登錄停用 Just-In-Time 偵錯。
在 Visual Studio 中啟用或停用 Just-In-Time 偵錯
您可以從 Visual Studio 的 [工具]>[選項] (或 [偵錯]>[選項]) 對話方塊設定 Just-In-Time 偵錯。
注意
若要啟用或停用 Just-In-Time 偵錯,您必須以系統管理員身分執行 Visual Studio。 啟用或停用 Just-In-Time 偵錯會設定一個登錄機碼,而需要有系統管理員權限才能變更該機碼。 若要以系統管理員身分開啟 Visual Studio,請以滑鼠右鍵按一下 Visual Studio 應用程式,然後選擇 [以系統管理員身分執行]。
啟用或停用 Just-In-Time 偵錯:
在 [工具] 或 [偵錯] 功能表上,選取 [選項]>[偵錯]>[Just-In-Time]。
注意
如果未顯示 Just-In-Time 功能表選項,請確定已使用 Visual Studio 安裝程式安裝 Just-In-Time 偵錯工具。
在 [為這些類型的程式碼啟用 Just-In-Time 偵錯] 方塊中,選取您想要 Just-In-Time 偵錯功能進行偵錯的程式碼類型:受控、原生和/或指令碼。
選取 [確定]。
如果您啟用 Just-In-Time 偵錯工具,但是當應用程式毀損或發生錯誤時不會開啟,請參閱 針對 Just-In-Time 偵錯進行疑難排解。
從 Windows 登錄停用 Just-In-Time 偵錯
即使電腦上已沒有安裝 Visual Studio,Just-In-Time 偵錯可能仍然為啟用狀態。 如果不再安裝 Visual Studio,您可以編輯 Windows 登錄來停用 Just-In-Time 偵錯。
藉由編輯登錄來停用 Just-In-Time 偵錯:
從 Windows [開始] 功能表,執行 [登錄編輯程式] (regedit.exe)。
在 [登錄編輯程式] 視窗中,找出並刪除下列登錄項目 (若存在):
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
如有下列登錄項目存在,也要予以刪除:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
務必不要刪除或變更任何其他登錄機碼。
關閉 [登錄編輯程式] 視窗。
啟用 Windows Form 的 Just-In-Time 偵錯
根據預設,Windows Form 應用程式有最上層例外狀況處理常式,可讓應用程式繼續執行 (若可復原)。 如果 Windows Forms 應用程式擲回未處理的例外狀況,其會顯示下列對話方塊:
若要啟用 Just-In-Time 偵錯,而不是標準 Windows Form 錯誤處理,請新增下列設定:
在 machine.config 或 <應用程式名稱>.exe.config 檔案的
system.windows.forms
區段中,將jitDebugging
值設定為true
:<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
在 C++ Windows Form 應用程式中,也要在 .config 檔案或您的程式碼中將
DebuggableAttribute
設定為true
。 如果您使用 /Zi 而且未使用 /Og 進行編譯,則編譯器將會設定這個屬性 (Attribute)。 不過,如果您想要偵錯非最佳化的發行組建,則必須在您應用程式的 AssemblyInfo.cpp 檔案中新增下列這一行,以設定DebuggableAttribute
:[assembly:System::Diagnostics::DebuggableAttribute(true, true)];
如需詳細資訊,請參閱DebuggableAttribute。
使用 Just-In-Time 偵錯
此範例會逐步引導您完成應用程式擲回錯誤時的 Just-In-Time 偵錯。
您必須安裝 Visual Studio 才能遵循下列步驟。 如果沒有 Visual Studio,您可以下載免費的 Visual Studio Community Edition。
確定 Just-In-Time 偵錯已在 [工具]>[選項]>[偵錯]>[Just-In-Time]中啟用。
在此範例中,您會在 Visual Studio 中建立 C# 主控台應用程式,以擲回 NullReferenceException。
在 Visual Studio 中,建立名為 ThrowsNullException 的 C# 主控台應用程式 ([檔案]>[新增]>[專案]>[Visual C#]>[主控台應用程式])。 如需在 Visual Studio 中建立專案的詳細資訊,請參閱逐步解說:建立簡單的應用程式。
當專案在 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"); }
若要建置解決方案,請選擇 [偵錯] (預設值) 或 [發行] 組態,然後選取 [建置]>[重建解決方案]。
注意
如需組建組態的詳細資訊,請參閱了解組建組態。
開啟 C# 專案資料夾 (...\ThrowsNullException\ThrowsNullException\bin\Debug 或 ...\ThrowsNullException\ThrowsNullException\bin\Release) 中建置的應用程式 ThrowsNullException.exe。
您應該會看到下列命令視窗:
[選擇 Just-In-Time 偵錯工具] 對話方塊隨即開啟。
在 [可用的偵錯工具] 之下,選取 [>您慣用的 Visual Studio 版本< 的新執行個體] (若尚未選取)。
選取 [確定]。
ThrowsNullException 專案會在 Visual Studio 的新執行個體中開啟,其執行停止於擲回例外狀況的那一行:
此時您可以開始偵錯。 如果您正在偵錯真實的應用程式,則必須找出程式碼擲回例外狀況的原因。
警告
如果您的應用程式包含不受信任的程式碼,則會出現安全性警告對話方塊,讓您決定是否要繼續偵錯。 在繼續偵錯之前,請決定這是否為可以信任的程式碼。 這是您自行撰寫的程式碼嗎? 如果應用程式在遠端電腦上執行,您認得它的處理序名稱嗎? 如果應用程式在本機執行,請考慮在您的電腦上執行惡意程式碼的可能性。 如果您判斷程式碼值得信任,請選取 [確定]。 否則,請選取 [取消]。
針對 Just-In-Time 偵錯進行疑難排解
如果 Just-In-Time 偵錯並未在應用程式毀損時開始 (即使已在 Visual Studio 中啟用):
已知的 Windows 問題可能會導致 Just-In-Time 偵錯工具失敗。
修正方法是將 將 [自動] 的 [DWORD 值] (值資料為 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 錯誤報告
(64 位機器上的 32 位應用程式) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows 錯誤報告
如需詳細資訊,請參閱 .WER 設定。
您可能會在 Just-in-Time 偵錯期間看見下列錯誤訊息:
無法附加至沒有回應的處理序。 所指定的程式不是 Windows 或 MS-DOS 程式。
偵錯工具嘗試連結至在另一位使用者身分之下執行的處理序。
若要解決此問題,請在 Visual Studio 中開啟 [偵錯]>[連結至處理序] (或按 Ctrl + Alt + P),然後在 [可用的處理序] 清單中尋找您要偵錯的處理序。 如果您不知道處理序的名稱,請在 [Visual Studio Just-In-Time 偵錯工具] 對話方塊中尋找處理序識別碼。 在 [可使用的處理序] 清單中選取該處理序,然後按一下 [連結]。 選取 [無] 以關閉 Just-In-Time 偵錯工具對話方塊。
由於沒有使用者登入,無法啟動偵錯工具。
沒有任何使用者登入主控台,所以沒有使用者工作階段可顯示 [Just-In-Time 偵錯] 對話方塊。
若要修正這個問題,請登入該電腦。
類別未登錄。
偵錯工具嘗試建立的 COM 類別尚未登錄,可能是因為安裝問題所致。
若要修正這個問題,請使用 Visual Studio 安裝程式來重新安裝或修復 Visual Studio 安裝。