Compartilhar via


Depurando projetos de DLL

Os modelos a seguir criam DLLs:

  • Biblioteca de Classes (C++, C# e Visual Basic)

  • (C++, C# e Visual Basic): Biblioteca de Controle Windows Forms

    A depuração de uma Biblioteca de Controles do Windows é semelhante à depuração de um projeto de Biblioteca de Classe. Na maioria dos casos, você chamará o controle do Windows de outro projeto. Ao depurar o projeto de chamada, você poderá entrar no código do controle do Windows, definir pontos de interrupção e executar outras operações de depuração. Para obter mais informações, consulte Controles Windows Forms.

  • (C# e Visual Basic): Biblioteca de Controles da Web

    Para obter mais informações, consulte Biblioteca de Controles da Web (código gerenciado).

  • (C++): Controle ActiveX do MFC e Controle Activex de Dispositivo Inteligente do MFC

    Os controles ActiveX são controles que podem ser baixados pela Internet em um computador de cliente, e exibidos e ativados em páginas da Web.

    A depuração dos controles do ActiveX é semelhante à depuração de outros tipos de controles porque não podem ser executadas como autônomas, mas devem ser inseridas em uma página da Web HTML. Para obter mais informações, consulte Como depurar um controle ActiveX.

  • (C++): DLL de Dispositivo Inteligente do MFC

    Para obter mais informações, consulte Técnicas de depuração MFC.

Esta seção também contém informações sobre os seguintes tópicos:

Este tópico contém as seções a seguir, que fornecem considerações sobre como se preparar para depurar bibliotecas de classe:

  • Compilar uma versão de depuração

  • Depuração de modo misto

  • Alterar Configurações padrão

  • Maneiras de depurar a DLL

  • O Aplicativo de Chamada

  • Controles em uma página da Web

  • A Janela Imediato

Compilar uma versão de depuração

Não importa como você inicia a depuração, certifique-se de compilar a versão de Depuração da DLL primeiro e verifique se a versão de Depuração está no local onde o aplicativo espera encontrá-la. Isso pode parecer óbvio, mas se você esquecer desta etapa, o aplicativo poderá encontrar uma versão diferente da DLL e carregá-la. O programa continuará a ser executado enquanto você se pergunta o porquê do ponto de interrupção nunca ter sido atingido. Quando você estiver depurando, será possível verificar quais DLLs seu programa carregou abrindo a janela Módulos do depurador. A janela Módulos lista cada arquivo DLL ou EXE carregado no processo que você está depurando. Para obter mais informações, consulte Como usar a janela Módulos.

Para que o depurador conecte-se ao código escrito em C++, o código deverá emitir DebuggableAttribute. Você pode adicionar isso ao seu código automaticamente vinculando à opção do vinculador /ASSEMBLYDEBUG.

Depuração de modo misto

O aplicativo de chamada que chama a DLL pode ser escrito em código gerenciado ou em código nativo. Se a DLL gerenciada for chamada por código nativo e você quiser depurar os dois, os depuradores gerenciados e nativos deverão estar habilitados. Você pode selecionar na caixa de diálogo ou na janela <Projeto>Páginas de Propriedades. Como você faz isso depende de a depuração ser iniciada do projeto de DLL ou do projeto de aplicativo de chamada. Para obter mais informações, consulte Como depurar no modo misto.

Alterar Configurações padrão

Quando você cria um projeto de aplicativo de console com o modelo de projeto, o Visual Studio cria automaticamente as configurações necessárias para as configurações de Depuração e Versão. Se necessário, você pode alterar essas configurações. Para obter mais informações, consulte 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#, Definições do projeto para uma configuração de depuração do Visual Basic e Como definir configurações de depuração e versão.

Maneiras de depurar a DLL

Cada um dos projetos nesta seção cria uma DLL. Você não pode executar uma DLL diretamente. Ela deve ser chamada por um aplicativo, geralmente um EXE. Para obter mais informações, consulte Criando e gerenciando projetos do Visual C++. O aplicativo de chamada pode conter qualquer um dos seguintes critérios:

  • Um aplicativo compilado em outro projeto na mesma solução do Visual Studio que contém a biblioteca de classes.

  • Um aplicativo existente já implantado em um teste ou em um computador de produção.

  • Localizado na Web e acessado por meio de uma URL.

  • Um aplicativo da Web que contém uma página da Web que insere a DLL.

Depuração do Aplicativo de Chamada

Para depurar uma DLL, comece depurando o aplicativo de chamada, normalmente um EXE ou um aplicativo Web. Há várias maneiras de depurá-lo.

  • Se você tiver um projeto para o aplicativo de chamada, poderá abrir o projeto e iniciar a execução no menu Depurar. Para obter mais informações, consulte <PAVEOVER>Como iniciar a execução.

  • Se o aplicativo de chamada for um programa existente já implantado em um teste ou em um computador de produção e já estiver em execução, você poderá conectar-se a ele. Use este método se a DLL for um controle hospedado pelo Internet Explorer ou um controle em uma página da Web. Para obter mais informações, consulte <PAVE OVER> Como anexar a um processo em execução.

  • Você pode depurá-lo no projeto da DLL. Para obter mais informações, consulte Como depurar a partir de um projeto de DLL.

  • Você pode depurá-lo na janela Visual Studio Imediato. Nesse caso, a janela Imediato executa a função do aplicativo.

Antes de começar a depurar o aplicativo de chamada, convém definir um ponto de interrupção na biblioteca de classes. Para obter mais informações, consulte Breakpoints and Tracepoints. Quando o ponto de interrupção for atingido, você poderá percorrer o código, observando a ação em cada linha até isolar o problema. Para obter mais informações, consulte <PAVEOVER> Visão geral passo a passo do código.

Controles em uma página da Web

Para depurar um controle de página de Web, crie uma página do ASP.NET que o insira caso ainda não exista uma página do tipo. Em seguida, coloque os pontos de interrupção no código da página da Web, bem como no código de controle. Você chama a página da Web do Visual Studio.

Antes de começar a depurar o aplicativo de chamada, você desejará definir um ponto de interrupção no arquivo DLL. Quando o ponto de interrupção for atingido, você poderá percorrer o código, observando a ação em cada linha até isolar o problema. Para obter mais informações, consulte Breakpoints and Tracepoints.

A Janela Imediato

Você pode avaliar funções ou métodos na DLL sem ter um aplicativo de chamada. Você faz a depuração em tempo de design e usa a janela Imediato. Para depurar dessa maneira, execute as seguintes etapas enquanto o projeto da DLL estiver aberto:

  1. Abra a janela Imediato do Depurador.

  2. Para testar um método chamado Test na classe Class1, crie uma instância de um objeto do tipo Class1 digitando o seguinte código em C# na janela Imediato. 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. Além disso, todos os métodos ou variáveis devem estar no escopo e no contexto atuais da sessão de depuração.

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

       ?obj.Test(10)
    

    O resultado será impresso na janela Imediato.

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

       ?obj.Test(10);
    

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

Consulte também

Referência

Definições do projeto para uma configuração de depuração do C++

Conceitos

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

Outros recursos

Depurando código gerenciado

Preparação de depuração: tipos de projeto Visual C++

Preparação de depuração: tipos de projeto C#, F# e Visual Basic