Si vous disposez d'un tableau alloué statiquement, le débogueur Visual Studio peut facilement afficher tous les éléments du tableau. Cependant, si vous disposez d'un tableau alloué dynamiquement et pointé par un pointeur, il n'affichera le premier élément du tableau que lorsque vous cliquez sur le + pour le développer. Existe-t-il un moyen simple de dire au débogueur, de me montrer ces données sous la forme d'un tableau de type Foo et de taille X?
Oui, simple. dis que tu as
char *a = new char[10];
écrit dans le débogueur:
a,10
vous montrerait le contenu comme s'il s'agissait d'un tableau.
Il existe deux méthodes pour afficher les données dans un tableau 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
};
Une façon consiste à utiliser une fenêtre de surveillance (Debug/Windows/Watch). Ajouter une montre =
m4x4,16
Cela affiche les données dans une liste:
Une autre façon est d'utiliser une fenêtre Mémoire (Debug/Windows/Memory). Spécifiez une adresse de début de mémoire =
m4x4
Cela affiche les données dans un tableau, ce qui est mieux pour les matrices bidimensionnelles et tridimensionnelles:
Cliquez avec le bouton droit sur la fenêtre Mémoire pour déterminer comment les données binaires sont visualisées. Les choix sont limités aux nombres entiers, flottants et certains encodages de texte.
Dans une fenêtre de surveillance, ajoutez une virgule après le nom du tableau et le nombre d'éléments que vous souhaitez afficher.
une revisite:
supposons que vous avez un pointeur ci-dessous:
double ** a; // assume 5*10
vous pouvez ensuite écrire ci-dessous dans la veille de débogage de Visual Studio:
(double(*)[10]) a[0],5
qui le jettera dans un tableau comme ci-dessous, et vous pouvez afficher tout le contenu en une seule fois.
double[5][10] a;
Pour,
int **a; //row x col
ajouter ceci pour regarder
(int(**)[col])a,row
Encore une autre façon de le faire est spécifiée ici dans MSDN .
En bref, vous pouvez afficher un tableau de caractères sous forme de plusieurs types de chaîne. Si vous avez un tableau déclaré comme:
char *a = new char[10];
Vous pouvez l'imprimer sous forme de chaîne unicode dans la fenêtre de surveillance avec les éléments suivants:
a,su
Voir les tableaux sur la page MSDN pour toutes les différentes conversions possibles car il y en a plusieurs. De nombreuses variantes de chaînes différentes, des variantes pour imprimer des éléments individuels dans le tableau, etc.
Pour les tableaux MFC (CArray, CStringArray, ...) en suivant le lien suivant dans son Astuce # 4
http://www.codeproject.com/Articles/469416/10-More-Visual-Studio-Debugging-Tips-for-Native-De
Par exemple pour "CArray pArray", ajoutez dans les fenêtres Watch
pArray.m_pData,5
pour voir les 5 premiers éléments.
Si pArray est un CArray bidimensionnel, vous pouvez regarder n'importe quel élément de la deuxième dimension en utilisant la syntaxe suivante:
pArray.m_pData[x].m_pData,y
Vous pouvez trouver une liste de beaucoup de choses que vous pouvez faire avec des variables dans la fenêtre de surveillance dans ce joyau dans les documents: https://msdn.Microsoft.com/en-us/library/75w45ekt.aspx
Pour une variable a, il y a les choses déjà mentionnées dans d'autres réponses comme
a,10
a,su
mais il y a beaucoup d'autres spécificateurs de format et de 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)
Je n'ai pas trouvé de moyen de l'utiliser 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é current, qui contient un tableau nommé Attribs à l'intérieur, qui a un tableau nommé Attrib à l'intérieur, il devrait ressembler à ceci si vous souhaitez avoir la position 26:
((*((*current).Attribs)).Attrib)[26]
Vous pouvez également utiliser un décalage
((*((*current).Attribs)).Attrib)+25
montrera les 25 éléments "suivants". (J'utilise VS2008, cela ne montre que 25 éléments maximum).