Question

Les fans de Windbg affirment qu’il est assez puissant et j’ai tendance à être d’accord. Mais quand il s'agit de déboguer des conteneurs STL, je suis toujours bloqué. Si la variable est sur la pile, l’extension !stl le détermine parfois, mais quand un conteneur de type complexe (par exemple std::vector<TemplateField, std::allocator<TemplateField> >) se trouve sur le tas ou dans une partie d’une autre structure, je ne sais tout simplement pas comment pour afficher son contenu.

Appréciez les astuces, les pointeurs.

Était-ce utile?

La solution

Vous pouvez également essayer cet extension du débogueur . Il s'agit d'une bibliothèque appelée SDbgExt, développée par Skywing .

Autres conseils

Je trouve souvent que le support du débogueur pour les types de données STL est inadéquat. Pour cette raison, j'utilise de plus en plus la consignes de consignation et instructions . J'avais l'habitude de penser que ceux-ci sont destinés aux personnes qui ne peuvent pas utiliser un débogueur, mais je me rends maintenant compte qu'ils offrent une réelle valeur. Ils vous permettent d'intégrer des connaissances de débogage portables dans votre code et de les conserver en même temps que le code. En revanche, le travail que vous effectuez dans le débogueur est généralement éphémère.

L'extension Python pour WinDbg (pykd) a un extrait stlp.py qui peut vider le contenu de la carte.
Actuellement, il prend en charge la mise en œuvre de la carte STLPort. Testé sur x86 et x64. Cet article montre comment l'utiliser (en russe). , mais, les exemples s’expliquent d'eux-mêmes).

J'ai eu exactement la même question il y a quelque temps. Ma réponse est que Visual Studio est vraiment un meilleur débogueur pour les types STL et complexes (tout comme Visual Studio n’est en fait qu’un meilleur débogueur que MDbg).

Cela ne veut pas dire que WinDBG est moins puissant, mais qu’il est de niveau inférieur (par exemple, essayez de faire quelque chose d’utile avec les vidages sur mémoire avec Visual Studio - vous ne pouvez pas le faire).

Quoi qu'il en soit, pour répondre à votre question, vous pouvez utiliser Visual Studio pour examiner les types de données à l'aide de quelques astuces:

  1. Démarrez une autre instance de WinDBG, attachez de manière non invasive: cdb -p <PID> -pv. Cela va suspendre les discussions du débugé. Vous pouvez maintenant détacher en toute sécurité le fichier WinDBG d'origine qd
  2. Associez-y Visual Studio, puis détachez le WinDBG non invasif <=>. Regardez la STL et continuez comme vous le souhaitez.
  3. Si vous devez revenir à WinDBG, passez à l’étape 1, puis remplacez-le par un WinDBG invasif.

Je finis généralement par appliquer une méthode toString() dans bon nombre de mes cours. Cela montre toutes les informations que j’estime importantes. Tous les conteneurs peuvent ensuite appeler cela pour afficher les informations sur la classe dans la console

Utilisez dt -r i.e dt yourapp! class 7ffdf000 -r5

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top