我正在尝试使用C#程序集和C ++ / Cli程序集调试项目。
C#中定义的接口由C ++ / Cli类继承,后者又调用本机C ++类。在C ++和C#程序集以及启动.exe。
中都启用了混合模式调试现在,当我尝试调试C ++部分时,它变得棘手;如果我只是在C ++部分设置断点,它们就不会被击中(尽管事实上我知道它们被击中了,因为写入了日志(等)并抛出异常,实际上它会正确地抛出它。)
当我在调用混合模式程序集之前在C#的最新调用中设置断点时,我可以进入C ++ / Cli代码,甚至进入本机部分。但是,调用堆栈显示为
MyMixedMode.dll!<Unknown function> Line ...
我无法检查任何本地人(本机代码内部的本地视图只是空的)。
任何想法我可能做错了什么?
答案 0 :(得分:17)
不幸的是,VS for C ++ / CLI项目中的工具支持部分不断下降,他们正在努力保持这种状态。添加到VS2012的新调试引擎存在问题,该引擎支持新的C++ debugging visualizers,它不再支持C ++ / CLI。
VS2012 Update 1在Tools + Options,Debugging,General中添加了一个名为“Managed C ++ Compatibility Mode”的新设置。在VS2013中混淆地重命名为“使用托管兼容模式”。在此设置页面的MSDN页面中未记录。它的作用是强制调试器使用旧的调试引擎而不是新的调试引擎。
这确实有副作用,当您打开选项时,那些闪亮的新调试可视化工具将无法工作。如果您的本机代码的调试信息看起来不正确,请记住这一点。
答案 1 :(得分:10)
我找到了解决方案:项目上的混合模式调试设置是不够的,此外,Visual Studio需要启用
[x] Use Managed Compatibility Mode
in Tool-&gt; Options-&gt; Debugging-&gt; General。