Partager via


Utilisation de PDBCopy

PDBCopy est un outil en ligne de commande qui crée un fichier de symboles supprimé à partir d’un fichier de symboles complet. En d’autres termes, il prend un fichier de symboles qui contient à la fois des données de symboles privés et une table de symboles publics, et crée une copie de ce fichier qui contient uniquement la table de symboles publics. Selon les options PDBCopy utilisées, le fichier de symboles supprimés contient la totalité de la table de symboles publics ou un sous-ensemble spécifié de la table de symboles publics.

Pour connaître l’emplacement de PDBCopy dans le WDK, consultez Répertoire d’installation dans Outils inclus dans outils de débogage pour Windows.

PDBCopy fonctionne avec n’importe quel fichier de symboles au format PDB (avec l’extension de nom de fichier .pdb), mais pas avec les fichiers de symboles de format plus ancien (.dbg).

Pour obtenir une description des tables de symboles publics et des données de symboles privés, consultez Symboles publics et privés.

Suppression des symboles privés

Si vous souhaitez créer un fichier de symboles dépouillé qui contient tous les symboles publics et aucun des symboles privés, utilisez PDBCopy avec trois paramètres : le chemin et le nom du fichier de symboles d’origine, le chemin et le nom du nouveau fichier de symboles et l’option -p.

Par exemple, la commande suivante crée un fichier nommé publicymbols.pdb, qui contient la même table de symboles publics que mysymbols.pdb, mais ne contient aucune des données de symboles privés :

pdbcopy mysymbols.pdb publicsymbols.pdb -p

Si mysymbols.pdb est déjà un fichier de symboles supprimé, le contenu symbolique du nouveau fichier et de l’ancien fichier sera identique.

Après avoir émis cette commande, vous devez déplacer le nouveau fichier vers un nouvel emplacement et le renommer en le nom d’origine du fichier de symboles (dans cet exemple, mysymbols.pdb), car la plupart des programmes de débogage et des programmes d’extraction de symboles recherchent des symboles basés sur un nom de fichier spécifique. Vous pouvez également utiliser le même nom de fichier pour le fichier d’entrée et le fichier de sortie sur la ligne de commande PDBCopy, à condition que différents répertoires soient spécifiés :

pdbcopy c:\dir1\mysymbols.pdb c:\dir2\mysymbols.pdb -p

Note Le fichier de destination ne doit pas exister avant l’exécution de PDBCopy. S’il existe un fichier portant ce nom, diverses erreurs peuvent se produire.

Suppression des symboles privés et des symboles publics sélectionnés

Si vous souhaitez non seulement supprimer les données de symboles privés, mais également réduire la quantité d’informations dans la table de symboles publics, vous pouvez utiliser l’option -f pour spécifier une liste de symboles publics à supprimer.

L’exemple suivant illustre cette procédure :

  1. Déterminez les noms complets, y compris les décorations, des symboles que vous souhaitez supprimer. Si vous n’êtes pas sûr des noms de symboles décorés, vous pouvez utiliser l’outil DBH pour les déterminer. Pour plus d’informations, consultez Détermination des décorations d’un symbole spécifique. Dans cet exemple, supposons que les noms décorés des symboles que vous souhaitez supprimer sont _myGlobal1 et _myGlobal2.

  2. Créez un fichier texte contenant une liste des symboles à supprimer. Chaque ligne de ce fichier doit inclure le nom d’un symbole, y compris les décorations, mais pas les noms de module. Dans cet exemple, le fichier contient les deux lignes suivantes :

    _myGlobal1
    _myGlobal2
    

    Le fichier peut recevoir n’importe quel nom de votre choix. Supposons que vous nommez ce fichier listfile.txt et que vous le placez dans le répertoire C:\Temp.

  3. Utilisez la ligne de commande PDBCopy suivante :

    pdbcopy OldPDB NewPDB -p -f:@TextFile
    

    OldPDB et NewPDB sont le fichier de symboles d’origine et le nouveau fichier de symboles, et TextFile est le fichier créé à l’étape 2. L’option -f indique que certains symboles publics doivent être supprimés, et l’esperluette ( @ ) indique que ces symboles sont répertoriés dans le fichier texte spécifié.

    Dans l’exemple actuel, la commande se présente comme suit :

    pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:@c:\temp\listfile.txt
    

    Cela crée un fichier de symboles, C:\dir3\mysymbols.pdb, qui ne contient pas de symboles privés et ne contient pas les deux variables globales répertoriées dans listfile.txt.

Comme indiqué dans cet exemple, l’option -f de PDBCopy supprime une liste spécifique de symboles publics. L’esperluette ( @ ) indique que ces symboles sont répertoriés dans un fichier texte. Une autre méthode consiste à répertorier tous les symboles sur la ligne de commande, à l’aide de l’option -f sans esperluette. Par conséquent, la ligne de commande suivante est équivalente à l’exemple de la procédure ci-dessus :

pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:_myGlobal1 -f:_myGlobal2

À moins que vous ne souhaitiez supprimer qu’un ou deux symboles, il est plus simple d’utiliser un fichier texte que de les répertorier sur la ligne de commande.

Si vous souhaitez supprimer la majorité des symboles publics de votre fichier .pdb, l’option -F est la méthode la plus simple. Bien que l’option -f vous oblige à répertorier les symboles publics que vous souhaitez supprimer, l’option -F vous oblige à répertorier les symboles publics que vous ne souhaitez pas supprimer. Tous les autres symboles publics (ainsi que tous les symboles privés) seront supprimés. L’option -F prend en charge les deux mêmes options de syntaxe que l’option -f : -F: suivi du nom d’un symbole à conserver, ou -F:@ suivi du nom d’un fichier texte qui contient une liste des symboles à conserver. Dans les deux cas, les noms de symboles décorés doivent être utilisés.

Par exemple, la commande suivante supprime tous les symboles privés et presque tous les symboles publics, en laissant uniquement les symboles _myFunction5 et _myGlobal7 :

pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:_myFunction5 -F:_myGlobal7

Si vous combinez plusieurs instances de l’option -f sur une seule ligne, tous les symboles spécifiés sont supprimés. Si vous combinez plusieurs instances de l’option -F sur une seule ligne, tous les symboles spécifiés sont conservés et tous les autres symboles sont supprimés. Vous ne pouvez pas combiner -f avec -F.

Les options -f et -F ne peuvent pas être utilisées sans l’option -p, qui supprime toutes les données de symbole privé. Même si votre fichier d’origine ne contient aucun symbole privé, vous devez toujours inclure l’option -p (bien qu’elle n’ait aucun effet dans ce cas).

L’option -F ne peut pas être utilisée pour empêcher la suppression des données de symboles privés. Si vous utilisez cette option avec un symbole qui n’est pas inclus dans la table de symboles publics, PDBCopy l’ignore.

Fichier mspdb*.dll

PDBCopy doit accéder au fichier Mspdb80.dll ou au fichier Mspdb60.dll pour s’exécuter. Par défaut, PDBCopy utilise Mspdb80.dll, qui est la version utilisée par Visual Studio .NET 2002 et les versions ultérieures de Visual Studio. Si vos symboles ont été générés à l’aide de Visual Studio 6.0 ou d’une version antérieure, vous pouvez spécifier l’option de ligne de commande -vc6 afin que PDBCopy utilise Mspdb60.dll à la place, bien que cela ne soit pas obligatoire. PDBCopy recherche le fichier approprié même si l’option -vc6 n’est pas utilisée. Vous pouvez trouver ces fichiers dans votre installation de Visual Studio, du Kit de développement logiciel (SDK) de plateforme ou du Kit de pilotes Windows (WDK).

Avant d’exécuter PDBCopy, assurez-vous que la version correcte du fichier mspdb*.dll est accessible à votre ordinateur et assurez-vous que son emplacement fait partie du chemin de la commande. Si ce n’est pas le cas, vous devez utiliser la commande path pour ajouter cet emplacement au chemin de la commande.

Signature de fichier et index SymSrv

Chaque fichier de symboles a une signature fixe qui l’identifie de manière unique. SymSrv utilise la signature pour générer une « valeur d’index » unique pour le fichier. Si deux fichiers ont un contenu différent ou des heures de création différentes, ils auront également des signatures distinctes et des valeurs d’index SymSrv distinctes.

Les fichiers créés avec PDBCopy sont une exception à la règle des valeurs d’index uniques. Lorsque PDBCopy crée un fichier de symboles, il a la même signature et la même valeur d’index SymSrv que l’ancien fichier. Cette fonctionnalité permet de remplacer un fichier par l’autre sans modifier le comportement des outils liés aux symboles.

Si vous souhaitez que le nouveau fichier ait une signature distincte et un index SymSrv, utilisez l’option -s. Dans la plupart des cas, vous ne souhaiterez pas utiliser cette option, car l’utilisation la plus courante de PDBCopy consiste à créer un fichier de symboles modifié qui peut remplacer l’ancien fichier sans provoquer d’incompatibilité. Une nouvelle signature peut amener SymSrv à affecter une valeur d’index différente au nouveau fichier par rapport à l’ancien fichier, ce qui empêche le nouveau fichier de remplacer correctement l’ancien.

Pour obtenir la syntaxe complète de la ligne de commande, consultez Options de Command-Line PDBCopy.