调试C ++ / Cli:,没有本地

我正在尝试使用C#程序集和C ++ / Cli程序集调试项目。

C#中定义的接口由C ++ / Cli类inheritance,后者又调用本机C ++类。 在C ++和C#程序集以及启动.exe中都启用了混合模式调试。

现在,当我尝试调试C ++部分时,它变得棘手; 如果我只是简单地在C ++部分设置断点,它们就不会被击中(尽管事实上我知道它们被击中了,因为写入了日志(等)并抛出exception,实际上它会正确地抛出它)。

当我在调用混合模式程序集之前在C#的最新调用中设置断点时,我可以进入C ++ / Cli代码,甚至进入本机部分。 但是,调用堆栈显示为

MyMixedMode.dll! Line ... 

并且我无法检查任何本地人(本机代码中的本地视图只是空的)。

我有什么想法可能做错了吗?

不幸的是,VS for C ++ / CLI项目中的工具支持部分不断下降,他们正在努力保持这种状态。 添加到VS2012的新调试引擎存在问题,VS2012支持新的C ++调试可视化工具 ,它不再支持C ++ / CLI。

VS2012 Update 1在Tools + Options,Debugging,General中添加了一个名为“Managed C ++ Compatibility Mode”的新设置。 在VS2013中混淆地重命名为“使用托管兼容模式”。 在此设置页面的MSDN页面中未记录。 它的作用是强制调试器使用旧的调试引擎而不是新的调试引擎。

这确实有副作用,当您打开选项时,那些shiny的新调试可视化工具将无法工作。 如果您的本机代码的调试信息看起来不正确,请记住这一点。

我找到了解决方案:项目上的混合模式调试设置是不够的,此外,Visual Studio需要启用

 [x] Use Managed Compatibility Mode 

在工具 – >选项 – >调试 – >常规中。