我正在尝试使用 C# 程序集和 C++/Cli 程序集调试项目。
C# 中定义的接口(interface)由 C++/Cli 类继承,后者又调用 native C++ 类。在 C++ 和 C# 程序集以及启动 .exe 中都启用了混合模式调试。
现在,当我尝试调试 C++ 部分时,它变得很棘手;如果我只是在 C++ 部分设置断点,它们就不会被击中(尽管我知道它们被击中是因为日志(等)被写入并且在那里抛出异常实际上会正确地抛出它)。
当我在调用混合模式程序集之前在 C# 中的最新调用处设置断点时,我可以进入 C++/Cli 代码,甚至可以进入 native 部分。但是,调用堆栈显示为
MyMixedMode.dll!<Unknown function> Line ...
而且我无法检查任何局部变量(在 native 代码中,局部变量 View 只是空的)。
知道我可能做错了什么吗?
最佳答案
不幸的是,VS 中对 C++/CLI 项目的工具支持不断减少,他们正在努力维护它。添加到 VS2012 的新调试引擎存在问题,该引擎支持新的 C++ debugging visualizers , 它不再支持 C++/CLI。
VS2012 Update 1 在 Tools + Options, Debugging, General 添加了一个新的设置,名为“Managed C++ Compatibility Mode”。在 VS2013 中混淆地重命名为“使用托管兼容模式”。此设置页面的 MSDN 页面中未记录。它的作用是强制调试器使用旧的调试引擎而不是新的。
这确实有一个副作用,当您打开该选项时,那些 Shiny 的新调试可视化工具将无法工作。如果您的 native 代码的调试信息看起来不正确,请记住这一点。
关于c# - 调试 C++/Cli : <Unknown function> and no Locals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19512785/