2010-08-13 24 views
6

Ho scritto il mio proprio Visualizzatore di debugger.Visual Studio non sta caricando il mio visualizzatore debugger

Esso e gli attributi sono nel proprio assieme. Non ci sono riferimenti o attributi nell'assembly che contiene la classe da debugare - Voglio fare una drop-in dll che è facoltativa per le persone da usare.

La classe che sto cercando di eseguire il debug è un generico.

[Serializable] 
public class FinCellTable<S> : IFinCellTable, IEnumerable<List<FinCell.IFinCell>> 
    where S : class, FinCell.IFinHeaderCell, FinCell.IFinCell, new() 

Ecco il visualizzatore:

[assembly: System.Diagnostics.DebuggerVisualizer(
     typeof(Financials.Debugging.CellTableVisualizer), 
     typeof(VisualizerObjectSource), 
     Target = typeof(Financials.Transformation.IFinCellTable), 
     Description = "FinCell Table Visualizer")] 
[assembly: System.Diagnostics.DebuggerVisualizer(
     typeof(Financials.Debugging.CellTableVisualizer), 
     typeof(VisualizerObjectSource), 
     Target = typeof(Financials.Transformation.FinCellTable<Financials.FinCell.FinHeaderCell>), 
     Description = "FinCell Table Visualizer")] 

namespace Financials.Debugging 
{ 
    public class CellTableVisualizer : DialogDebuggerVisualizer 
    { 
     protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) 
     { 
      if (windowService == null) throw new ArgumentNullException("windowService"); 
      if (objectProvider == null) throw new ArgumentNullException("objectProvider"); 

      var data = (IFinCellTable)objectProvider.GetObject(); 
      using (var displayForm = new CellTableVizForm()) 
      { 
       displayForm.PopulateForm(data); 
       windowService.ShowDialog(displayForm); 
      } 
     } 
    } 
} 

Sono in esecuzione Visual Studio 2010, e la seguente directory contiene la DLL e PDB dell'Assemblea Visualizer:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers 

I posizionare un punto di interruzione su un'istanza di IFinCellTable che è specificatamente FinCellTable. Non mostra la lente d'ingrandimento.

Ho eseguito il debug di Visual Studio utilizzando un altro Visual Studio poiché il primo VS stava eseguendo il debug. Ho visto la finestra di output come la prima DLL di VS caricata. Quando ho attivato un visualizzatore su un datatable, il secondo VS ha emesso il messaggio che caricava Microsoft.VisualStudio.DebuggerVisualizers.dll e Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll (quest'ultimo dalla directory corretta che ho detto sopra). (La finestra Modules si comporta/mostra lo stesso.)

Quindi, ovviamente, l'assembly Drop-In di Visualizzatore Debugger non viene caricato da VS, quindi non è in grado di visualizzare la lente d'ingrandimento.

Come si ottiene Visual Studio per caricare Visualizer in anticipo, quindi i visualizzatori drop-in funzionano e non è necessario modificare il codice originale?

+0

Niente salta fuori. Hai * fatto * riavvia VS dopo aver copiato il visualizzatore, giusto? –

+0

Hai bisogno di fare una sorta di interfaccia utente o di ricarica dell'ambiente?Questo era necessario per i componenti aggiuntivi nelle versioni precedenti. –

+0

Strano. Ho fatto esattamente ciò che descrivi qui: http://www.adamjamesnaylor.com/HowToWriteADebugVisualiserInVisualStudio.aspx e sembrava funzionare bene. Come chiede Michel, sei sicuro che sia nella cartella corretta? Chiedo perché al lavoro la mia cartella utente di Visual Studio è su una condivisione di rete e VS genera eccezioni di sicurezza quando si tenta di accedere alla condivisione. –

risposta

3

Wild guess: sei sicuro che i file corretti siano in C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers, non in C:\Users\<you>\AppData\Local\VirtualStore\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers?

In caso affermativo, ciò è dovuto a UAC Virtualization.

0

Credo che questo possa essere disabilitato in Strumenti> Opzioni: Se non vedi gli effetti di DebuggerDisplay o DebuggerTypeProxy assicurati che Strumenti> Opzioni> Debug> Generale> Mostra la struttura non elaborata degli oggetti nelle finestre delle variabili NON sia spuntata.

0

La cartella corretta per posizionarlo è: C: \ Programmi (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ Packages \ Debugger \ Visualizer. Una volta posizionata questa DLL e riavviato Visual Studio, dovresti ottenere una "lente di ingrandimento" sopra il tipo di variabili "Expression" (in modalità di debug lo troverai nella finestra di controllo e anche quando muovi il cursore del mouse sulla variabile)

1

Questa domanda è più di 5 anni, quindi suppongo che non è più rilevante per il manifesto originale, ma per chiunque altro cercando di fare qualcosa di simile:

System.Diagnostics.DebuggerVisualizer non funziona quando il bersaglio è un'interfaccia . Devi specificare un tipo concreto. Devi specificare l'attributo su ogni singolo tipo di calcestruzzo che vuoi visualizzare:

[System.Diagnostics.DebuggerVisualizer("Financials.Debugging.CellTableVisualizer, Financials.Debugging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=...")] 
[Serializable] 
public class FinCellTable<S> : IFinCellTable, IEnumerable<List<FinCell.IFinCell>> 
    where S : class, FinCell.IFinHeaderCell, FinCell.IFinCell, new() 
{ 
Problemi correlati