it-swarm-eu.dev

Wie wird ein dynamisch zugewiesenes Array im Visual Studio-Debugger angezeigt?

Wenn Sie ein statisch zugewiesenes Array haben, kann der Visual Studio-Debugger problemlos alle Array-Elemente anzeigen. Wenn Sie jedoch ein Array dynamisch zugewiesen haben und mit einem Zeiger darauf zeigen, wird nur das erste Element des Arrays angezeigt, wenn Sie auf das + klicken, um es zu erweitern. Gibt es eine einfache Möglichkeit, den Debugger zu informieren und mir diese Daten als Array des Typs Foo und der Größe X anzuzeigen?

142
Adam Rosenfield

Ja einfach sag du hast

char *a = new char[10];

schreiben im Debugger:

a,10

würde Ihnen den Inhalt so anzeigen, als wäre es ein Array.

187
shoosh

Es gibt zwei Methoden zum Anzeigen von Daten in einem Array m4x4:

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
};

Eine Möglichkeit ist mit einem Watch-Fenster (Debug/Windows/Watch). Füge watch = hinzu

m4x4,16

Dies zeigt Daten in einer Liste an:

enter image description here

Ein anderer Weg ist mit einem Speicherfenster (Debug/Windows/Memory). Geben Sie eine Startadresse für den Speicher an =

m4x4

Dies zeigt Daten in einer Tabelle an, die für zwei- und dreidimensionale Matrizen besser ist:

enter image description here

Klicken Sie mit der rechten Maustaste auf das Speicherfenster, um zu bestimmen, wie die Binärdaten angezeigt werden. Die Auswahlmöglichkeiten sind auf Ganzzahlen, Gleitkommazahlen und einige Textcodierungen beschränkt.

32
Riaz Rizvi

Fügen Sie in einem Überwachungsfenster nach dem Namen des Arrays und der Anzahl der Elemente, die angezeigt werden sollen, ein Komma hinzu.

21
Drealmer

ein erneuter besuch:

nehmen wir an, Sie haben einen unteren Zeiger:

double ** a; // assume 5*10

dann können Sie unten in Visual Studio Debug Watch schreiben:

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

dadurch wird es in ein Array wie unten umgewandelt, und Sie können alle Inhalte auf einmal anzeigen.

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

Zum,

int **a; //row x col

fügen Sie dies hinzu, um zu sehen

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

Ein weiterer Weg, dies zu tun, ist hier in MSDN angegeben.

Kurz gesagt, Sie können ein Zeichenarray als mehrere Arten von Zeichenfolgen anzeigen. Wenn Sie ein Array haben, das wie folgt deklariert wurde:

char *a = new char[10];

Sie können es wie folgt als Unicode-Zeichenfolge im Überwachungsfenster drucken:

a,su

In den Tabellen auf der MSDN-Seite finden Sie alle möglichen Konvertierungen, da es einige gibt. Viele verschiedene String-Varianten, Varianten zum Drucken einzelner Elemente im Array usw.

4
Taylor Price

Für MFC-Arrays (CArray, CStringArray, ...) folgen Sie dem nächsten Link in Tipp 4

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

Fügen Sie beispielsweise für "CArray pArray" im Überwachungsfenster hinzu

     pArray.m_pData,5 

um die ersten 5 Elemente zu sehen.

Wenn pArray ein zweidimensionales CArray ist, können Sie mit der folgenden Syntax alle Elemente der zweiten Dimension anzeigen:

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

Sie finden eine Liste vieler Dinge, die Sie mit Variablen im Überwachungsfenster in diesem Juwel tun können, in den Dokumenten: https://msdn.Microsoft.com/en-us/library/75w45ekt.aspx

Für eine Variable a gibt es die Dinge, die bereits in anderen Antworten erwähnt sind

a,10 
a,su 

aber es gibt noch eine ganze Reihe anderer Spezifizierer für Format und Größe, wie zum Beispiel:

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

Ich habe keine Möglichkeit gefunden, dies mit einem mehrdimensionalen Array zu verwenden. Sie können aber zumindest (wenn Sie den Index Ihres gewünschten Eintrags kennen) eine Uhr zu einem bestimmten Wert hinzufügen. Verwenden Sie einfach den Index-Operator.

Für ein Array mit dem Namen current, das ein Array mit dem Namen Attribs enthält, das ein Array mit dem Namen Attrib enthält, sollte es folgendermaßen aussehen, wenn Sie Position 26 haben möchten:

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

Sie können auch einen Offset verwenden

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

wird ne "nächste" 25 elemente anzeigen. (Ich verwende VS2008, dies zeigt nur maximal 25 Elemente).

0
wog