11

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

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

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

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

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

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

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

4

2 回答 2

17

不幸的是,VS 中对 C++/CLI 项目的一些工具支持不断下降,他们正在努力保持它的维护。添加到 VS2012 的新调试引擎存在问题,该引擎支持新的C++ 调试可视化工具,它不再支持 C++/CLI。

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

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

于 2013-10-22T09:21:38.367 回答
12

我找到了解决办法:单独在项目上的混合模式调试设置是不够的,另外Visual Studio需要启用

[x] Use Managed Compatibility Mode

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

于 2013-10-22T08:39:03.080 回答