2009-02-05 4 views
3

J'ai utilisé UMDH une douzaine de fois auparavant, jamais avec aucun problème. Soudain, je n'ai pas de noms de fonctions dans les traces de la pile dans mes fichiers de vidage - juste une série d'adresses.Qu'est-ce qui empêche UMDH de donner des traces de pile?

J'ai ust permis:

gflags exe_name + ust

Je commence exe_name, alors je ne

umdh: pid one.txt umdh: pid deux .txt

Je regarde one.txt et two.txt et ils n'ont aucune indication d'où ils viennent. Quand je fais la diff

umdh one.txt two.txt> diff.txt

le résultat est pas utile.

Aide, j'adore cet outil.

Répondre

0

Le mappage entre les adresses exécutables et les noms de fonctions est défini dans les PDB.

Assurez-vous que votre chemin de symbole est correctement défini,
surtout si vous un UMDH en cours d'exécution sur une autre machine que celle qui a compilé le code.

3

UMDH fait l'association PDB lorsque vous faites la commande:

umdh -d one.txt two.txt -f: OutputFile.txt

Pas quand vous prenez l'origine des clichés. Vous devez le laisser faire la diff pour vous! Et, ouais ... vous devez avoir votre chemin de symbole correctement défini.

1

La syntaxe des commutateurs UMDH a été légèrement modifiée quelque part dans les dernières versions de debugging-tools-for-windows. Peut-être que c'est le problème. Effectuez les opérations suivantes -

umdh: pid ** - f: ** one.txt

umdh: pid ** - f: ** two.txt

umdh -v -l one.txt two.txt> diff.txt

(-l est un nouveau commutateur, qui extrait les fichiers et les numéros de ligne des PDB). Et encore, assurez-vous que la variable d'environnement _NT_SYMBOL_PATH inclut le chemin d'accès à votre PDB.

Les documents sont maintenant disponibles également online.

(EDIT :) le commutateur critique dans la comparaison, -v, est maintenant présent ...

(EDIT :) Vous n'avez pas spécifié votre environnement d'exploitation. It iswell known que sur VC8, malloc CRT a été compilé avec FPO - que UMDH ne peut pas surmonter.Il est également known (voir le commentaire de Pavel Lebedinsky) que UMDH ne peut pas gérer certains types d'allocateurs, par ex. SysAllocString. Si vous utilisez effectivement des allocateurs exotiques, vous pouvez essayer LeakDiag - il gère beaucoup plus d'entre eux.

Questions connexes