先看参考资料:使用实时调试器进行调试 - Visual Studio (Windows) | Microsoft Learn
但是链接经常失效 .... 先拷贝一份如下:
在 Visual Studio 中启用或禁用实时调试
备注
若要启用或禁用实时调试,必须以管理员身份运行 Visual Studio。 启用或禁用实时调试会设置一个注册表项,可能需要管理员权限来更改此注册表项。 若要以管理员身份打开 Visual Studio,右键单击 Visual Studio 应用程序,然后选择以管理员身份运行。
可从 Visual Studio 的“工具” > “选项” (或“调试” > “选项” )对话框中配置实时调试。
启用或禁用实时调试:
-
在“工具” 或“调试” 菜单上,选择“选项” > “调试” > “实时” 。
-
在中启用实时调试对这些类型的代码框中,选择你希望在实时调试来调试的代码的类型:托管,本机,和/或脚本。
-
选择 确定。
-
如果启用了实时调试器,但它并未在应用程序崩溃或出错时打开,请参阅实时调试疑难解答。
从 Windows 注册表禁用实时调试
即便计算机中不再安装有 Visual Studio,仍可启用实时调试。 如果不再安装 Visual Studio,则可以通过编辑 Windows 注册表来禁用实时调试。
若要通过编辑注册表禁用实时调试,请执行以下操作:
-
从 Windows“开始”菜单,运行“注册表编辑器”(regedit.exe) 。
-
在中注册表编辑器窗口中,找到并删除以下注册表项:
-
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
-
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
-
-
如果您的计算机正在运行 64 位操作系统,也删除以下注册表项:
-
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
-
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
请确保不能删除或更改任何其他注册表项。
-
-
关闭注册表编辑器窗口。
-
启用 Windows 窗体的实时调试
默认情况下,Windows 窗体应用具有一个顶级异常处理程序,可让应用保持运行(如果能够恢复)。 如果 Windows 窗体应用引发未处理的异常,则会显示以下对话框:
若要启用实时调试而不是标准 Windows 窗体错误处理,请添加以下设置:
-
在 machine.config 或 <应用名称>.exe.config 文件的
system.windows.forms
部分中,将jitDebugging
值设置为true
:XML复制
<configuration> <system.windows.forms jitDebugging="true" /> </configuration>
-
在 C++ 窗体应用程序中,还要在 .config 文件或代码中将
DebuggableAttribute
设置为true
。 如果使用 /Zi 而不使用 /Og 进行编译,则编译器会替你设置此属性。 但是,如果要调试非优化发布版本,则必须通过在应用的 AssemblyInfo.cpp 文件中添加以下行来设置DebuggableAttribute
:C++复制
[assembly:System::Diagnostics::DebuggableAttribute(true, true)];
有关详细信息,请参阅 DebuggableAttribute。
-
使用实时调试
此示例演示在应用引发错误时如何进行实时调试。
-
必须安装 Visual Studio,才能按照以下步骤操作。 如果未安装 Visual Studio,则可以免费下载 Visual Studio Community Edition。
-
请务必依次选择“工具” > “选项” > “调试” > “实时”,启用实时调试 。
-
本示例会在 Visual Studio 中创建 C# 控制台应用,该应用可引发 NullReferenceException。
-
在 Visual Studio 中,创建C#控制台应用程序 (文件 > 新建 > 项目 > Visual C# > 控制台应用程序) 名为ThrowsNullException。 在 Visual Studio 中创建项目的详细信息,请参阅演练:创建简单应用程序。
-
在 Visual Studio 中打开项目时,请打开 Program.cs 文件。 将 Main() 方法替换为以下代码,该代码会在控制台中打印一行,然后引发 NullReferenceException:
C#复制
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"); }
-
可以从此时开始调试。 如果调试的是真实应用,则需要找出代码引发异常的原因。
注意
如果应用包含不受信任的代码,则会出现安全警告对话框,让你可决定是否继续进行调试。 继续调试前,请确定是否信任该代码。 代码是否为自己编写的? 如果应用程序在远程计算机上运行,你能否识别进程的名称? 如果应用在本地运行,请考虑计算机上运行恶意代码的可能性。 如果决定信任该代码,请选择“确定” 。 否则,请选择“取消” 。
排查在实时调试
如果在应用崩溃时实时调试不启动,即使 Visual Studio 中已启用实时调试也是如此,则:
-
Windows 错误报告可能会接管计算机上的错误处理。
若要解决此问题,请使用注册表编辑器中添加DWORD 值的禁用,与值数据的1,对以下注册表项:
-
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows 错误报告
-
(对于 64 位计算机):HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting
有关详细信息,请参阅 .WER 设置。
-
-
已知的 Windows 问题可能导致实时调试器启动失败。
解决方法是添加DWORD 值的自动,与值数据的1,对以下注册表项:
-
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
-
(对于 64 位计算机):HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
-
-
您可能会看到以下错误消息过程中实时调试:
-
无法附加到崩溃进程。指定的程序不是 Windows 或 MS-DOS 程序。
调试器尝试附加到另一个用户下运行的进程。
若要解决此问题,请在 Visual Studio 中依次打开“调试” > “附加到进程”,然后在“可用进程”列表中查找要调试的进程 。 如果不清楚进程名称,请在“Visual Studio 实时调试器”对话框中查找进程 ID 。 在“可用进程”列表中选择该进程,然后选择“附加” 。 选择“否”可关闭“实时调试器”对话框 。
-
未能启动调试器,因为没有用户登录。
没有用户登录到控制台,因此没有用户会话来显示实时调试对话框。
要解决此问题,请登录到计算机。
-
类没有注册。
调试器试图创建的 COM 类未进行注册,可能是由安装问题导致。
若要解决此问题,请使用 Visual Studio 安装程序重新安装或修复 Visual Studio 安装。
-
若要生成解决方案,请选择“调试”(默认值) 或“发布”配置,然后选择“生成” > “重新生成解决方案” .
备注
有关生成配置的详细信息,请参阅了解生成配置。
-
在 C# 项目文件夹 ( ...\ThrowsNullException\ThrowsNullException\bin\Debug或 ...\ThrowsNullException\ThrowsNullException\bin\Release) 中打开生成的应用 ThrowsNullException.exe。
应会看到下面的命令窗口:
-
选择实时调试器对话框随即打开。
在“可用调试器”下,选择“<首选 Visual Studio 版本>的新实例”(如果尚未选择) 。
-
选择 确定。
ThrowsNullException 项目会在 Visual Studio 的新实例中打开,并在引发异常的代码行处停止执行: