56

Sto cercando di eseguire il debug di un progetto che ha un riferimento a una DLL che ho aggiunto, la DLL è memorizzata in una directory esterna e ho appena aggiunto un riferimento. Ora, naturalmente, posso eseguire il debug del mio progetto, ma la linea che chiama un metodo sull'altra mia DLL non può intervenire, ad esempio F12.Visual Studio: debug di una DLL di riferimento, ho origine in un'altra SLN

Un modo che potevo fare era aggiungere il mio progetto (dll) come progetto esistente alla mia soluzione e sostituire la dll di riferimento per usare il progetto allegato piuttosto che un file su disco.

Ma che casino, sono sicuro che c'è un modo più pulito?

Mi sembra di ricordare se copio alcuni file PDB o qualcosa del genere ma non riesco a ricordare. E ho bisogno di aprire 2 copie di Visual Studio, 1 per il mio progetto principale e 1 per la mia DLL di riferimento ??

+0

Provare a copiare i file PDB. Credo che funzionerà in modo simile al modo in cui funzionano i riferimenti ai server dei simboli Microsoft. –

risposta

64

Ricreare la seconda soluzione in modalità di debug sul proprio computer (in modo che i percorsi dei file in quel PDB siano specifici per il proprio computer).

Copia sia i file .DLL e .PDB nella cartella dei riferimenti. Visual Studio prenderà automaticamente il file .PDB e utilizzerà i percorsi dei file per mostrare la fonte.

È inoltre possibile utilizzare Symbol Server e Server di origine per raggiungere questo obiettivo quando il gruppo si fa riferimento è costruito altrove: http://msdn.microsoft.com/en-us/library/vstudio/ms241613.aspx

+11

Come si aggiungono i punti di interruzione nel codice della DLL se non è possibile passare direttamente al codice attraverso una chiamata diretta al metodo? –

+0

Questa è un'ottima risposta. Mi stavo chiedendo perché non potevo dubugare alla DLL !!! Mi sono perso per copiare il file .PDB. Una volta copiato, ha funzionato benissimo :) @ Knaģis –

+2

@ JennyO'Reilly è possibile compilare un 'System.Diagnostics.Debugger.Break()' (https://msdn.microsoft.com/en-us/library/system .diagnostics.debugger.break (v = vs.110) .aspx) chiamata di metodo nella soluzione. Ovviamente fai attenzione che questo non finisca nel codice di produzione (magari usa le istruzioni di precompilazione '#if DEBUG') – Liam

0

Quando si esegue una build di debug, tutti i file DLL e PDB sono stabiliti nel progetto di accoglienza. Quindi non ci dovrebbe essere bisogno di copiare i file manualmente.

Fare clic con il pulsante destro del mouse sulla soluzione, selezionare Aggiungi/Progetto esistente ... Passare alla cartella della classe lib e selezionare il file proj (ad es. Myproj.csproj). I file non vengono copiati, basta fare riferimento e puoi aprire l'origine per la classe nell'IDE e impostare i punti di interruzione nel modo normale e funziona.

9

ho avuto la soluzione facendo il seguito

Prova a disabilitare Just My Code (JMC).

Strumenti -> Opzioni -> Debugger deselezionare "Enable Just My Code"

+0

Dopo aver passato un'ora a cercare di ricompilare e ri-fare riferimento a dll, non riesco a farlo abbastanza! – dhysong

1

Ho avuto lo stesso problema che ho risolto con la pulizia e la ricostruzione della soluzione. Corregge i riferimenti nei file .pdb per individuare e raggiungere il punto di interruzione nel secondo progetto.

Problemi correlati