我正在用 C++ 编写一个无法使用 F5 调试的类。代码将从另一个调用它的“服务”运行。过去我曾经使用过__debugbreak()
,当我得到一个窗口告诉我抛出异常时,选择对其进行调试。
最近我已经更新到 Windows 7 并且它一直工作了一段时间。
今天,当我尝试调试一段代码而不是显示告诉我 VSTestHost 已停止工作并使我能够调试应用程序的常规对话框时,我得到了一个不同的对话框,建议我将数据发送给微软进行分析。
有谁知道我该如何解决这个问题,以便我能够调试我的代码?
最后我找到了问题的原因。这是 Vista/Win7 的原因:
虽然这更多的是 IT 解决方案/问题,但我整天都被这个问题所困扰,并希望与遇到此问题的其他开发人员分享解决方案。
我终于在这里找到了适用于 Windows 10 的解决方案: https ://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/enabling-postmortem-debugging
还有:https ://docs.microsoft.com/en-us/windows/desktop/Debug/configuring-automatic-debugging
要启用自动调试器启动,您应该添加一个注册表值:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
,值Auto
= 1
(类型REG_DWORD
)配置的调试器由值Debugger
(类型REG_SZ
)设置;Visual Studio 安装将其设置为:
"C:\WINDOWS\system32\vsjitdebugger.exe" -p %ld -e %ld
请注意,在 64 位操作系统上,这仅适用于64 位可执行文件。要在32 位可执行文件中启用相同的行为,请在此键中设置相同的值:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
在这种情况下...
以下是在 Microsoft Windows 7 机器上启用调试所需执行的快速概述:
更新即时调试器设置 DbgJITDebugLaunchSetting。该设置位于注册表中[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
。
将 DbgJITDebugLaunchSetting 的值设置为 2。如果您使用的是 64 位操作系统,则还必须将此文件夹中的相同密钥 (DbgJITDebugLaunchSetting) 设置[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
为 2。如果遇到任何问题,请尝试以管理员身份运行 CodeSmith Studio 和 Visual Studio。现在,当 CodeSmith 进入断点时,您将看到如下内容:
您可以尝试调试>附加到进程。