2009-06-30 25 views
3

Je voudrais changer la façon dont certains types sont affichés en utilisant 'dt' ou '??' d'une manière similaire à la façon dont vous pouvez le faire avec autoexp.dat. Y a-t-il un moyen de faire cela?est-ce que cdb/windbg a un équivalent à autoexp.dat?

Par exemple, j'ai une structure quelque chose comme ceci:


struct Foo 
{ 
    union Bar 
    { 
     int a; 
     void *p; 
    } b; 
}; 

Et j'ai un tableau de quelques centaines d'entre eux, tous que je connais le point à une structure Bar. Y at-il un moyen de dire à cdb que, dans cette expression de toute façon, ce 'p' est un pointeur sur Bar? C'est le genre de chose que vous pourriez faire avec autoexp. (L'exemple concret ici est que j'ai une stashtable qui peut avoir des clés de n'importe quel type, mais je sais que les clés sont des chaînes, l'implémentation les stocke comme des pointeurs vides).

Merci d'avance!

Répondre

2

Je ne pense pas qu'il y ait quelque chose d'aussi simple que autoexp.dat. Vous avez quelques options potentielles - vous pouvez écrire un simple fichier de script avec les commandes du débogueur pour vider la structure de données comme vous le souhaitez et utiliser la commande "$<filename" (ou l'une de ses variantes). Combiné avec des alias d'utilisateur, vous pouvez obtenir cela pour être assez facile et naturel à utiliser.

La deuxième option est un peu plus impliquée, mais avec elle vient beaucoup plus de puissance - écrire une DLL d'extension qui déverse votre structure de données. Pour quelque chose comme ce dont vous parlez, c'est probablement exagéré. Mais vous avez un pouvoir énorme avec les extensions de débogueur (en fait, une grande partie de la puissance qui vient dans le paquet Outils de débogage est implémentée de cette façon). Le SDK est fourni avec le débogueur, il est donc facile de déterminer si c'est ce dont vous avez besoin.

1

Vous pouvez dire du ou da pour l'avoir dump memory en tant que chaînes unicode ou ascii.

+0

Si j'ai un tableau qui a un élément pointant vers une chaîne qui est ailleurs dans la mémoire, puis-je invoquer 'da' sur l'adresse de ce pointeur dans le cadre de l'impression du tableau? – aaron

+0

Si vous connaissez l'adresse de début du tableau, vous devriez être capable de calculer le décalage de l'adresse de départ à l'élément que vous voulez (sizeof (struct) * i) et ensuite ajouter le décalage de l'élément (DWORD aligné) dans le struct. Vous pouvez également faire dt -r sur l'adresse de la structure pour que le débogueur vorte récursivement tous les membres. –