Comment afficher un tableau alloué dynamicment dans le débogueur Visual Studio?

Si vous avez un tableau alloué de manière statique, le débogueur Visual Studio peut facilement afficher tous les éléments du tableau. Cependant, si un tableau est alloué dynamicment et pointé par un pointeur, il affichera uniquement le premier élément du tableau lorsque vous cliquerez sur + pour le développer. Existe-t-il un moyen facile de dire au débogueur, affichez-moi 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]; 

écrire 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 des manières consiste à utiliser une fenêtre de surveillance (Debug / Windows / Watch). Ajouter montre =

 m4x4,16 

Cela affiche les données dans une liste:

entrer la description de l'image ici

Une autre façon consiste à utiliser une fenêtre de 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 masortingces à deux et trois dimensions:

entrer la description de l'image ici

Cliquez avec le bouton droit sur la fenêtre Mémoire pour déterminer comment les données binarys sont visualisées. Les choix sont limités aux entiers, aux flottants et à certains encodages de texte.

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

une visite:

supposons que vous ayez un pointeur ci-dessous:

 double ** a; // assume 5*10 

alors vous pouvez écrire ci-dessous dans la surveillance de débogage de Visual Studio:

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

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

 double[5][10] a; 

Pour,

 int **a; //row x col 

ajoutez ceci à regarder

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

Une autre manière de procéder 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 la forme d’une 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. Nombreuses variantes de chaînes, variantes pour imprimer des éléments individuels dans le tableau, etc.

Pour les tableaux MFC (CArray, CSsortingngArray, …) suivant le lien suivant dans son Astuce n ° 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 de surveillance

  pArray.m_pData,5 

pour voir les 5 premiers éléments.

Si pArray est un tableau à deux dimensions, 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 

Vous pouvez trouver une liste de nombreuses choses que vous pouvez faire avec les variables dans la fenêtre de surveillance de 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 pour le 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) 

Je n’ai pas trouvé le moyen de l’utiliser avec un tableau multidimensionnel. Mais vous pouvez au moins (si vous connaissez l’index de votre entrée souhaitée) append une montre à une valeur spécifique. Il suffit d’utiliser l’opérateur d’index.

Pour un tableau nommé current, qui a un tableau nommé Atsortingbs à l’intérieur, qui a un tableau nommé Atsortingb à l’intérieur, il devrait ressembler à ceci si vous voulez avoir la position 26:

 ((*((*current).Atsortingbs)).Atsortingb)[26] 

Vous pouvez également utiliser un décalage

 ((*((*current).Atsortingbs)).Atsortingb)+25 

affichera ne “next” 25 éléments. (J’utilise VS2008, cela ne montre que 25 éléments maximum).