2008-09-16 10 views
125

Si vous avez un tableau alloué statiquement, le débogueur Visual Studio peut facilement afficher tous les éléments du tableau. Cependant, si vous avez un tableau alloué dynamiquement et pointé par un pointeur, il n'affiche que le premier élément du tableau lorsque vous cliquez sur le + pour le développer. Y at-il un moyen facile de dire au débogueur, montrez-moi ces données sous la forme d'un tableau de type Foo et de taille X?Comment afficher un tableau alloué dynamiquement dans le débogueur Visual Studio?

Répondre

169

Oui, simple. que vous avez

char *a = new char[10]; 

écrit dans le débogueur:

a,10 

vous montrerais le contenu comme si elle était un tableau.

+9

C'est un grand tour, mais si vos points de pointeur vers un tableau de structures, j'ai trouvé que les éléments individuels élargis avec « un , 10 "dans la fenêtre de la montre ne sont pas eux-mêmes extensible. Ce qui signifie que vous ne pouvez pas creuser dans le 3ème élément du tableau en utilisant cette méthode. Est-ce quelque chose qui peut être surmonté? – SirPentor

+0

@SirPentor J'ai le même problème. Avez-vous trouvé une solution? – becko

+0

@ becko - négatif. C'est frustrant. – SirPentor

19

Dans une fenêtre de surveillance, ajoutez une virgule après le nom du tableau et la quantité d'éléments que vous souhaitez afficher.

0

Je n'ai pas trouvé un moyen d'utiliser ceci avec un tableau multidimensionnel. Mais vous pouvez au moins (si vous connaissez l'index de votre entrée souhaitée) ajouter une montre à une valeur spécifique. Utilisez simplement l'opérateur d'index.

Pour un tableau nommé en cours, qui a un tableau nommé Attribs à l'intérieur, qui a un tableau Attrib nommé à l'intérieur, il devrait ressembler à ceci si vous voulez avoir à la position 26:

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

Vous pouvez également utiliser un décalage

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

montrera ne "suivant" 25 éléments. (J'utilise VS2008, cela montre seulement 25 éléments maximum).

1

Pour les tableaux MFC (Carray, CStringArray, ...) suivant le lien suivant dans son Conseil n ° 4

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

Par exemple, pour "CArray parray", ajouter dans les fenêtres Suivre

 pArray.m_pData,5 

pour voir les 5 premiers éléments.

Si parray est deux dimensions CArray vous pouvez regarder l'un des éléments de la deuxième dimension en utilisant la syntaxe suivante:

 pArray.m_pData[x].m_pData,y 
9

une nouvelle visite:

supposons que vous avez un pointeur ci-dessous:

double ** a; // assume 5*10 

alors vous pouvez écrire ci-dessous montre de débogage Visual studio:

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

qui va le lancer dans un tableau comme ci-dessous, et vous pouvez voir tous les contenus en une seule fois.

double[5][10] a; 
27

Il existe deux méthodes pour afficher les données dans un m4x4 tableau:

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

Une façon est une fenêtre Espion (Debug/Windows/Watch). Ajouter montre =

m4x4,16 

Cette affiche des données dans une liste:

enter image description here

Une autre façon est une fenêtre de mémoire (Debug/Windows/mémoire). Indiquez une adresse de début de mémoire =

m4x4 

Cette affiche des données dans une table, ce qui est mieux pour deux et trois matrices dimensions:

enter image description here

Faites un clic droit sur la fenêtre de mémoire pour déterminer la les données binaires sont visualisées. Les choix sont limités aux entiers, aux flottants et à certains encodages de texte.

4

Encore une autre façon de faire est spécifié ici dans MSDN.

En résumé, vous pouvez afficher un tableau de caractères sous plusieurs types de chaîne. Si vous avez un tableau déclaré que:

char *a = new char[10]; 

Vous pouvez l'imprimer comme une chaîne de caractères Unicode dans la fenêtre montre ce qui suit:

a,su 

Voir les tableaux de la page MSDN pour tous les différentes conversions possibles car il y en a pas mal. De nombreuses variantes de chaîne, des variantes d'imprimer des éléments individuels dans le tableau, etc.

+1

A partir du lien MSDN que vous avez donné - 'a, [10]' vous permet de voir les éléments individuels afin qu'ils soient eux-mêmes extensibles, même si vous avez un CArray de types de données complexes. – LThode

1

Vous pouvez trouver une liste de choses que vous pouvez faire avec des variables dans la fenêtre de la montre dans ce petit bijou dans la documentation: https://msdn.microsoft.com/en-us/library/75w45ekt.aspx

pour une une variable, il y a des choses déjà mentionnées dans d'autres réponses comme

a,10 
a,su 

mais il y a beaucoup d'autres pour spécificateurs format et la taille, comme:

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) 
3

Pour,

int **a; //row x col 

ajouter ce à regarder

(int(**)[col])a,row 
Questions connexes