调试C ++ / Cli:<unknown function =“”>并且没有本地</unknown>

时间:2013-10-22 08:30:52

标签: c# .net visual-studio c++-cli

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

C#中定义的接口由C ++ / Cli类继承,后者又调用本机C ++类。在C ++和C#程序集以及启动.exe。

中都启用了混合模式调试

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

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

MyMixedMode.dll!<Unknown function> Line ... 

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

任何想法我可能做错了什么?

2 个答案:

答案 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。