微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VS2012:在debugging器ntdll.dll中的断点启动,没有更多的信息

偶尔当我在Debug模式下启动/debugging我的应用程序时,使用VS2012,我得到一个对话框:

<blahblah.exe>触发了一个断点。

它不包含其他信息,所以我打破了看看发生了什么。 哦,但是,然后我得到“wntdll.pdb不加载”,并没有关于这个问题的其他信息。 调用堆栈指向ntdll.dll,看来我的应用程序还没有开始执行。

在这一点上select继续将让应用程序/debugging器像往常一样继续。

gnuc中的可变长度结构

使用Windows媒体基础

C#抽象string清除矩形还是没有矩形? 可能

使用系统设备枚举器select捕获设备

调用IWebbrowser2-> get_Document时错误800706B5

这种情况发生得非常频繁(10次中约有7次发射)。 我正在运行Windows 8(64位)和Visual Studio 2012更新1。

以前我有Windows 7(64位)和VS2010,从来没有得到这个问题。 这个特定的项目已经从2010年创build的版本升级,所以也许这是问题的一部分。

任何人都遇到过这个问题? 我不知道从哪里开始寻找原因。 虽然我运行的是64位Windows,但我应该提到,我正在构build一个32位应用程序。

更新:启用Microsoft Symbol Server后,以下是调用堆栈的样子:

> 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

以防万一,我绝对没有手动设置我的代码中的任何地方的断点 。

获取群集大小

在C代码中查找错误

清单的supportedOS设置实际上在幕后做了什么?

从unsigned int转换为float

一次使用函数 – 我应该使用malloc或不

这个烦人的问题源于Visual Studio中的一个错误

发生的是我们没有正确处理来自不同进程的多个加载器断点事件。 一旦进程启动并运行,但在调试器执行任何执行之前,操作系统将触发加载器断点,以便立即执行断点并执行其他操作。 通常我们成功地忽略了这些(至少在单发射情况下)。 您可以通过禁用工具 – >选项 – >调试器中的“打断一个进程中断所有进程”复选框来解决此问题。 另外请注意,这不是一个致命的错误。 我们只是停留在内部的一个breakpiont,你可以再次打F5继续前进。

这是一个竞争条件,所以我们不容易追踪和VS多发射使用是相当低的,所以我不会解决这个问题,假设上面的解决方法将足以让你畅通无阻,如果我们看到来自其他客户的更多报告,我们将重新审视这一点。 这对你来说合理吗?

再次感谢你的反馈。

marc Paine Visual Studio调试器工程经理

来源: Microsoft Connect

我遵循的建议,禁用Visual Studio调试器设置中的“打破一个进程中断所有进程”复选框,这个“现在”删除“的问题。

也许如果我们可以让更多的人报告这个bug的相同问题/烦恼,微软将最终修复它像他们的建议。

如果您在调试器下运行该应用程序,则一旦该进程启动,就会有一个自动断点。 这个断点使您有机会在进程开始执行之前设置更多的断点。 如果你不喜欢它,调试器中通常会有一个选项来忽略最初的认断点。 例如,在cdb ,选项是-g 。

我刚刚发现自己遇到类似的问题,但是,这是我的调用堆栈:

ntdll.dll!LdrpDoDebuggerBreak() ntdll.dll!LdrpInitializeProcess() ntdll.dll!_LdrpInitialize() ntdll.dll!LdrInitializeThunk()

在我的情况下,我的Visual Studio解决方案有几个项目,其中三个项目通过解决方案的“多个启动项目”设置设置为启动(和调试)。

两个启动项目是(非托管)C ++,其中之一是C#。 我可以通过打开C#项目的项目属性,并启用“本地代码调试”来摆脱此启动断点。

编辑 :显然这并没有完全解决我的问题,它只是大大减少了发生的频率。 但是,我认为相同的通用解决方案仍然可以解决这个问题。

解决方案中的其他项目之一就是通过手动将二进制文件指定为项目的TargetPath来启动的预构建二进制文件

在项目的“ Debugging属性页面中将“ Debugger Type更改为“ Native Only似乎也有所帮助。

所以,改变这两个似乎实际上已经解决了我的问题。

看看是否在第一次机会异常时打开调试器。

你可以在“Debug / Exceptions …”下看到这个。 看看是否有任何框被选中。 (至少这是旧的VS变种中的菜单位置 – 我目前没有VS 2012)如果启用,这将导致调试程序在抛出异常时中断,即使它可能被应用程序正确处理。 如果禁用,则调试器仅在未处理异常时中断。 如果检查到任何异常,请尝试取消选中它们,看看是否存在。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐