Uso de PDBCopy
PDBCopy es una herramienta de línea de comandos que crea un archivo de símbolos quitado de un archivo de símbolos completo. En otras palabras, toma un archivo de símbolos que contiene datos de símbolos privados y una tabla de símbolos públicos, y crea una copia de ese archivo que contiene solo la tabla de símbolos públicos. Dependiendo de las opciones de PDBCopy que se usen, el archivo de símbolos quitado contiene toda la tabla de símbolos públicos o un subconjunto especificado de la tabla de símbolos públicos.
Para obtener la ubicación de PDBCopy en el WDK, consulte Directorio de instalación en Herramientas incluidas en Herramientas de depuración para Windows.
PDBCopy funciona con cualquier archivo de símbolos de formato PDB (con la extensión de nombre de archivo .pdb), pero no con los archivos de símbolos de formato anterior (.dbg).
Para obtener una descripción de las tablas de símbolos públicos y los datos de símbolos privados, consulte Símbolos públicos y privados.
Eliminación de símbolos privados
Si desea crear un archivo de símbolos quitado que contenga todos los símbolos públicos y ninguno de los símbolos privados, use PDBCopy con tres parámetros: la ruta de acceso y el nombre del archivo de símbolos original, la ruta de acceso y el nombre del nuevo archivo de símbolos y la opción -p.
Por ejemplo, el siguiente comando crea un nuevo archivo, denominado publicsymbols.pdb, que contiene la misma tabla de símbolos públicos que mysymbols.pdb, pero no contiene ninguno de los datos del símbolo privado:
pdbcopy mysymbols.pdb publicsymbols.pdb -p
Si mysymbols.pdb ya es un archivo de símbolos quitado, el contenido simbólico del nuevo archivo y el archivo anterior será idéntico.
Después de emitir este comando, debe mover el nuevo archivo a una nueva ubicación y cambiar su nombre al nombre original del archivo de símbolos (en este ejemplo, mysymbols.pdb), porque la mayoría de los programas de depuración y los programas de extracción de símbolos buscan símbolos basados en un nombre de archivo específico. Como alternativa, puede usar el mismo nombre de archivo para el archivo de entrada y el archivo de salida en la línea de comandos de PDBCopy, siempre y cuando se especifiquen directorios diferentes:
pdbcopy c:\dir1\mysymbols.pdb c:\dir2\mysymbols.pdb -p
Nota El archivo de destino no debe existir antes de que se ejecute PDBCopy. Si existe un archivo con este nombre, pueden producirse varios errores.
Eliminación de símbolos privados y símbolos públicos seleccionados
Si no solo desea quitar los datos de símbolos privados, sino también reducir la cantidad de información de la tabla de símbolos públicos, puede usar la opción -f para especificar una lista de símbolos públicos que se van a quitar.
En el ejemplo siguiente se muestra este procedimiento:
Determine los nombres completos, incluidas las decoraciones, de los símbolos que desea quitar. Si no está seguro de los nombres de símbolos representativos, puede usar la herramienta DBH para determinarlos. Consulte Determinación de las decoraciones de un símbolo específico para obtener más información. En este ejemplo, supongamos que los nombres representativos de los símbolos que desea quitar son _myGlobal1 y _myGlobal2.
Cree un archivo de texto que contenga una lista de los símbolos que se van a quitar. Cada línea de este archivo debe incluir el nombre de un símbolo, incluidas las decoraciones, pero no los nombres de módulo. En este ejemplo, el archivo contendrá las dos líneas siguientes:
_myGlobal1 _myGlobal2
El archivo puede tener cualquier nombre que elija. Supongamos que asigna un nombre a este archivo listfile.txt y lo coloca en el directorio C:\Temp.
Use la siguiente línea de comandos de PDBCopy:
pdbcopy OldPDB NewPDB -p -f:@TextFile
donde OldPDB y NewPDB son el archivo de símbolos original y el nuevo archivo de símbolos, y TextFile es el archivo creado en el paso dos. La opción -f indica que se van a quitar determinados símbolos públicos y la y comercial ( @ ) indica que estos símbolos se muestran en el archivo de texto especificado.
En el ejemplo actual, el comando tendría el siguiente aspecto:
pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:@c:\temp\listfile.txt
Esto crea un nuevo archivo de símbolos, C:\dir3\mysymbols.pdb, que no contiene ningún símbolo privado y no contiene las dos variables globales que se enumeran en listfile.txt.
Como se muestra en este ejemplo, la opción -f de PDBCopy quita una lista específica de símbolos públicos. La y comercial ( @ ) indica que estos símbolos se muestran en un archivo de texto. Un método alternativo consiste en enumerar todos los símbolos de la línea de comandos mediante la opción -f sin una y comercial. Por lo tanto, la siguiente línea de comandos es equivalente al ejemplo del procedimiento anterior:
pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:_myGlobal1 -f:_myGlobal2
A menos que desee quitar solo uno o dos símbolos, es más sencillo usar un archivo de texto que enumerarlos en la línea de comandos.
Si desea quitar la mayoría de los símbolos públicos del archivo .pdb, la opción -F es el método más sencillo. Aunque la opción -f requiere que enumere los símbolos públicos que desea quitar, la opción -F requiere que enumere esos símbolos públicos que no desea quitar. Se quitarán todos los demás símbolos públicos (así como todos los símbolos privados). La opción -F admite las mismas dos opciones de sintaxis que la opción -f: -F: seguido del nombre de un símbolo que se va a conservar o -F:@ seguido del nombre de un archivo de texto que contiene una lista de los símbolos que se van a conservar. En cualquier caso, se deben usar los nombres de símbolos representativos.
Por ejemplo, el siguiente comando quita todos los símbolos privados y casi todos los símbolos públicos, dejando solo los símbolos _myFunction5 y _myGlobal7:
pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -F:_myFunction5 -F:_myGlobal7
Si combina varias instancias de la opción -f en una línea, se quitan todos los símbolos especificados. Si combina varias instancias de la opción -F en una línea, se conservan todos los símbolos especificados y se quitan todos los demás símbolos. No se puede combinar -f con -F.
Las opciones -f y -F no se pueden usar sin la opción -p, que quita todos los datos de símbolos privados. Incluso si el archivo original no contiene símbolos privados, todavía debe incluir la opción -p (aunque no tiene ningún efecto en este caso).
No se puede usar la opción -F para evitar que se quiten los datos de símbolos privados. Si usa esta opción con un símbolo que no está incluido en la tabla de símbolos públicos, PDBCopy lo omite.
El archivo mspdb*.dll
PDBCopy debe tener acceso al archivo Mspdb80.dll o al archivo Mspdb60.dll para poder ejecutarse. De forma predeterminada, PDBCopy usa Mspdb80.dll, que es la versión usada por Visual Studio .NET 2002 y versiones posteriores de Visual Studio. Si los símbolos se crearon con Visual Studio 6.0 o una versión anterior, puede especificar la opción de línea de comandos -vc6 para que PDBCopy use Mspdb60.dll en su lugar, aunque esto no es necesario. PDBCopy busca el archivo adecuado incluso si no se usa la opción -vc6. Puede encontrar estos archivos en la instalación de Visual Studio, el SDK de plataforma o el Kit de controladores de Windows (WDK).
Antes de ejecutar PDBCopy, asegúrese de que la versión correcta del archivo mspdb*.dll sea accesible para el equipo y asegúrese de que su ubicación forma parte de la ruta de acceso del comando. Si no es así, debe usar el comando path para agregar esta ubicación a la ruta de acceso del comando.
La firma de archivo y el índice SymSrv
Cada archivo de símbolos tiene una firma fija que la identifica de forma única. SymSrv usa la firma para generar un "valor de índice" único para el archivo. Si dos archivos tienen contenido diferente o tiempos de creación diferentes, también tendrán firmas distintas y valores de índice SymSrv distintos.
Los archivos creados con PDBCopy son una excepción a la regla de valores de índice únicos. Cuando PDBCopy crea un nuevo archivo de símbolos, tiene la misma firma y el mismo valor de índice SymSrv que el archivo anterior. Esta característica permite reemplazar un archivo por el otro sin modificar el comportamiento de las herramientas relacionadas con símbolos.
Si desea que el nuevo archivo tenga una firma distinta y un índice SymSrv, use la opción -s. En la mayoría de los casos no deseará usar esta opción, ya que el uso más común de PDBCopy es crear un archivo de símbolos modificado que pueda reemplazar el archivo antiguo sin provocar una discrepancia. Una nueva firma puede hacer que SymSrv asigne un valor de índice diferente al nuevo archivo que al archivo anterior, lo que impide que el nuevo archivo reemplace correctamente el antiguo.
Para obtener la sintaxis completa de la línea de comandos, consulte Opciones de PDBCopy Command-Line.