我在VS2008(原生C ++)中重现了以下行为:
在此之后,无论我重新连接多少次,重建,重新启动应用程序,计算机,我将在.dll源代码中设置的任何断点都变为非活动状态(没有与此行关联的可执行代码据VS说,这是所谓的原因。
我怀疑这是VS2008的一个问题,因为我在另一台机器上做了同样的事情,现在我有两台机器无法进行调试。
此问题是否有任何记录解决方案?可以做些什么来克服它?
我做了什么:
我不能做的事情:
答案 0 :(得分:0)
问题的根源更加微妙。虽然该项目是原生C ++,但我发现在测试代码的配置中,整个项目都是使用CLR支持构建的。
首次在任何计算机上连接到应用程序时,在本机调试模式下,将触发断点。但是,遇到本机访问冲突错误时,这些断点此后变为永久不活动。在决定检查调试器是否在自动模式下连接后会发生什么情况后,我发现断点变为活动状态,因此发现所有代码都使用/ clr标志编译,除了用于入口点在消耗的dll中,没有CLR支持。
这里的问题是为什么VS2008的行为与此类似,并且在尝试使用本机调试设置调试托管上下文时不会直接禁用断点。
TL; DR:检查您的C ++项目是否构建了CLR支持,并根据您的需要将其作为本机或托管附加。或者,如果只有部分文件需要使用C ++ - CLI,则只为这些文件启用/ clr标志。它通常是更好的选择,因为C ++ - CLI经常与某些本机库冲突(例如,不支持std :: mutex,链接本机静态库Linking unmanaged C++ DLL with managed C++ class library DLL等。)。