如何在监视窗口中查看本地类成员的值?

How to see local class' member's value in Watch window?

本文关键字:成员 监视 窗口      更新时间:2023-10-16

在Visual C++2010中,请考虑以下内容:

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
  struct MyClass
  {
    MyClass() : mMember(0)
    {}
  void Func()
  {
    int tmp = 0;
    tmp++;
  }
  private:
    int mMember;
  };
  MyClass inst;
  inst.Func();
    return 0;
}

进入Func()并转到Watches窗格并监视成员变量mMember。你将看到错误,而不是它的值

CXX0033:错误:OMF类型信息中有错误

是否可以让调试器显示成员的值?如果是,如何?我知道这可能是一个错误,我已经在Microsoft Connect上报告了它,我现在正在寻找一个解决方法(不涉及将定义移动到功能范围之外),并解释为什么会发生这种情况。我提交的错误报告可以在这里找到:https://connect.microsoft.com/VisualStudio/feedback/details/760149/visual-c-2010-cant-view-local-class-members-in-debugger-cxx0033-error-error-in-omf-type-information

编辑:我完全知道在函数范围之外定义的类可以正常工作。

第二版:引用一个已经提交并承认的错误给微软,这将大大有助于成为一个公认的答案。我已经找了一个,但没有找到。

这是一个错误,VS2008也有,但它在VS2012中得到了修复,所以他们肯定会很快关闭你的反馈文章。

解决方法会很困难,调试器没有this的类型信息。这也让它放弃了手表上的幽灵表情。从技术上讲,您可以使用Debug+Windows+Memory+Memory1并在Address表达式中键入"this"。"somevarname"是第一个成员,并且该结构没有v-table,因此您可以毫不费力地找到值。显然,这不是很好的规模。

MyClass结构放在主循环之外。否则,调试信息无法正确生成。通过移动它,您可以正常调试它的成员。如果不这样做,我不认为有任何方法可以调试该类的成员。因此,为了回答您的问题,不,据我所知,没有其他方法可以调试本地类/结构。

struct MyClass
{
   MyClass(/*int & aY*/) : 
//y(aY)
somevarname(0)
{}
void abc()
{
   int asdf = 0;
   asdf++;
}
private:
   //int & y;
   int somevarname;
} ;
int _tmain(int argc, _TCHAR* argv[])
{

   MyClass implInst;
   implInst.abc();
   return 0;
}