2010-08-13 20 views
6

Escribí mi propio Debugger Visualizer.Visual Studio no está cargando mi visualizador de depuración

Es, y los atributos, están en su propio conjunto. No hay referencias o atributos en el ensamblaje que contenga la clase que se va a depurar: deseo crear un archivo DLL opcional que las personas puedan usar.

La clase que estoy tratando de depurar es genérica.

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

Aquí es el visualizador:

[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); 
      } 
     } 
    } 
} 

Me postulo Visual Studio 2010, y el siguiente directorio contiene los archivos .dll y .pdb de la Asamblea visualizador:

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

I coloque un punto de interrupción en una instancia de IFinCellTable que sea específicamente FinCellTable. No muestra la lupa.

Depugé Visual Studio usando otro Visual Studio como el primer VS que estaba depurando. Vi la ventana de salida como la primera VS cargada dll. Cuando activé un visualizador en una tabla de datos, el segundo VS emitió que cargó Microsoft.VisualStudio.DebuggerVisualizers.dll y Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll (este último del directorio correcto que dije anteriormente). (La ventana de Módulos se comporta/muestra lo mismo.)

Así que, obviamente, mi ensamblaje de Drop-In de Debugger Visualizer no se carga por VS, por lo que no sabe mostrar la lupa.

¿Cómo se obtiene visual studio para cargar los visualizadores por adelantado, por lo que los visualizadores integrados funcionan y no es necesario editar el código original?

+0

Nada salta. Usted * reinició VS * después de copiar el visualizador, ¿verdad? –

+0

¿Necesita hacer algún tipo de recarga de UI o entorno?Esto fue requerido para complementos en versiones anteriores. –

+0

Extraño. Hice exactamente lo que describes aquí: http://www.adamjamesnaylor.com/HowToWriteADebugVisualiserInVisualStudio.aspx y parecía funcionar bien. Cuando Michel pregunta, ¿estás seguro de que está en la carpeta correcta? Lo pregunto porque en el trabajo mi carpeta de usuario de Visual Studio está en una red compartida y VS arroja excepciones de seguridad cuando intenta acceder al recurso compartido. –

Respuesta

3

Wild guess: ¿está seguro de que los archivos correctos están en C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers, no en C:\Users\<you>\AppData\Local\VirtualStore\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers?

En caso afirmativo, eso se debe a UAC Virtualization.

0

Creo que esto se puede desactivar en Herramientas> Opciones: Si no ve los efectos de DebuggerDisplay o DebuggerTypeProxy asegúrese de que Herramientas> Opciones> Depuración> General> Mostrar estructura sin procesar de objetos en ventanas de variables NO esté marcada.

0

La carpeta correcta para colocarlo es: C: \ Archivos de programa (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ Packages \ Debugger \ Visualizers. Una vez que coloque esta DLL allí y reinicie Visual Studio, entonces debería obtener una "lupa" sobre el tipo de variables "Expression" (en modo de depuración lo obtendrá en la ventana de observación y también cuando mueva el cursor sobre la variable)

1

Esta pregunta es más de 5 años de edad, así que supongo que ya no es relevante para el cartel original, pero para cualquier otra persona que intenta hacer algo similar:

System.Diagnostics.DebuggerVisualizer no funciona cuando es objetivo de una interfaz . Tienes que especificar un tipo concreto. Debe especificar el atributo en cada tipo concreto concreto que desea visualizar:

[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() 
{ 
Cuestiones relacionadas