调试C++/Cli:<未知函数>,没有本地

Wil*_*ert 11 .net c# c++-cli visual-studio

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

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

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

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

MyMixedMode.dll!<Unknown function> Line ... 
Run Code Online (Sandbox Code Playgroud)

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

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

Han*_*ant 17

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

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

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

  • Microsoft*从不*分享其开发计划.微软员工通常都知道,他们不得分享这些知识.所以不行. (3认同)

Wil*_*ert 11

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

[x] Use Managed Compatibility Mode
Run Code Online (Sandbox Code Playgroud)

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