在 Visual Studio 中混合调试本机/托管代码

先看参考资料:使用实时调试器进行调试 - Visual Studio (Windows) | Microsoft Learn

但是链接经常失效 .... 先拷贝一份如下:

在 Visual Studio 中启用或禁用实时调试

备注

若要启用或禁用实时调试,必须以管理员身份运行 Visual Studio。 启用或禁用实时调试会设置一个注册表项,可能需要管理员权限来更改此注册表项。 若要以管理员身份打开 Visual Studio,右键单击 Visual Studio 应用程序,然后选择以管理员身份运行

可从 Visual Studio 的“工具” > “选项” (或“调试” > “选项” )对话框中配置实时调试。

启用或禁用实时调试:

  1. 在“工具” 或“调试” 菜单上,选择“选项” > “调试” > “实时” 。

    启用或禁用 JIT 调试

  2. 在中启用实时调试对这些类型的代码框中,选择你希望在实时调试来调试的代码的类型:托管本机,和/或脚本

  3. 选择 确定

  4. 如果启用了实时调试器,但它并未在应用程序崩溃或出错时打开,请参阅实时调试疑难解答

    从 Windows 注册表禁用实时调试

    即便计算机中不再安装有 Visual Studio,仍可启用实时调试。 如果不再安装 Visual Studio,则可以通过编辑 Windows 注册表来禁用实时调试。

    若要通过编辑注册表禁用实时调试,请执行以下操作:

  5. 从 Windows“开始”菜单,运行“注册表编辑器”(regedit.exe) 。

  6. 在中注册表编辑器窗口中,找到并删除以下注册表项:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

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

    JIT 注册表项

  7. 如果您的计算机正在运行 64 位操作系统,也删除以下注册表项:

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

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

    请确保不能删除或更改任何其他注册表项。

  8. 关闭注册表编辑器窗口。

  9. 启用 Windows 窗体的实时调试

    默认情况下,Windows 窗体应用具有一个顶级异常处理程序,可让应用保持运行(如果能够恢复)。 如果 Windows 窗体应用引发未处理的异常,则会显示以下对话框:

    Windows 窗体未经处理的异常

    若要启用实时调试而不是标准 Windows 窗体错误处理,请添加以下设置:

  10. 在 machine.config 或 <应用名称>.exe.config 文件的 system.windows.forms 部分中,将 jitDebugging 值设置为 true:

    XML复制

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  11. 在 C++ 窗体应用程序中,还要在 .config 文件或代码中将 DebuggableAttribute 设置为 true。 如果使用 /Zi 而不使用 /Og 进行编译,则编译器会替你设置此属性。 但是,如果要调试非优化发布版本,则必须通过在应用的 AssemblyInfo.cpp 文件中添加以下行来设置 DebuggableAttribute :

    C++复制

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

    有关详细信息,请参阅 DebuggableAttribute

  12. 使用实时调试

    此示例演示在应用引发错误时如何进行实时调试。

  13. 必须安装 Visual Studio,才能按照以下步骤操作。 如果未安装 Visual Studio,则可以免费下载 Visual Studio Community Edition

  14. 请务必依次选择“工具” > “选项” > “调试” > “实时”,启用实时调试 。

  15. 本示例会在 Visual Studio 中创建 C# 控制台应用,该应用可引发 NullReferenceException

  16. 在 Visual Studio 中,创建C#控制台应用程序 (文件 > 新建 > 项目 > Visual C# > 控制台应用程序) 名为ThrowsNullException。 在 Visual Studio 中创建项目的详细信息,请参阅演练:创建简单应用程序

  17. 在 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");
    }
    
  18. 可以从此时开始调试。 如果调试的是真实应用,则需要找出代码引发异常的原因。

     注意

    如果应用包含不受信任的代码,则会出现安全警告对话框,让你可决定是否继续进行调试。 继续调试前,请确定是否信任该代码。 代码是否为自己编写的? 如果应用程序在远程计算机上运行,你能否识别进程的名称? 如果应用在本地运行,请考虑计算机上运行恶意代码的可能性。 如果决定信任该代码,请选择“确定” 。 否则,请选择“取消” 。

    排查在实时调试

    如果在应用崩溃时实时调试不启动,即使 Visual Studio 中已启用实时调试也是如此,则:

  19. Windows 错误报告可能会接管计算机上的错误处理。

    若要解决此问题,请使用注册表编辑器中添加DWORD 值禁用,与值数据1,对以下注册表项:

    • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows 错误报告

    • (对于 64 位计算机):HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    有关详细信息,请参阅 .WER 设置

  20. 已知的 Windows 问题可能导致实时调试器启动失败。

    解决方法是添加DWORD 值自动,与值数据1,对以下注册表项:

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

    • (对于 64 位计算机):HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

  21. 您可能会看到以下错误消息过程中实时调试:

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

    调试器尝试附加到另一个用户下运行的进程。

    若要解决此问题,请在 Visual Studio 中依次打开“调试” > “附加到进程”,然后在“可用进程”列表中查找要调试的进程 。 如果不清楚进程名称,请在“Visual Studio 实时调试器”对话框中查找进程 ID 。 在“可用进程”列表中选择该进程,然后选择“附加” 。 选择“否”可关闭“实时调试器”对话框 。

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

    没有用户登录到控制台,因此没有用户会话来显示实时调试对话框。

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

  24. 类没有注册。

    调试器试图创建的 COM 类未进行注册,可能是由安装问题导致。

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

  25. 若要生成解决方案,请选择“调试”(默认值) 或“发布”配置,然后选择“生成” > “重新生成解决方案” .

     备注

    • 选择调试配置完整的调试体验。
    • 如果选择发布配置,必须先关闭仅我的代码才能运行此过程。 可在“工具” > “选项” > “调试”下,取消选择“启用仅我的代码” 。

    有关生成配置的详细信息,请参阅了解生成配置

  26. 在 C# 项目文件夹 ( ...\ThrowsNullException\ThrowsNullException\bin\Debug或 ...\ThrowsNullException\ThrowsNullException\bin\Release) 中打开生成的应用 ThrowsNullException.exe

    应会看到下面的命令窗口:

    ThrowsNullExceptionConsole

  27. 选择实时调试器对话框随即打开。

    JustInTimeDialog

    在“可用调试器”下,选择“<首选 Visual Studio 版本>的新实例”(如果尚未选择) 。

  28. 选择 确定

    ThrowsNullException 项目会在 Visual Studio 的新实例中打开,并在引发异常的代码行处停止执行:

    NullReferenceSecondInstance

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值