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 C#, Visual Basic ou F#
- Biblioteca do WCF (Controle do Windows Forms) do C# ou do Visual Basic
- Biblioteca de Vínculo Dinâmico (DLL) do C++
Para obter mais informações, confira Técnicas de depuração MFC.
A depuração de uma biblioteca WCF é semelhante à depuração de uma Biblioteca de Classes. Para obter detalhes, confira Controles do Windows Forms.
Normalmente, você chama uma DLL de outro projeto. Ao depurar o projeto de chamada, dependendo da configuração de 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 Versão. Você pode alterar essas configurações, se necessário. Para obter mais informações, consulte os seguintes artigos:
- Configurações do projeto para uma configuração de depuração do C++
- Definições do projeto para configurações de depuração do C# do .NET
- Definições do projeto para configurações de depuração do C#
- Definições do projeto para uma configuração de depuração do Visual Basic
- Como definir configurações de depuração e versão
Definir C++ DebuggableAttribute
Para que o depurador seja anexado a uma DLL C++, o código C++ deve emitir DebuggableAttribute
.
Para definir DebuggableAttribute
:
Selecione o projeto C++ DLL no Gerenciador de Soluções e selecione o ícone Propriedades ou clique com o botão direito do mouse no projeto e selecione Propriedades.
No painel Propriedades, em Vinculador>Depuração, selecione Sim (/ASSEMBLYDEBUG) para Assembly Depurável.
Para obter mais informações, confira /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 compilação personalizada para copiar esses arquivos para a <pasta de projeto>\Depurar pasta de saída, ou pode copiar os arquivos manualmente.
Para projetos C/C++, você pode definir os locais de arquivo de cabeçalho e 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:
Selecione o projeto C++ DLL no Gerenciador de Soluções e selecione o ícone Propriedades ou clique com o botão direito do mouse no projeto e selecione Propriedades.
Na parte superior do painel Propriedades, em Configuração, selecione Todas as Configurações.
Em C/C++>Geral>Diretórios de Inclusão Adicionais, especifique a pasta que tem arquivos de cabeçalho.
Em Vinculador>Geral>Diretórios de Bibliotecas Adicionais, especifique a pasta que tem arquivos LIB.
Em Vinculador>Entrada>Dependências Adicionais, especifique o caminho completo e o nome do arquivo para os arquivos LIB.
Selecione OK.
Para obter mais informações sobre as configurações de projeto do C++, confira Referência da página de propriedades do Windows C++.
Criar uma versão de depuração
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 pela DLL.
Você pode criar uma tarefa de build personalizada para copiar os arquivos DLL para sua <pasta de projeto de chamada>\Pasta de saída de depuração ou copiar os arquivos lá 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 de .exe. Para obter mais informações, confira projetos do Visual Studio –C++.
Para depurar uma DLL, você pode iniciar a depuração do aplicativo de chamada ou depurar do projeto de DLL especificando seu aplicativo de chamada. Você também pode usar o depurador Janela imediata para avaliar funções ou métodos de DLL em tempo de design, sem usar um aplicativo de chamada.
Para obter mais informações, confira Primeira olhada no depurador.
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 produção.
- Localizado na Web e acessado por meio de uma URL.
- Um aplicativo da Web com uma página da Web que incorpora a DLL.
Para depurar uma DLL de um aplicativo de chamada, você pode:
Abrir o projeto para o aplicativo de chamada e começar a depurar selecionando Depurar>Iniciar Depuração ou pressione 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, confira Como anexar a um processo em execução.
Antes de começar a depurar o aplicativo de chamada, defina um ponto de interrupção na DLL. Confira Usar pontos de interrupção. Quando o ponto de interrupção da DLL for atingido, você poderá percorrer o código, observando a ação em cada linha. Para obter mais informações, confira Navegar código no depurador.
Durante a depuração, você pode usar a janela Módulos para verificar as DLLs e arquivos .exe que o aplicativo carrega. Para abrir a janela Módulos durante a depuração, selecione Depurar>Windows>Módulos. Para obter mais informações, confira 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 a função 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 chamado Test
na classe Class1
:
Com o projeto de DLL aberto, abra a janela Imediata selecionando Depurar>Windows>Imediato ou pressionando Ctrl+Alt+I.
Crie uma instância de um objeto do tipo
Class1
digitando o seguinte código em C# na janela Imediato e pressionando Enter. Esse código gerenciado funciona para o Visual Basic e C++, com as alterações de sintaxe apropriadas:Class1 obj = new Class1();
No 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.
Supondo que
Test
aceite um parâmetroint
, avalieTest
usando a janela Imediato:?obj.Test(10);
O resultado é impresso na janela Imediato.
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 doTest
, o Depurador voltará ao modo Design.
Depuração de modo misto
Você pode escrever um aplicativo de chamada para uma DLL no código gerenciado ou nativo. Se o aplicativo nativo chamar uma DLL gerenciada e você quiser depurar ambos, você poderá habilitar os depuradores gerenciados e nativos nas propriedades do projeto. O processo exato depende se você deseja 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, confira Como depurar código gerenciado e nativo.
Conteúdo relacionado
- Depurar o código gerenciado
- Preparar-se para depurar projetos C++
- Tipos de projeto C#, F# e Visual Basic
- Definições do projeto para uma configuração de depuração do C++
- Definições do projeto para configurações de depuração do C# do .NET
- Definições do projeto para configurações de depuração do C#
- Definições do projeto para uma configuração de depuração do Visual Basic
- Segurança do depurador