【问题标题】:How to display native types when debugging in VS2012 for mixed mode C++/CLI MFC app在 VS2012 中调试混合模式 C++/CLI MFC 应用程序时如何显示本机类型
【发布时间】:2013-04-19 05:59:52
【问题描述】:

this question 可能重复。

我有一个 MFC 项目,它使用 /clr 开关和一些 C++/CLI 代码来使用 .Net 组件。最初是在 VS2005 上。

升级到 VS2012 Update 2 时,在调试过程中,本机数据类型没有显示任何值或类型。我了解到,在 VS2010 中引入了一种新的原生数据类型可视化机制(natvis),并在 VS2012 中进行了扩展/增强。根据that page 上的信息,我取消选中Managed C++ Compatibility ModeC/C++ edit and continue。在此之后,断点被禁用并停止被击中。使用“Only Managed”调试器,断点被命中,但没有显示任何值。

最后,我使用“混合”调试器并使用__debugbreak() 强制中断。这导致仅当它们是本地汽车时才显示整数值;并且数据类型被正确提取。但是,std::stringCString 值不会显示,而是它们的类型显示在值列中。类似地,指针、类成员或函数参数值不会显示,类型信息、未定义值或超出范围会显示在值列中。

自动、本地和监视窗口以及鼠标悬停在符号上的行为是一致的。

在 VS2012 混合模式 C++/CLI MFC 应用程序的调试过程中,如何让原生数据类型显示它们的值。

我已阅读this question 并验证所有符号已加载到模块窗口中。

显然,Microsoft 是 aware of the issue,即将到来的更新 3 的 CTP 应该会修复它。

另外,为什么我需要使用__debugbreak()

【问题讨论】:

  • @knockNrod - 我们尝试仅将 VS2012 和 VS2012 与 Update1 一起使用。调试速度非常慢 - 每个 F10 需要 1-2 分钟才能进入下一行。这是一个knownissue,带有VS2012,用于混合模式调试。
  • @Per Lundberg - 非常感谢。确认更新 3 RC 解决了缓慢以及原生符号值。但是,必须手动将调试器更改为“仅限托管”,否则不会命中断点。使用__debugbreak() 中断时,不显示符号。

标签: visual-studio-2012 mfc c++-cli visual-studio-debugging mixed-mode


【解决方案1】:

几天前,Microsoft 发布了一个 Visual Studio Service Pack 3 RC,它可能会有所帮助(现在我自己安装它)。这是链接:http://www.microsoft.com/en-us/download/details.aspx?id=38832

【讨论】:

  • 可以确认在调试器中显示非托管变量现在可以工作了,至少对我来说,在安装了上述之后。
  • 谢谢每。确认更新 3 RC 解决了缓慢以及原生符号值。但是,必须手动将调试器更改为“仅限托管”,否则不会命中断点。使用__debugbreak() 中断时,不显示符号。
  • FWIW,SP3 现已发布(不再是 RC)。
【解决方案2】:

重新安装 Visual Studio 2012,不要应用 Service Pack 2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2011-01-19
    • 2011-07-29
    • 2012-07-08
    • 2011-08-22
    • 2010-12-13
    相关资源
    最近更新 更多