DebugBreak 不中断
Posted
技术标签:
【中文标题】DebugBreak 不中断【英文标题】:DebugBreak not breaking 【发布时间】:2010-11-05 20:35:33 【问题描述】:我正在用 C++ 编写一个无法使用 F5 进行调试的类。代码将从另一个调用它的“服务”运行。
过去我使用过__debugbreak()
,当我得到一个窗口告诉我抛出异常时,选择对其进行调试。
最近我已经更新到 Windows 7 并且它一直工作了一段时间。
今天,当我尝试调试一段代码而不是显示告诉我 VSTestHost 已停止工作并使我能够调试应用程序的常规对话框时,我得到了一个不同的对话框,建议我将数据发送给微软进行分析。
有谁知道我该如何解决这个问题,以便能够调试我的代码?
【问题讨论】:
【参考方案1】:我终于找到了问题的原因。 这是 Vista/Win7 的原因:
-
打开操作中心控件
转到操作中心设置
转到问题报告设置
选择“每次出现问题时,在检查解决方案之前询问我”
虽然这更多是 IT 解决方案/问题,但我整天都被这个问题所困扰,并希望与遇到此问题的其他开发人员分享解决方案。
【讨论】:
它确实停止了关于 Win 8 的报告,但它也不提供启动调试器。它只是说错误 1067:进程意外终止。【参考方案2】:我终于在这里找到了适用于 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
【讨论】:
这在 Windows 10 上帮助了我(特别是添加“自动”的步骤)。谢谢!【参考方案3】:这样的话……
http://community.codesmithtools.com/blogs/blake/archive/2009/06/03/tips-amp-tricks-debugging-codesmith-on-microsoft-windows-7.aspx
以下是在 Microsoft Windows 7 计算机上启用调试所需要做的快速概述:
更新即时调试器设置 DbgJITDebugLaunchSetting。该设置位于注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
。
将 DbgJITDebugLaunchSetting 的值设置为 2。
如果您使用的是 64 位操作系统,则还必须将此文件夹 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
中的相同密钥 (DbgJITDebugLaunchSetting) 设置为 2。
如果您遇到任何问题,请尝试以管理员身份运行 CodeSmith Studio 和 Visual Studio。
现在,当 CodeSmith 进入断点时,您将看到如下内容:
【讨论】:
很好的发现,但我已经设法解决了这个问题,而无需将键的值更改为 2(默认为 16) 这些设置仅用于 CLR 调试。问题是关于原生 C++ 代码的。【参考方案4】:您可以尝试调试 > 附加到进程。
【讨论】:
有时这可能是一个问题,因为当您附加到进程时,您的代码已经超过了那个点。在这些情况下,我发现在我想要中断的点之前放置一个 Sleep(10000) 很有帮助。给了我足够的时间来处理这个过程。 我不是在寻找另一种调试方式 - 我想修复当前为什么要调试我的代码以上是关于DebugBreak 不中断的主要内容,如果未能解决你的问题,请参考以下文章
在ucos中 我使用了CAN的接受中断 程序就一直执行中断,不去执行任务,然后不喂狗超时重启,这个怎么解决