2009-04-20 8 views
21

Si j'ai une DLL (qui a été construite en mode release) et le fichier PDB correspondant, est-il possible de déboguer (pas à pas) les classes/méthodes contenues dans cette DLL?Débogage d'une version finale d'une DLL (avec fichier PDB)

Si oui, quelles sont les étapes/configurations requises (par exemple, où placer le fichier PDB)?

Edit:

Si avoir le fichier PDB au même endroit que la DLL (dans le répertoire bin/debug d'une application de test simple de la console). Je peux voir que les symboles pour la DLL sont chargés (dans la fenêtre de sortie et également dans la fenêtre de modules), mais je ne peux toujours pas entrer dans les méthodes de cette DLL.

Cela pourrait-il être le résultat d'optimisations de compilateur (comme décrit par Michael dans sa réponse)?

Répondre

5

J'ai finalement trouvé ce qui cause les problèmes de débogage une DLL qui a été construit dans la configuration de sortie:

Tout d'abord, il fonctionne essentiellement comme prévu. Ce qui veut dire que si j'ai une DLL construite dans release-configuration plus le fichier PDB correspondant, alors je peux déboguer les classes/méthodes contenues dans cette DLL.

Lorsque j'ai essayé cela pour la première fois, j'ai malheureusement essayé d'entrer dans les méthodes d'une classe qui a le DebuggerStepThroughAttribute, e.g:

[System.Diagnostics.DebuggerStepThrough] 
public class MyClass { 
    public void Test() { ... } 
} 

Dans ce cas, il est bien sûr pas possible d'entrer dans le procédé à partir du débogueur (comme prévu/prévu).

Tout fonctionne comme prévu. Merci beaucoup pour vos réponses.

14

Le pdb est habituellement (pour moi au moins) détecté s'il est à côté de la DLL (comme avec les fichiers xml intellisense).

En variante; vous aurez besoin d'un point de rupture après le chargement du module ...

Au point d'arrêt, faites apparaître la fenêtre "Modules" (Ctrl + D, M - ou Déboguer-> Windows-> Modules). Clic droit sur votre dll "Charger les symboles de", "Chemin de symbole", etc.

+2

Le PDB est à côté de la DLL, les symboles sont chargés, mais je ne peux toujours pas entrer dans les méthodes. Une idée? – M4N

5

Oui, vous pouvez déboguer le code de version avec un PDB. Il y a cependant quelques pièges avec le code optimisé de débogage, plus d'infos here et here.

Votre PDB doit juste être dans un endroit que le débogueur peut trouver - pour le débogage local même répertoire que la DLL est généralement plus facile. Sinon, placez-le à un endroit que le débogueur peut trouver, et pointez le débogueur à cet endroit avec le chemin du symbole.

2

Le débogage d'une version de publication est généralement beaucoup plus difficile que le débogage d'une version de débogage. En général, vous aurez besoin de comprendre l'assembleur x86 et vous passerez probablement un peu de temps à regarder la fenêtre de désassemblage. Cela a tendance à être la seule façon de déterminer quelle ligne de code vous êtes réellement, car dans une version de build avec des optimisations sur le compilateur, vous pouvez effectuer des réajustements significatifs d'instructions et d'instructions. En outre, je trouve que le débogueur ne parvient pas souvent à signaler correctement les valeurs des variables. Si vous avez besoin de connaître la valeur d'une variable et que vous n'êtes pas sûr que le débogueur est correct, allez dans la fenêtre de désassemblage et recherchez l'emplacement de mémoire.

Les fichiers pdb peuvent être stockés dans un serveur de symboles. Découvrez Setting up a Symbol Server pour un bon tutoriel. Chaque produit que nous construisons sur une machine de construction publie les symboles sur notre serveur de symboles, de sorte que nous pouvons toujours déboguer les vidages sur incident que nous recevons de WinQual.

Questions connexes