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- にあります。 error-error-in-omf-type-in​​formation

編集:関数スコープ外で定義されたクラスが適切に機能することを十分に認識しています。

Edit2: この問題に関して Microsoft に既に提出され、承認されているバグへの参照は、受け入れられる回答になるのに大いに役立ちます。私はすでに1つを検索しましたが、何も見つかりませんでした。

4

2 に答える 2

1

これはバグです。VS2008 にもありますが、VS2012 で修正されたため、フィードバック記事はすぐに閉じられます。

回避策は困難です。デバッガーには、このの型情報がありません。それはまた、時計の表現の幽霊をあきらめさせます. 技術的には、Debug + Windows + Memory + Memory1 を使用して、Address 式に「this」と入力できます。「somevarname」は最初のメンバーであり、構造体には v テーブルがないため、値を見つけるのに問題はありません。明らかに、これはあまりうまくスケーリングしません。

于 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 に答える