tac*_*ice 11 c++ windows debugging windows-8 visual-studio-2012
偶尔当我使用VS2012在调试模式下启动/调试我的应用程序时,我会得到一个对话框:
<blahblah.exe>触发了一个断点.
它不包含任何其他信息,所以我打破了看看发生了什么.哦,但后来我得到"wntdll.pdb没有加载",没有关于这个问题的其他信息.调用堆栈指向ntdll.dll,此时我的应用程序还没有开始执行.
此时选择continue将使应用程序/调试器像往常一样继续.
这种情况经常发生(大约7次发射中的10次).我正在运行Windows 8(64位)和带有更新1的Visual Studio 2012.
以前我有Windows 7(64位)和VS2010,从来没有遇到过这个问题.此特定项目已从(2010年)创建的版本升级,因此可能是问题的一部分.
有人遇到过这个问题吗?我不知道从哪里开始寻找原因.虽然我正在运行64位Windows,但我应该提到我正在构建一个32位应用程序.
更新: 启用Microsoft符号服务器后,这是调用堆栈的样子:
> ntdll.dll!_LdrpDoDebuggerBreak@0() Unknown
ntdll.dll!_LdrpInitializeProcess@8() Unknown
ntdll.dll!__LdrpInitialize@8() Unknown
ntdll.dll!_LdrpInitialize@8() Unknown
ntdll.dll!_LdrInitializeThunk@8() Unknown
Run Code Online (Sandbox Code Playgroud)
我还应该添加,以防万一,我在代码中的任何地方都没有设置断点.
这个烦人的问题源于 Visual Studio 中的一个错误:
发生的事情是我们没有同时正确处理来自不同进程的多个加载程序断点事件。一旦进程启动并运行,操作系统就会触发加载程序断点,但在调试器可以执行任何执行之前,以实例化断点并采取其他操作。通常我们会成功忽略这些(至少在单次发射情况下)。您可以通过禁用工具->选项->调试器中的“当一个进程中断时中断所有进程”复选框来解决此问题。另请注意,这不是致命错误。我们只是在内部断点处停下来,您可以再次按 F5 继续前进。
这是一个竞争条件,所以我们很难追踪,而且 VS 中的多次启动使用率相当低,所以我不会解决这个问题,假设上面的解决方法足以让你畅通无阻,如果我们看到更多来自其他客户的报告,我们将重新审视这一点。这听起来合理吗?
再次感谢你的反馈。
Marc Paine Visual Studio 调试器工程经理
来源:微软连接
我遵循了在 Visual Studio 调试器设置中禁用“当一个进程中断时中断所有进程”复选框的建议,这暂时“删除”了这个问题。
也许如果我们能让更多的人报告这个错误的相同问题/烦恼,微软最终会像他们建议的那样修复它。