Partilhar via


Usando o PDBCopy

PDBCopy é uma ferramenta de linha de comando que cria um ficheiro de símbolo reduzido a partir de um ficheiro de símbolo completo. Em outras palavras, ele usa um arquivo de símbolo que contém dados de símbolos privados e uma tabela de símbolos públicos e cria uma cópia desse arquivo que contém apenas a tabela de símbolos públicos. Dependendo de quais opções PDBCopy são usadas, o arquivo de símbolo removido contém toda a tabela de símbolos públicos ou um subconjunto especificado da tabela de símbolos públicos.

Para obter o local do PDBCopy no WDK, consulte Diretório de instalação em Ferramentas incluídas nas Ferramentas de depuração para Windows.

O PDBCopy funciona com qualquer arquivo de símbolo no formato PDB (com extensão de nome de arquivo .pdb), mas não com os arquivos de símbolo de formato mais antigo (.dbg).

Para obter uma descrição de tabelas de símbolos públicos e dados de símbolos privados, consulte Símbolos públicos e privados.

Removendo símbolos privados

Se você deseja criar um arquivo de símbolo removido que contém todos os símbolos públicos e nenhum dos símbolos privados, use PDBCopy com três parâmetros: o caminho e o nome do arquivo de símbolo original, o caminho e o nome do novo arquivo de símbolo e a opção -p.

Por exemplo, o comando a seguir cria um novo arquivo, chamado publicsymbols.pdb, que contém a mesma tabela de símbolos públicos que mysymbols.pdb, mas não contém nenhum dos dados do símbolo privado:

pdbcopy mysymbols.pdb publicsymbols.pdb -p

Se mysymbols.pdb já for um arquivo de símbolo despojado, o conteúdo simbólico do novo arquivo e do arquivo antigo será idêntico.

Depois de emitir esse comando, você deve mover o novo arquivo para um novo local e renomeá-lo para o nome original do arquivo de símbolo (neste exemplo, mysymbols.pdb), porque a maioria dos programas de depuração e programas de extração de símbolos procuram símbolos com base em um nome de arquivo específico. Como alternativa, você pode usar o mesmo nome de arquivo para o arquivo de entrada e o arquivo de saída na linha de comando PDBCopy, desde que diretórios diferentes sejam especificados:

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

Observação O arquivo de destino não deve existir antes que o PDBCopy seja executado. Se existir um ficheiro com este nome, poderão ocorrer vários erros.

Removendo símbolos privados e símbolos públicos selecionados

Se desejar não apenas remover os dados de símbolos privados, mas também reduzir a quantidade de informações na tabela de símbolos públicos, você pode usar a opção -f para especificar uma lista de símbolos públicos que devem ser removidos.

O exemplo a seguir ilustra esse procedimento:

  1. Determine os nomes completos, incluindo decorações, dos símbolos que deseja remover. Se você não tiver certeza dos nomes dos símbolos decorados, você pode usar a ferramenta DBH para determiná-los. Consulte Determinando as decorações de um símbolo específico para obter detalhes. Neste exemplo, vamos supor que os nomes decorados dos símbolos que você deseja remover são _myGlobal1 e _myGlobal2.

  2. Crie um arquivo de texto contendo uma lista dos símbolos a serem removidos. Cada linha neste ficheiro deve incluir o nome de um símbolo, incluindo decorações, mas não incluindo nomes de módulos. Neste exemplo, o arquivo conteria as duas linhas a seguir:

    _myGlobal1
    _myGlobal2
    

    O arquivo pode receber qualquer nome que você escolher. Suponhamos que você nomeie esse arquivo listfile.txt e coloque-o no diretório C:\Temp.

  3. Use a seguinte linha de comando PDBCopy:

    pdbcopy OldPDB NewPDB -p -f:@TextFile
    

    onde OldPDB e NewPDB são o arquivo de símbolo original e o novo arquivo de símbolo, e TextFile é o arquivo criado na etapa dois. A opção -f indica que certos símbolos públicos devem ser removidos, e o arroba ( @ ) indica que esses símbolos estão listados no arquivo de texto indicado.

    No exemplo atual, o comando teria esta aparência:

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

    Isso cria um novo arquivo de símbolo, C:\dir3\mysymbols.pdb, which does not contain any private symbols and does not contain the two global variables you listed in listfile.txt.

Como mostrado neste exemplo, a opção -f do PDBCopy remove uma lista específica de símbolos públicos. O arroba ( @ ) indica que esses símbolos estão listados em um ficheiro de texto. Um método alternativo é listar todos os símbolos na linha de comando, usando a opção -f sem um sinal de e comercial. Assim, a seguinte linha de comando é equivalente ao exemplo no procedimento acima:

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

A menos que você deseje remover apenas um ou dois símbolos, é mais simples usar um arquivo de texto do que listá-los na linha de comando.

Se você deseja remover a maioria dos símbolos públicos do seu arquivo .pdb, a opção -F é o método mais fácil. Enquanto a opção -f requer que você liste os símbolos públicos que deseja remover, a opção -F exige que você liste os símbolos públicos que não deseja remover. Todos os outros símbolos públicos (bem como todos os símbolos privados) serão removidos. A opção -F suporta as mesmas duas opções de sintaxe que a opção -f: -F: seguido pelo nome de um símbolo a ser mantido, ou -F:@ seguido pelo nome de um arquivo de texto que contém uma lista dos símbolos a serem mantidos. Em ambos os casos, devem ser utilizados nomes de símbolos decorados.

Por exemplo, o comando a seguir remove todos os símbolos privados e quase todos os símbolos públicos, deixando apenas os símbolos _myFunction5 e _myGlobal7:

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

Se você combinar várias instâncias da opção -f em uma linha, todos os símbolos especificados serão removidos. Se você combinar várias instâncias da opção -F em uma linha, todos os símbolos especificados serão mantidos e todos os outros símbolos serão removidos. Não é possível combinar -f com -F.

As opções -f e -F não podem ser usadas sem a opção -p, que remove todos os dados de símbolos privados. Mesmo que o arquivo original não contenha símbolos privados, você ainda deve incluir a opção -p (embora ela não tenha efeito neste caso).

A opção -F não pode ser usada para impedir que os dados do símbolo privado sejam removidos. Se você usar essa opção com um símbolo que não está incluído na tabela de símbolos públicos, o PDBCopy o ignorará.

O arquivo mspdb*.dll

O PDBCopy deve acessar o arquivo Mspdb80.dll ou o arquivo Mspdb60.dll para ser executado. Por padrão, o PDBCopy usa Mspdb80.dll, que é a versão usada pelo Visual Studio .NET 2002 e versões posteriores do Visual Studio. Se seus símbolos foram criados usando o Visual Studio 6.0 ou uma versão anterior, você pode especificar a opção de linha de comando -vc6 para que o PDBCopy use Mspdb60.dll em vez disso, embora isso não seja necessário. O PDBCopy procura o arquivo apropriado mesmo que a opção -vc6 não seja usada. Você pode encontrar esses arquivos em sua instalação do Visual Studio, o Platform SDK ou o Windows Driver Kit (WDK).

Antes de executar o PDBCopy, verifique se a versão correta do arquivo.dll mspdb* está acessível ao seu computador e se seu local faz parte do caminho do comando. Se não estiver, você deve usar o comando path para adicionar esse local ao caminho do comando.

A assinatura do arquivo e o índice SymSrv

Cada arquivo de símbolo tem uma assinatura fixa que o identifica exclusivamente. O SymSrv usa a assinatura para gerar um "valor de índice" exclusivo para o arquivo. Se dois arquivos tiverem conteúdos diferentes ou tempos de criação diferentes, eles também terão assinaturas distintas e valores de índice SymSrv distintos.

Os arquivos criados com PDBCopy são uma exceção à regra de valores de índice exclusivos. Quando o PDBCopy cria um novo arquivo de símbolo, ele tem a mesma assinatura e o mesmo valor de índice SymSrv que o arquivo antigo. Esse recurso permite que um arquivo seja substituído pelo outro sem alterar o comportamento de ferramentas relacionadas a símbolos.

Se desejar que o novo arquivo tenha uma assinatura distinta e um índice SymSrv, use a opção -s. Na maioria dos casos, você não desejará usar essa opção, já que o uso mais comum do PDBCopy é criar um arquivo de símbolo alterado que pode substituir o arquivo antigo sem causar uma incompatibilidade. Uma nova assinatura pode fazer com que o SymSrv atribua um valor de índice diferente ao novo arquivo do que ao arquivo antigo, impedindo que o novo arquivo substitua corretamente o antigo.

Para obter a sintaxe completa da linha de comando, consulte Opções de Command-Line PDBCopy.