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


144

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

回答:


196

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

char *a = new char[10];

デバッガで書く:

a,10

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


10
これはすばらしいトリックですが、ポインタが構造の配列をポイントしている場合、ウォッチウィンドウで "a、10"で展開された個々の要素自体は展開できないことがわかりました。つまり、このメソッドを使用して配列の3番目の要素を掘り下げることはできません。それは克服できるものですか?
SirPentor

@SirPentor同じ問題があります。解決策を見つけましたか?
becko 2012

@ becko--否定。それはイライラさせられます。
SirPentor 2012

うわー、構造には役に立たない、値ではなく変数の名前を見ることができる
Icebone1000

2
初心者向け: "a"変数を選択し、右クリックして監視リストに追加(検査)、監視値のリストでデバッガービューを開いた場合(現在、ウィンドウの名前が見つからない)、 「a」をダブルクリックして、「a、X」という名前に変更できます。Xはアイテムの数です。すべての値が表示されます。
-darkgaze

33

配列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つの方法は、ウォッチウィンドウ(デバッグ/ Windows /ウォッチ)を使用することです。ウォッチを追加=

m4x4,16

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

ここに画像の説明を入力してください

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

m4x4

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

ここに画像の説明を入力してください

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


21

監視ウィンドウで、配列の名前の後にコンマを追加し、表示する項目の数を追加します。


10

再訪:

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

double ** a; // assume 5*10

次に、Visual Studioデバッグウォッチで以下を記述できます。

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

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

double[5][10] a;


4

これを行う別の方法は、MSDNで指定されています

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

char *a = new char[10];

次のようにして、ウォッチウィンドウでUnicode文字列として出力できます。

a,su

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


1
提供したMSDNリンクから- a,[10]複雑なデータ型のCArrayがある場合でも、個々の要素を表示して、それら自体を拡張可能にすることができます。
LThode

1

ヒント#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

変数で実行できる多くのことのリストは、この宝石のウォッチウィンドウのドキュメントにあります。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)

0

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

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.