Condividi tramite


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 (.NET, .NET Framework e altre piattaforme per le app)
  • Libreria di controlli Windows Form (.NET e .NET Framework)
  • libreria Dynamic-Link (DLL) (C++)

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

Di solito si chiama una DLL da un altro progetto. Quando si esegue il debug del progetto chiamante, a seconda della configurazione della DLL, è possibile entrare nel codice DLL e eseguire il debug.

Configurazione di debug della 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à, sotto Linker>Debugging, selezionare Sì (/ASSEMBLYDEBUG) per Assembly eseguibile per debugging.

Per altre informazioni, vedere /ASSEMBLYDEBUG.

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 file .pdb e qualsiasi altro file che la DLL richiede. È 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++>Generale>Directory di inclusione aggiuntive, specificare la cartella con file di intestazione.

  4. In Linker>Generale>Directory aggiuntive delle librerie, specificare la cartella che contiene i file LIB.

  5. Sotto Linker>Input>Dipendenze aggiuntive, specificare il percorso completo e il nome del file LIB.

  6. Seleziona OK.

Per altre informazioni sulle impostazioni del progetto C++, vedere Riferimento alla pagina delle proprietà C++ di Windows.

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. Per altre informazioni, vedere Procedura: Impostare configurazioni di debug e rilascio.

È possibile creare un'attività di compilazione personalizzata per copiare i file DLL nella cartella di output \Debug del progetto chiamante, 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.exe .

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.

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.
  • Si trova sul Web e si accede tramite un URL.
  • Un'app Web con una pagina Web che incorpora la DLL.

Prima di avviare il debug dell'app chiamante, impostare un punto di interruzione nella DLL. Consultare Introduzione ai 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.

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.

    o

  • 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: Connettersi a un processo in esecuzione.

Durante il debug, è possibile usare la finestra Moduli per verificare le DLL e .exe file caricati dall'app. Per aprire la finestra Moduli, durante il debug, selezionare Debug>moduli>. 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.

Annotazioni

È 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>Windows>Immediata o premendo Ctrl+Alt+I.

  2. Instanziare 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 pienamente qualificati. Qualsiasi metodo o variabile deve trovarsi nell'ambito e nel contesto corrente quando il servizio di linguaggio tenta di valutare l'espressione.

  3. Supponendo che Test accetta un int parametro, valutare Test usando la finestra Immediata :

    ?obj.Test(10);
    

    Il risultato viene stampato nella finestra Immediata .

  4. È possibile continuare a eseguire il debug Test inserendo un punto di interruzione all'interno di esso e quindi valutando nuovamente la funzione.

    Il punto di interruzione verrà raggiunto ed è possibile procedere passo dopo passo con Test. Dopo che l'esecuzione è terminata in Test, il debugger sarà di nuovo in modalità 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.