【发布时间】: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 Mode 和C/C++ edit and continue。在此之后,断点被禁用并停止被击中。使用“Only Managed”调试器,断点被命中,但没有显示任何值。
最后,我使用“混合”调试器并使用__debugbreak() 强制中断。这导致仅当它们是本地汽车时才显示整数值;并且数据类型被正确提取。但是,std::string 或 CString 值不会显示,而是它们的类型显示在值列中。类似地,指针、类成员或函数参数值不会显示,类型信息、未定义值或超出范围会显示在值列中。
自动、本地和监视窗口以及鼠标悬停在符号上的行为是一致的。
在 VS2012 混合模式 C++/CLI MFC 应用程序的调试过程中,如何让原生数据类型显示它们的值。
我已阅读this question 并验证所有符号已加载到模块窗口中。
显然,Microsoft 是 aware of the issue,即将到来的更新 3 的 CTP 应该会修复它。
另外,为什么我需要使用__debugbreak()?
【问题讨论】:
-
@Per Lundberg - 非常感谢。确认更新 3 RC 解决了缓慢以及原生符号值。但是,必须手动将调试器更改为“仅限托管”,否则不会命中断点。使用
__debugbreak()中断时,不显示符号。
标签: visual-studio-2012 mfc c++-cli visual-studio-debugging mixed-mode