0

在 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- omf 类型信息中的错误错误

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

编辑 2:在此问题上对已向 Microsoft 提交并确认的错误的引用将大大有助于成为公认的答案。我已经搜索了一个,但没有找到。

4

2 回答 2

1

这是一个错误,VS2008 也有,但在 VS2012 中已修复,因此他们肯定会很快关闭您的反馈文章。

解决方法将很困难,调试器没有this的类型信息。这也让它放弃了手表表情上的鬼魂。从技术上讲,您可以使用 Debug + Windows + Memory + Memory1 并在地址表达式中键入“this”。“somevarname”是第一个成员,并且该结构没有 v-table,因此您可以轻松找到该值。显然,这不能很好地扩展。

于 2012-08-29T11:57:34.880 回答
0

将您的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;
}
于 2012-08-29T11:38:29.897 回答