Eseguire il debug di DLL in Visual Studio (C#, C++, Visual Basic, F#)

Una DLL (libreria a collegamento dinamico) è una libreria che contiene codice e dati che possono essere usati da più app. È possibile usare Visual Studio per creare, compilare, configurare ed eseguire il debug di DLL.

Creare una DLL

I modelli di progetto di Visual Studio seguenti possono creare DLL:

  • Libreria di classi C#, Visual Basic o F#
  • Libreria C# o Visual Basic Windows Form Control (WCF)
  • Libreria a collegamento dinamico C++ (DLL)

Per altre informazioni, vedere Tecniche di debug MFC.

Il debug di una libreria WCF è simile al debug di una libreria di classi. Per informazioni dettagliate, vedere controlli Windows Form.

In genere si chiama una DLL da un altro progetto. Quando si esegue il debug del progetto chiamante, a seconda della configurazione della DLL, è possibile eseguire l'istruzione e il debug del codice DLL.

Configurazione del debug dll

Quando si usa un modello di progetto di Visual Studio per creare un'app, Visual Studio crea automaticamente le impostazioni necessarie per le configurazioni di compilazione debug e rilascio. Se necessario, è possibile modificare queste impostazioni. Per altre informazioni, vedere gli articoli seguenti:

Impostare C++ DebuggableAttribute

Affinché il debugger possa connettersi a una DLL C++, il codice C++ deve generare DebuggableAttribute.

Per impostare DebuggableAttribute:

  1. Selezionare il progetto DLL C++ in Esplora soluzioni e selezionare l'icona Proprietà oppure fare clic con il pulsante destro del mouse sul progetto e scegliere Proprietà.

  2. Nel riquadro Proprietà, in Debug del linker>, selezionare Sì (/AS edizione Standard MBLYDEBUG) per Assembly di cui è possibile eseguire il debug.

Per altre informazioni, vedere /AS edizione Standard MBLYDEBUG.

Impostare i percorsi dei file DLL C/C++

Per eseguire il debug di una DLL esterna, un progetto chiamante deve essere in grado di trovare la DLL, il relativo file con estensione pdb e qualsiasi altro file richiesto dalla DLL. È possibile creare un'attività di compilazione personalizzata per copiare questi file nella <cartella di progetto\Eseguire il debug della cartella> di output oppure copiare manualmente i file.

Per i progetti C/C++, è possibile impostare percorsi di intestazione e file LIB nelle pagine delle proprietà del progetto, anziché copiarli nella cartella di output.

Per impostare l'intestazione C/C++ e i percorsi dei file LIB:

  1. Selezionare il progetto DLL C/C++ in Esplora soluzioni e selezionare l'icona Proprietà oppure fare clic con il pulsante destro del mouse sul progetto e scegliere Proprietà.

  2. Nella parte superiore del riquadro Proprietà , in Configurazione selezionare Tutte le configurazioni.

  3. In C/C++>Directory di inclusione aggiuntive generali>specificare la cartella con file di intestazione.

  4. In Directory aggiuntive librerie aggiuntive> del linker>specificare la cartella con file LIB.

  5. In Input>linker>Dipendenze aggiuntive specificare il percorso completo e il nome file per i file LIB.

  6. Seleziona OK.

Per altre informazioni sulle impostazioni del progetto C++, vedere Informazioni di riferimento sulla pagina delle proprietà di Windows C++.

Creare una versione di debug

Assicurarsi di compilare una versione di debug della DLL prima di avviare il debug. Per eseguire il debug di una DLL, un'app chiamante deve essere in grado di trovare il file con estensione pdb e qualsiasi altro file richiesto dalla DLL.

È possibile creare un'attività di compilazione personalizzata per copiare i file DLL nella <cartella di progetto chiamante\Debug output cartella> oppure copiare manualmente i file.

Assicurarsi di chiamare la DLL nella posizione corretta. Questo può sembrare ovvio, ma se un'app chiamante trova e carica una copia diversa della DLL, il debugger non raggiungerà mai i punti di interruzione impostati.

Eseguire il debug di una DLL

Non è possibile eseguire direttamente una DLL. Deve essere chiamato da un'app, in genere un file con estensione exe . Per altre informazioni, vedere Progetti di Visual Studio - C++.

Per eseguire il debug di una DLL, è possibile avviare il debug dall'app chiamante o eseguire il debug dal progetto DLL specificando l'app chiamante. È anche possibile usare la finestra Immediata del debugger per valutare funzioni o metodi DLL in fase di progettazione, senza usare un'app chiamante.

Per altre informazioni, vedere Prima di tutto esaminare il debugger.

Avviare il debug dall'app chiamante

L'app che chiama una DLL può essere:

  • Un'app da un progetto di Visual Studio nella stessa soluzione o in una soluzione diversa dalla DLL.
  • Un'app esistente già distribuita e in esecuzione in un computer di test o produzione.
  • Trovarsi sul Web ed essere accessibile tramite un URL.
  • Un'app Web con una pagina Web che incorpora la DLL.

Per eseguire il debug di una DLL da un'app chiamante, è possibile:

  • Aprire il progetto per l'app chiamante e avviare il debug selezionando Debug>Avvia debug o premendo F5.

    oppure

  • Collegarsi a un'app già distribuita e in esecuzione in un computer di test o di produzione. Usare questo metodo per le DLL nei siti Web o nelle app Web. Per altre informazioni, vedere Procedura: Eseguire la connessione a un processo in esecuzione.

Prima di avviare il debug dell'app chiamante, impostare un punto di interruzione nella DLL. Vedere Uso dei punti di interruzione. Quando viene raggiunto il punto di interruzione della DLL, è possibile esaminare il codice, osservando l'azione in ogni riga. Per altre informazioni, vedere Esplorare il codice nel debugger.

Durante il debug, è possibile usare la finestra Moduli per verificare le DLL e i file con estensione exe caricati dall'app. Per aprire la finestra Moduli, durante il debug, selezionare Debug>moduli Windows.> Per altre informazioni, vedere Procedura: Usare la finestra Moduli.

Usare la finestra Immediata

È possibile usare la finestra Immediata per valutare le funzioni o i metodi DLL in fase di progettazione. La finestra Immediata svolge il ruolo di un'app chiamante.

Nota

È possibile usare la finestra Immediata in fase di progettazione con la maggior parte dei tipi di progetto. Non è supportato per SQL, progetti Web o script.

Ad esempio, per testare un metodo denominato Test nella classe Class1:

  1. Con il progetto DLL aperto, aprire la finestra Immediata selezionando Debug>immediato di Windows> o premendo CTRL+ALT+I.

  2. Creare un'istanza di un oggetto di tipo Class1 digitando il codice C# seguente nella finestra Immediata e premendo INVIO. Questo codice gestito funziona per C# e Visual Basic, con modifiche della sintassi appropriate:

    Class1 obj = new Class1();
    

    In C# tutti i nomi devono essere completi. Qualsiasi metodo o variabile deve trovarsi nell'ambito e nel contesto corrente quando il servizio di linguaggio tenta di valutare l'espressione.

  3. Se Test accetta un parametro int , valutare Test usando la finestra Controllo immediato :

    ?obj.Test(10);
    

    Il risultato viene stampato nella finestra Immediata .

  4. Per continuare a eseguire il debug di Test, inserire un punto di interruzione nel metodo e valutare di nuovo la funzione.

    Il punto di interruzione verrà raggiunto ed è possibile eseguire l'istruzione .Test Al termine dell'esecuzione di Test, nel debugger verrà ripristinata la modalità di progettazione.

Debug in modalità mista

È possibile scrivere un'app chiamante per una DLL in codice gestito o nativo. Se l'app nativa chiama una DLL gestita e si vuole eseguire il debug di entrambi, è possibile abilitare sia i debugger gestiti che nativi nelle proprietà del progetto. Il processo esatto dipende dal fatto che si voglia avviare il debug dal progetto DLL o dal progetto dell'app chiamante. Per altre informazioni, vedere Procedura: Eseguire il debug in modalità mista.

È anche possibile eseguire il debug di una DLL nativa da un progetto chiamante gestito. Per altre informazioni, vedere Come eseguire il debug di codice gestito e nativo.