实时调试

在运行于 Visual Studio 之外的应用程序中发生异常或崩溃时,实时调试会自动启用 Visual Studio。这样,您便可以在 Visual Studio 没有运行时测试应用程序,并在出现问题时利用 Visual Studio 开始调试。

实时调试不适用于 Windows 存储 app 工作。实时调试不适用于在可视化工具等本机应用程序中承载的托管代码。

使用实时调试

默认情况下,安装 Visual Studio 时会启用实时调试。如果需要禁用或重新启用实时调试,请参见启用或禁用实时调试

启用实时调试之后,您可以在 Visual Studio 之外调试应用程序。如果发生崩溃或异常,将会出现一个对话框,其中显示一条与下面类似的消息:

在 terrarium.exe[3384] 中发生未经处理的异常(“System.TypeInitializationException”)

如果出现此对话框,您可以通过以下步骤开始调试。

发生错误时开始实时调试

  1. 在实时调试"对话框中,在 可能的调试器 列表中,单击 Visual Studio 新实例 2012 中 或单击已运行 Visual Studio 的实例。

  2. 若要使用 Visual Studio 在将来的所有自动失败,单击 将当前选定的调试器为默认

  3. 如果要选择能够调试的代码类型,请单击**“手动选择调试引擎”**。如果没有选择此选项,Visual Studio 将根据程序中的代码类型自动选择合适的调试引擎。

  4. 单击**“确定”**。

  5. 如果在您的应用程序中,某个程序集包含不受信任的代码,则会出现一个对话框以及一条安全警告。此对话框使可以决定是否继续调试。在继续调试之前,请决定您是否信任相应代码。代码是您自己编写的吗?您是否信任代码编写者?如果该应用程序正在远程计算机上运行,您是否认识进程的名称?即便该应用程序在本地运行,也不一定表示它是可信的应用程序。例如,在 Internet Explorer 中可能会有恶意 ActiveX 控件运行。请考虑此类恶意代码在您的计算机中运行的可能性。如果您确信待调试代码值得信任,请单击**“调试”。否则,请单击“不调试”**。

启用或禁用实时调试

您可以在**“选项”**对话框中启用或禁用实时调试。

启用或禁用实时调试

  1. 在“工具”菜单上,单击“选项”。

  2. 在**“选项”对话框中选择“调试”**文件夹。

  3. 在**“调试”文件夹中选择“实时”**页。

  4. 在**“启用这些代码类型的实时调试”框中,选中或清除相关的程序类型:“托管”“本机”“脚本”**。

    要在启用实时调试后禁用它,必须使用管理员特权运行。启用实时调试会设置一个注册表项,需要管理员特权才可以更改该项。

  5. 单击**“确定”**。

默认情况下,Windows 窗体应用程序有一个顶级的异常处理程序,该处理程序允许程序在能够恢复时继续运行。因此,若要启用 Windows 窗体应用程序的实时调试,还必须执行下列步骤。

为 Windows 窗体启用实时调试

  1. 在 machine.config 或应用程序.exe.config 文件的 system.windows.form 节中,将 jitDebugging 值设置为 true。

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  2. 在 C++ Windows 窗体应用程序中,还必须在 .config 文件或您的代码中设置 DebuggableAttribute。如果在编译时使用 /Zi 而没有使用 /Og,则编译器会替您设置此特性。然而,如果您想要调试非优化发布版本,则必须自行设置此项。为此,您可以在应用程序的 AssemblyInfo.cpp 文件中添加下面一行:

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

    有关更多信息,请参见DebuggableAttribute

即便在您的计算机中不再安装有 Visual Studio,仍可启用实时调试。如果没有安装 Visual Studio,则不能在 Visual Studio**“选项”**对话框中禁用实时调试。对于这种情况,您可以通过编辑 Windows 注册表来禁用实时调试。

通过编辑注册表禁用实时调试

  1. 启动 菜单、搜索和运行的 regedit.exe

  2. 在**“注册表编辑器”**窗口中,找到并删除下列注册表项:

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

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

  3. 如果您的计算机运行的是 64 位操作系统,还请删除下列注册表项:

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

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

  4. 注意不要意外删除或更改任何其他注册表项。

  5. 关闭**“注册表编辑器”**窗口。

实时调试错误

您可能会遇到与实时调试相关联的下列错误消息。

  • **<程序> 中发生未处理的 win32 异常。**对此异常的实时调试失败,错误为: 登录用户没有调试崩溃应用程序的权限。

    此信息指出:由于您没有正确的访问权限,实时调试失败。有关所需权限的信息,请参见Remote Debugging Permissions

  • 无法附加到崩溃进程。指定的程序不是 Windows 或 MS-DOS 程序。

    当您尝试附加到 Windows 2000 下作为另一个用户运行的进程时会发生该错误。

    此问题,启动 Visual Studio 中,打开 调试 从菜单中 附加到进程 对话框并找到在 可用进程 若要调试列表的过程。如果您不知道进程名称,请查看**“Visual Studio 实时调试器”对话框并记下进程 ID。在“可用进程”列表中选择该进程并单击“附加”。在“Visual Studio 实时调试器”对话框中单击“否”**以关闭该对话框。

  • 未能启动调试器,因为没有用户登录。

    此错误,将实时调试尝试启动在没有用户登录到控制台的计算机上 Visual Studio。因为没有用户登录,所以没有用户会话来显示“实时调试”对话框。

    要解决此问题,请登录到计算机。

  • 类没有注册。

    此错误指出:调试器尝试创建一个可能是因为安装问题而没有注册的 COM 类。

    若要解决此问题,请使用安装盘重新安装或修复您的 Visual Studio 安装。

请参见

参考

“选项”对话框 ->“调试”->“实时”

安全警告: 附加到不受信任的用户拥有的进程可能很危险。如果下面的信息看上去可疑或无法确定,请不要附加到此进程

概念

调试器安全

其他资源

调试器指南