Come eseguire il debug di una dll di riferimento (con pdb)

La mia domanda riguarda Visual Studio 2008, anche se suppongo che dovrebbe essere lo stesso in VS2005

Ho due soluzioni nel mio spazio di lavoro, ad esempio A e B.

La soluzione A è un progetto precedente che ho terminato di scrivere qualche tempo fa. Nella soluzione B, ho bisogno di utilizzare alcune classi dalla soluzione A. Per fare ciò, aggiungo un riferimento alla dll di uno dei progetti nella soluzione A.

Il problema è quando provo a eseguire il debug. Voglio essere in grado di entrare nel codice di A pure. Visual Studio non è in grado di caricare il codice per queste classi (“Non esiste un codice sorgente disponibile per la posizione corrente.”) E posso solo visualizzare lo sassembly, che non è utile.

L’unico modo per eseguire il debug delle classi dalla soluzione A è eseguire la soluzione B, scolbind tutti i processi (nella voce di menu Debug) e colbind il processo dalla soluzione A.

Tuttavia, questo è molto scomodo e posso solo eseguire il debug di A O B in una sola volta.

C’è un modo per consentire l’ingresso nel codice di dll di riferimento (per cui ho il codice sorgente)?


Soluzione: il mio errore è stato che pensavo che un progetto potesse essere solo parte di un’unica soluzione. In effetti, un progetto può essere parte di un numero qualsiasi di soluzioni.
Quando è necessario fare riferimento al vecchio progetto, è sufficiente aggiungere il progetto alla soluzione. Ciò avviene facendo clic con il pulsante destro del mouse sulla nuova soluzione in Esplora soluzioni> Aggiungi> Progetto esistente.
Quindi, sarai in grado di aggiungere il riferimento del progetto. Come altri hanno scritto, probabilmente dovresti evitare completamente di usare riferimenti alle DLL al tuo codice (o altro codice che potresti aver bisogno di cambiare ed eseguire il debug).

Un ottimo riferimento a come le soluzioni dovrebbero essere progettate può essere trovato in MSDN .

Se hai un riferimento al progetto , dovrebbe funzionare immediatamente.

Se si tratta di un riferimento file (dll), è necessario che i simboli di debug (il file “pdb”) si trovino nella stessa cartella della DLL. Verifica che i tuoi progetti stiano generando i simboli di debug (proprietà del progetto => Build => Advanced => Output / Debug Info = full); e se hai copiato la dll, inserisci il pdb con esso.

È anche ansible caricare i simboli direttamente nell’IDE se non si desidera copiare alcun file, ma è più lavoro.

L’opzione più semplice è usare i riferimenti del progetto!

Ho avuto lo stesso problema. È quello che ho trovato:

1) assicurati che tutti i progetti stiano utilizzando lo stesso Framework (questo è fondamentale!)

2) in Strumenti / Opzioni> Debug> Generale assicurati che l’opzione “Abilita solo il mio codice (solo gestito) NON sia selezionata

3) in Strumenti / Opzioni> Debug> Simboli cancella tutti i simboli memorizzati nella cache, deseleziona ed elimina tutte le posizioni delle cartelle sotto la casella di riepilogo “Simboli file (.pdb)” ad eccezione dei “Server dei simboli Microsoft” predefiniti, ma ancora deseleziona. Elimina anche eventuali percorsi statici nella casella di testo “Cache symbols in this directory”. Fai clic sul pulsante “Empty Symbols Cache”. Infine, assicurati che sia selezionato il pulsante di opzione “Solo i moduli specificati”.

4) nel menu Build / Configuration Manager per tutti i progetti assicurati che la configurazione sia in modalità Debug.

Un altro punto da tenere a mente, assicurati che le DLL di riferimento non siano installate nel GAC. Dopo il test, ho installato le mie DLL nel GAC per eseguire test a livello di sistema. In seguito, quando ho dovuto eseguire nuovamente il debug del mio codice, non sono riuscito a entrare negli assembly di riferimento finché non li ho eliminati dal GAC.

Quando si desidera impostare un punto di interruzione nel codice sorgente di una dll di riferimento, assicurarsi innanzitutto di disporre di un file pdb disponibile. Quindi puoi semplicemente aprire il relativo file del codice sorgente e impostare un punto di interruzione da lì. Il file sorgente non deve necessariamente far parte della tua soluzione. Come spiegato in Come posso impostare un punto di interruzione nel codice di riferimento in Visual Studio?

È ansible rivedere i punti di interruzione attraverso la finestra dei punti di interruzione, disponibile tramite Debug -> Windows -> Punti di interruzione.

Questo approccio ha il vantaggio che non è necessario aggiungere un progetto esistente alla soluzione solo per scopi di debug, in quanto l’eliminazione di esso mi ha permesso di risparmiare un sacco di tempo. Evidentemente, la creazione di una soluzione con un solo progetto è molto più rapida della creazione di una soluzione con molti di essi.

Passaggio 1: vai su Strumenti -> Opzioni -> Debug

Passaggio 2: deselezionare Abilita solo il mio codice

Passaggio 3: deselezionare Richiedi che il file di origine corrisponda esattamente alla versione originale

Passaggio 4: deselezionare Passaggio sopra Proprietà e operatori

Deve funzionare. Ho usato per il debug di un file .exe e una dll allo stesso tempo! Quello che suggerisco è 1) Includere il percorso della DLL nel progetto B, 2) Quindi compilare in debug il tuo progetto A 3) Controlla che il percorso punti sul file A dll e de pdb …. 4) Dopo di che tu inizia nel debug del progetto B e se tutto è a posto, sarai in grado di eseguire il debug in entrambi i progetti!

Non voglio includere un progetto di libreria di classi esterne in alcune delle mie soluzioni, quindi passo agli assembly che consumo in modo diverso.

Le mie soluzioni hanno una directory “Common Assemblies” che contiene le mie DLL da altri progetti. Le DLL di riferimento includono anche i relativi file PDB per il debug.

Per eseguire il debug e impostare i punti di interruzione, imposto un punto di interruzione nell’origine dell’applicazione che consuma, dove sto chiamando un metodo o un costruttore dall’assembly e quindi passo INTO (F11) alla chiamata metodo / costruttore.

Il debugger caricherà il file sorgente dell’assembly in VS e nuovi punti di interruzione all’interno dell’assieme possono essere impostati in quel punto.

Non è semplice ma funziona se non vuoi includere un nuovo riferimento al progetto e vuoi semplicemente fare riferimento ad un assembly condiviso.

Avevo i file *.pdb nella stessa cartella e usavo le opzioni da Arindam , ma non funzionava ancora. È risultato necessario abilitare Abilita debug del codice nativo che può essere trovato in Proprietà progetto> Debug .