Compartilhar via


Depurar DLLs no Visual Studio (C#, C++, Visual Basic, F#)

Uma DLL (biblioteca de vínculo dinâmico) é uma biblioteca que contém código e dados que podem ser usados por mais de um aplicativo. Você pode usar o Visual Studio para criar, compilar, configurar e depurar DLLs.

Criar uma DLL

Os seguintes modelos de projeto do Visual Studio podem criar DLLs:

  • Biblioteca de Classes (.NET, .NET Framework e outras plataformas de aplicativo)
  • Biblioteca de controle do Windows Forms (.NET e .NET Framework)
  • Dynamic-Link Biblioteca (DLL) (C++)

A depuração de uma Biblioteca de Controle dos Windows Forms é semelhante à depuração de uma Biblioteca de Classes. Para obter mais informações, consulte Controles do Windows Forms.

Normalmente, você chama uma DLL de outro projeto. Ao depurar o projeto de chamada, dependendo da configuração da DLL, você pode intervir e depurar o código DLL.

Configuração de depuração de DLL

Quando você usa um modelo de projeto do Visual Studio para criar um aplicativo, o Visual Studio cria automaticamente as configurações necessárias para configurações de build de Depuração e Lançamento. Você pode alterar essas configurações, se necessário. Para obter mais informações, consulte os seguintes artigos:

Definir o atributo DebuggableAttribute do C++

Para que o depurador se conecte a uma DLL C++, o código C++ deve emitir DebuggableAttribute.

Para definir DebuggableAttribute:

  1. Selecione o projeto de DLL do C++ no Gerenciador de Soluções e selecione o ícone Propriedades ou clique com o botão direito do mouse no projeto e selecione Propriedades.

  2. No painel Propriedades, em Vinculador>Depuração, selecione Sim (/ASSEMBLYDEBUG) para Assembly Depurável.

Para obter mais informações, consulte /ASSEMBLYDEBUG.

Definir locais de arquivo DLL C/C++

Para depurar uma DLL externa, um projeto de chamada deve ser capaz de localizar a DLL, seu arquivo .pdb e quaisquer outros arquivos necessários pela DLL. Você pode criar uma tarefa de build personalizada para copiar esses arquivos para sua <pasta> de projeto\Pasta de saída de depuração ou copiar os arquivos lá manualmente.

Para projetos C/C++, você pode definir localizações de cabeçalho e arquivo LIB nas páginas de propriedades do projeto, em vez de copiá-los para a pasta de saída.

Para definir o cabeçalho C/C++ e os locais de arquivo LIB:

  1. Selecione o projeto de DLL C/C++ no Gerenciador de Soluções e selecione o ícone Propriedades ou clique com o botão direito do mouse no projeto e selecione Propriedades.

  2. Na parte superior do painel Propriedades , em Configuração, selecione Todas as Configurações.

  3. Em C/C++>Gerais>Diretórios de Inclusão Adicionais, especifique a pasta que contém os arquivos de cabeçalho.

  4. Em Linker>Geral>Diretórios de Bibliotecas Adicionais, especifique a pasta que contém arquivos LIB.

  5. Em Vinculador>Entrada>Dependências Adicionais, especifique o caminho completo e o nome do arquivo para os arquivos LIB.

  6. Selecione OK.

Para obter mais informações sobre as configurações de projeto do C++, consulte a referência da página de propriedades do Windows C++.

Criar uma versão de debug

Crie uma versão de depuração da DLL antes de iniciar a depuração. Para depurar uma DLL, um aplicativo de chamada deve ser capaz de localizar seu arquivo .pdb e quaisquer outros arquivos necessários para a DLL. Para saber mais, veja Como definir as configurações de depuração e lançamento.

Você pode criar uma tarefa de compilação personalizada para copiar os arquivos DLL para a <pasta de projeto de chamada>\Depurar pasta de saída, ou pode copiar os arquivos manualmente.

Certifique-se de chamar a DLL em seu local correto. Isso pode parecer óbvio, mas se um aplicativo de chamada encontrar e carregar uma cópia diferente da DLL, o depurador nunca atingirá os pontos de interrupção definidos.

Depurar uma DLL

Você não pode executar uma DLL diretamente. Ele deve ser chamado por um aplicativo, geralmente um arquivo .exe .

Para depurar uma DLL, você pode iniciar a depuração do aplicativo de chamada ou depurar do projeto DLL especificando seu aplicativo de chamada. Você também pode usar o depurador Janela imediata para avaliar as funções ou métodos de DLL em tempo de design, sem usar um aplicativo de chamada.

Iniciar a depuração do aplicativo de chamada

O aplicativo que chama uma DLL pode ser:

  • Um aplicativo de um projeto do Visual Studio na mesma solução ou em uma solução diferente da DLL.
  • Um aplicativo existente que já está implantado e em execução em um computador de teste ou de produção.
  • Localizado na Web e acessado por meio de uma URL.
  • Um aplicativo Web com uma página da Web que insira a DLL.

Antes de começar a depurar o aplicativo de chamada, defina um ponto de interrupção na DLL. Veja Introdução aos pontos de interrupção. Quando o ponto de interrupção da DLL é atingido, você pode avançar pelo código, observando a execução em cada linha. Para obter mais informações, consulte Navegar no código no depurador.

Para depurar uma DLL de um aplicativo de chamada, você pode:

  • Abra o projeto do aplicativo de chamada e inicie a depuração selecionando Depurar>Iniciar Depuração ou pressionando F5.

    ou

  • Anexe a um aplicativo que já está implantado e em execução em um computador de teste ou de produção. Use esse método para DLLs em sites ou em aplicativos Web. Para obter mais informações, consulte Como anexar a um processo em execução.

Durante a depuração, você pode usar a janela Módulos para verificar as DLLs e .exe arquivos que o aplicativo carrega. Para abrir a janela Módulos, durante a depuração, selecione Depurar>Windows>Módulos. Para obter mais informações, consulte Como usar a janela Módulos.

Usar a janela Imediata

Você pode usar a janela Imediata para avaliar funções ou métodos de DLL em tempo de design. A janela Imediata desempenha o papel de um aplicativo de chamada.

Observação

Você pode usar a janela Imediata em tempo de design com a maioria dos tipos de projeto. Não há suporte para SQL, projetos Web ou script.

Por exemplo, para testar um método nomeado Test na classe Class1:

  1. Com o projeto DLL aberto, abra a janela Imediata selecionando Depurar>o Windows>Imediato ou pressionando Ctrl+Alt+I.

  2. Instancie um objeto do tipo Class1 digitando o seguinte código C# na janela Imediata e pressionando Enter. Esse código gerenciado funciona para C# e Visual Basic, com alterações de sintaxe apropriadas:

    Class1 obj = new Class1();
    

    Em C#, todos os nomes devem ser totalmente qualificados. Todos os métodos ou variáveis devem estar no escopo e no contexto atuais quando o serviço de idioma tenta avaliar a expressão.

  3. Supondo que Test tenha um int parâmetro, avalie Test usando a janela Imediata :

    ?obj.Test(10);
    

    O resultado é impresso na janela Imediata .

  4. Você pode continuar a depuração do Test colocando um ponto de interrupção dentro dele e avaliando a função novamente.

    O ponto de interrupção será atingido e você poderá percorrer Test. Após a execução do Test, o depurador voltará ao modo de design.

Depuração de modo misto

Você pode escrever um aplicativo de chamada para uma DLL no código gerenciado ou nativo. Caso seu aplicativo nativo chame uma DLL gerenciada e você queira depurar ambos, é possível habilitar os depuradores gerenciado e nativo nas propriedades do projeto. O processo exato depende se você quer iniciar a depuração do projeto DLL ou do projeto de aplicativo de chamada. Para obter mais informações, confira Como depurar no modo misto.

Você também pode depurar uma DLL nativa de um projeto de chamada gerenciada. Para obter mais informações, consulte Como depurar código gerenciado e nativo.