c++ fenetre Comment afficher un tableau alloué dynamiquement dans le débogueur Visual Studio?




débogueur c (8)

une revisite:

supposons que vous avez un pointeur ci-dessous:

double ** a; // assume 5*10

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

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

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

double[5][10] a;

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?


Answer #1

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 est avec une fenêtre de surveillance (Debug / Windows / Watch). Ajouter montre =

m4x4,16

Cela affiche les données dans une liste:

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

m4x4

Ceci affiche les données dans une table, ce qui est mieux pour les matrices à deux et trois dimensions:

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 entiers, aux flottants et à certains encodages de texte.


Answer #2

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.


Answer #3

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 de surveillance

     pArray.m_pData,5 

pour voir les 5 premiers éléments.

Si pArray est un CArray bidimensionnel, vous pouvez regarder n'importe lequel des éléments de la deuxième dimension en utilisant la syntaxe suivante:

     pArray.m_pData[x].m_pData,y

Answer #4

Pour,

int **a; //row x col

ajoutez ceci à regarder

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

Answer #5

Vous pouvez trouver une liste de beaucoup de choses que vous pouvez faire avec des variables dans la fenêtre de surveillance dans cette gemme dans les documents: MSDN

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)

Answer #6

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é current, qui a un tableau nommé Attribs inside, qui a un tableau nommé Attrib, 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 "next" 25 éléments. (J'utilise VS2008, cela montre seulement 25 éléments maximum).


Answer #7

Une autre façon de procéder est spécifiée ici dans MSDN .

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

char *a = new char[10];

Vous pouvez l'imprimer en tant que chaîne unicode dans la fenêtre de surveillance avec ce qui suit:

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.





debugging