web-dev-qa-db-ja.com

Visual Studioデバッガーで動的に割り当てられた配列を表示する方法は?

静的に割り当てられた配列がある場合、Visual Studioデバッガーはすべての配列要素を簡単に表示できます。ただし、配列が動的に割り当てられ、ポインターによってポイントされている場合は、+をクリックして展開したときに配列の最初の要素のみが表示されます。デバッガに伝える簡単な方法はありますか、このデータをFoo型とサイズXの配列として表示しますか?

142
Adam Rosenfield

はい、簡単です。あなたが持っていると言います

char *a = new char[10];

デバッガーでの書き込み:

a,10

配列のようにコンテンツを表示します。

187
shoosh

配列m4x4のデータを表示するには、2つの方法があります。

float m4x4[16]={
    1.f,0.f,0.f,0.f,
    0.f,2.f,0.f,0.f,
    0.f,0.f,3.f,0.f,
    0.f,0.f,0.f,4.f
};

1つの方法は、ウォッチウィンドウ(デバッグ/ウィンドウ/ウォッチ)を使用することです。ウォッチを追加=

m4x4,16

これにより、リストにデータが表示されます。

enter image description here

別の方法は、メモリウィンドウ(デバッグ/ Windows /メモリ)を使用することです。メモリ開始アドレスを指定=

m4x4

これは、2次元および3次元のマトリックスに適したテーブルにデータを表示します。

enter image description here

[メモリ]ウィンドウを右クリックして、バイナリデータの視覚化方法を決定します。選択肢は、整数、浮動小数点数、および一部のテキストエンコーディングに制限されています。

32
Riaz Rizvi

監視ウィンドウで、配列の名前の後にカンマを追加し、表示するアイテムの量を追加します。

21
Drealmer

再訪:

以下のポインタがあると仮定しましょう:

double ** a; // assume 5*10

次に、Visual Studioのデバッグウォッチで以下を書くことができます:

(double(*)[10]) a[0],5

以下のような配列にキャストされ、すべてのコンテンツを一度に表示できます。

double[5][10] a;
10
Gengpu Liu

ために、

int **a; //row x col

これをウォッチに追加

(int(**)[col])a,row
5
vicky

これを行う別の方法は、ここで [〜#〜] msdn [〜#〜] で指定されています。

つまり、文字配列をいくつかのタイプの文字列として表示できます。次のように宣言された配列がある場合:

char *a = new char[10];

以下を使用して、ウォッチウィンドウにUnicode文字列として出力できます。

a,su

かなりの数があるため、可能なすべての異なる変換については、MSDNページの表を参照してください。多くの異なる文字列バリアント、配列内の個々のアイテムを印刷するバリアントなど。

4
Taylor Price

ヒント#4の次のリンクに続くMFC配列(CArray、CStringArray、...)の場合

http://www.codeproject.com/Articles/469416/10-More-Visual-Studio-Debugging-Tips-for-Native-De

たとえば、「CArray pArray」の場合、ウォッチウィンドウに追加します

     pArray.m_pData,5 

最初の5つの要素を確認します。

PArrayが2次元CArrayの場合、次の構文を使用して2番目の次元の任意の要素を見ることができます。

     pArray.m_pData[x].m_pData,y
1
dabinsi

ドキュメントのこのgemのウォッチウィンドウで、変数を使用して実行できる多くのことのリストを見つけることができます。 https://msdn.Microsoft.com/en-us/library/75w45ekt.aspx

変数aについては、他の回答で既に述べたことがあります。

a,10 
a,su 

しかし、フォーマットやサイズには他にも次のような指定子がたくさんあります。

a,en (shows an enum value by name instead of the number)
a,mb (to show 1 line of 'memory' view right there in the watch window)
1
Legolas

多次元配列でこれを使用する方法を見つけていません。ただし、少なくとも(目的のエントリのインデックスがわかっている場合)特定の値にウォッチを追加できます。インデックス演算子を使用するだけです。

内部にAttribsという名前の配列があり、内部にAttribという名前の配列があるcurrentという名前の配列の場合、26を配置する必要がある場合は次のようになります。

((*((*current).Attribs)).Attrib)[26]

オフセットを使用することもできます

((*((*current).Attribs)).Attrib)+25

「次の」25個の要素が表示されます。 (VS2008を使用していますが、これは最大25個の要素のみを示しています)。

0
wog