调试 C++/Cli:<未知函数>,没有局部变量
本文关键字:局部变量 函数 未知 C++ Cli 调试 | 更新日期: 2023-09-27 18:36:18
我正在尝试调试一个带有 C# 程序集和 C++/Cli 程序集的项目。
在 C# 中定义的接口由 C++/CLI 类继承,而/CLI 类又调用本机C++类。 混合模式调试在 C++ 和 C# 程序集以及启动.exe中都已启用。
现在,当我尝试调试到 C++ 部分时,它变得棘手;如果我只是在 C++ 部分中设置断点,它们不会被命中(尽管我知道它们被命中是因为日志(等)被写入并且在那里抛出异常实际上会正确抛出它)。
当我在调用混合模式程序集之前在 C# 中的最新调用处设置断点时,我可以单步执行 C++/Cli 代码,甚至可以单步执行本机部分。但是,调用堆栈显示为
MyMixedMode.dll!<Unknown function> Line ...
而且我无法检查任何局部变量(本地代码中的局部变量视图只是空的)。
知道我可能做错了什么吗?
不幸的是,VS 中用于 C++/CLI 项目的工具支持不断下降,他们正在努力维护它。 添加到VS2012的新调试引擎存在问题,该引擎支持新的C++调试可视化工具,它不再支持C++/CLI。
VS2012 Update 1在"工具+选项"、"调试"、"常规"中添加了一个名为"托管C++兼容模式"的新设置。 在VS2013中混淆地重命名为"使用托管兼容模式"。 此设置页的 MSDN 页中未记录。 它的作用是强制调试器使用旧的调试引擎而不是新的调试引擎。
这确实有一个副作用,当您打开该选项时,那些闪亮的新调试可视化工具将无法正常工作。 如果本机代码的调试信息看起来不正确,请记住这一点。
我找到了解决方案:仅靠项目的混合模式调试设置是不够的,此外,Visual Studio 需要启用
[x] Use Managed Compatibility Mode
在工具->选项->调试->常规中。