Come eseguire il debug di progetti di librerie di classi esterne in Visual Studio?


137

Ho un progetto (A) che fa riferimento a un assembly da una libreria di classi di progetto esterno (B) che si trova in un'altra soluzione vs.

Devo ancora capire come posso eseguire il debug in modo efficiente della libreria di classi da B durante l'esecuzione del programma dal progetto A. Esiste qualcosa che devo abilitare sul progetto B come informazioni di debug ecc. In modo da poter intervenire al momento del debug da A?

Grazie in anticipo.

Risposte:


202

Prova a disabilitare Just My Code (JMC).

  • Strumenti -> Opzioni -> Debugger
  • Deseleziona "Abilita solo il mio codice"

Per impostazione predefinita, il debugger cerca di limitare la visione del mondo al codice contenuto solo nella soluzione. Questo a volte è davvero abbondante ma quando si desidera eseguire il debug del codice che non è nella propria soluzione (come è la propria situazione) è necessario disabilitare JMC per vederlo. In caso contrario, il codice verrà trattato come esterno e in gran parte nascosto dalla tua vista.

MODIFICARE

Quando hai interrotto il codice, prova quanto segue.

  • Debug -> Windows -> Moduli
  • Trova la DLL per il progetto che ti interessa
  • Fare clic con il tasto destro -> Carica simboli -> Selezionare il percorso per il .PDB per l'altro progetto

2
la casella di controllo specifica era già deselezionata. Quello che ho notato, però, è che entra in un metodo della libreria esterna, ma passa quando provo a chiamare un metodo che fa parte di un'interfaccia.
Konstantinos,

Potrebbe essere necessario andare alle proprietà di una DLL e assicurarsi che Copia locale sia impostato su True. Altrimenti, i moduli non saranno in grado di trovare il .pdb come riferimento.
Bryan Rayner,

Just My Code non sembra fare alcuna differenza (posso passare al codice esterno anche se è abilitato), ma trovare il modulo nel debugger aiuta.
operatore il

3
Non è stato trovato un file di simboli corrispondente in questa cartella.
Christine,

1
Se non si dispone di file PDB per un modulo di riferimento, ReSharper può essere utilizzato per decompilare i file binari utilizzando l'opzione "Carica simboli con reSharper Deecompiler" nel menu di scelta rapida in Debug / Windows / Moduli. molto potente.
emilast

12

Questo mi ha infastidito per qualche tempo. Quello che di solito finisco per fare è ricostruire la mia libreria esterna usando la modalità debug, quindi copiare sia il file .dll che il file .pdb nel cestino del mio sito web. Questo mi permette di entrare nel codice libarario.


10

Assumi il percorso di

Progetto A

C:\Projects\ProjectA

Progetto B

C:\Projects\ProjectB

e la dll di ProjectB è dentro

C:\Projects\ProjectB\bin\Debug\

Per eseguire il debug ProjectBda ProjectA, attenersi alla seguente procedura

  1. Copia B's DLL con dll di .PDBal ProjectA' s directory compilazione.
  2. Ora debug ProjectA. Quando il codice raggiunge la parte in cui è necessario chiamare il metodo o gli eventi della DLL, ecc. Durante il debug, premere F11per accedere al codice della DLL.

NOTA: NON PERDERE COPIARE IL FILE .PDB


5

Eseguo due istanze di Visual Studio: una per la DLL esterna e una per l'applicazione principale.
Nelle proprietà del progetto della dll esterna, impostare quanto segue:

Crea eventi:

  • copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"

  • copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"

Debug:

  • Avvia programma esterno: C:\<path-to-main>\bin\debug\<AppName>.exe

  • Directory di lavoro C:\<path-to-main>\bin\debug

In questo modo, ogni volta che creo la dll esterna, viene aggiornata nella directory dell'applicazione principale. Se eseguo il debug dal progetto della DLL esterna - viene eseguita l'applicazione principale, ma il debugger raggiunge solo i punti di interruzione nella DLL esterna. Se ho eseguito il debug dal progetto principale, l'applicazione principale viene eseguita con la dll esterna creata più di recente, ma ora il debugger raggiunge solo i punti di interruzione nel progetto principale.

Mi rendo conto che un debugger farà il lavoro per entrambi, ma trovo più facile mantenere i due diritti in questo modo.


1

[secondo Martin Beckett, il ragazzo che mi ha inviato questa risposta]

È possibile eseguire il debug in una libreria esterna.

Nella scheda delle impostazioni del progetto, cerca "directory di Visual Studio" nel campo "Codice sorgente" e includi il percorso delle fonti openCV. Quindi assicurarsi che i file .pdb per ciascuna DLL di debug si trovino nella stessa directory della DLL.


0

Stavo avendo un problema simile poiché i miei punti di interruzione nel progetto (B) non erano stati colpiti. La mia soluzione era quella di ricostruire il progetto (B) e quindi il debug del progetto (A) poiché le DLL dovevano essere aggiornate.

Visual Studio dovrebbe consentire di eseguire il debug in una libreria esterna.


0

Riferimenti NuGet

Supponiamo che -Project_A (produce project_a.dll) -Project_B (produce project_b.dll) e Project_B riferimenti a Project_A dai pacchetti NuGet, quindi copia project_a.dll, project_a.pdb nella cartella Project_B / Packages. In effetti, dovrebbe essere copiato nel / bin.

Ora esegui il debug di Project_A. Quando il codice raggiunge la parte in cui è necessario chiamare il metodo o gli eventi della DLL ecc durante il debug, premere F11 per entrare nel codice della DLL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.