访问冲突错误后 VS2008 C++ 断点永久不活动(没有与行关联的可执行代码)

VS2008 C++ breakpoint becomes permanently inactive after access violation error (no executable code associated with line)

我正在 VS2008(本机 C++)中重现以下行为:

在此之后,无论我重新附加、重建、重新启动应用程序、计算机多少次,我将在 .dll 源代码中设置的任何断点都将变为非活动状态(没有与此行关联的可执行代码 是所谓的原因,根据 VS)。

我怀疑这是 VS2008 的问题,因为我在另一台机器上做了同样的事情,现在我有两台机器无法再进行调试。

有没有解决这个问题的记录?可以做些什么来克服它?


我做了什么:

我不能做什么:

问题的根源更加微妙。虽然该项目打算是本机 C++,但我发现在我测试代码的配置上,整个项目都是使用 CLR 支持构建的。

在任何机器上第一次附加到应用程序时,在本机调试模式下,断点将触发。但是,当遇到本机访问冲突错误时,这些断点此后会永久失效。在决定检查如果让调试器以自动模式附加会发生什么后,我发现断点已激活,因此发现所有代码都是使用 /clr 标志 except 编译的对于使用的 dll 中的入口点,它没有 CLR 支持。

这里的问题是为什么 VS2008 的行为是这样的,并且在尝试使用本机调试设置调试托管上下文时不直接禁用断点。


TL;DR:检查您的 C++ 项目是否使用 CLR 支持构建,并根据您的需要附加为本机或托管项目。或者,如果只有部分文件需要使用 C++-CLI,则仅为这些文件启用 /clr 标志。它通常是更好的选择,因为 C++-CLI 经常与某些本机库冲突(例如,不支持 std::mutex,链接本机静态库 Linking unmanaged C++ DLL with managed C++ class library DLL,等等)。