c# - 调试 C++/Cli : <Unknown function> and no Locals

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

我正在尝试使用 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/

相关文章:

.net - 将 SQL CE 数据序列化为 XML

c# - 高优先级的自定义命令Windows服务

C# List<string> 只打印最后一个元素

c - VS Visual GDB智能感知未找到库,但可以正确编译

c# - 通过 OleDbConnection 获取单个记录的最佳方法是什么?

c# - 将数字标准化为 0-100% 范围

c# - 类型 'Object' 在未引用的程序集中定义 (NET Standard 2.0/.NET Framework 4.6.1)

asp.net-mvc - Visual Studio ASP.NET Web 部署 - 每个引用自定义库的页面都会给出错误 404

java - 将 DeflaterInputStream 功能移植到 .net

c# - 什么时候并行提高性能