2010-08-13 47 views
6

我写了我自己的调试器可视化器。Visual Studio不加载我的调试器可视化器

它和属性都在它们自己的程序集中。包含要调试的类的程序集中没有引用或属性 - 我想制作一个可供人们使用的可选dll。

我试图调试的类是通用的。

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

下面是可视化:

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

我运行Visual Studio 2010,和下面的目录包含展示台大会的.dll和.PDB:

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

我在一个特别是FinCellTable的IFinCellTable实例上放置一个断点。它不显示放大镜。

我调试Visual Studio使用另一个Visual Studio作为第一个VS调试。我看到输出窗口是第一个VS加载的DLL。当我在一个数据表上触发一个可视化器时,第二个VS输出它加载了Microsoft.VisualStudio.DebuggerVisualizers.dll和Microsoft.VisualStudio.Debugger.DataSetVisualizer.dll(后者来自我上面说的正确的目录)。 (模块窗口的行为/显示相同)。

因此很显然,我的调试器Visualizer Drop-In组件不是由VS加载的,所以它不知道要显示放大镜。

如何让视觉工作室预先加载展示器,因此插入式展示器工作而且您不需要编辑原始代码?

+0

没有任何内容跳出。您*确实*在复制可视化器后重新启动VS,对吧? – 2010-08-13 16:58:28

+0

你需要做某种UI或环境重装吗?这是以前版本中的附件所必需的。 – 2010-11-05 14:25:51

+0

奇怪。我完成了你在这里描述的内容:http://www.adamjamesnaylor.com/HowToWriteADebugVisualiserInVisualStudio.aspx,它似乎工作正常。正如米歇尔问,你确定它在正确的文件夹?我问,因为在工作中,我的Visual Studio用户文件夹在网络共享上,VS在尝试访问共享时抛出安全异常。 – 2012-08-21 20:19:01

回答

3

狂猜:你确定正确的文件在C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers,而不是在C:\Users\<you>\AppData\Local\VirtualStore\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers

如果是,那是由于UAC Virtualization

0

我相信这可以在工具>选项中禁用: 如果您没有看到DebuggerDisplay或DebuggerTypeProxy的效果,请确保未选中工具>选项>调试>常规>显示变量窗口中对象的原始结构。

0

要放置它的正确文件夹是: C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ Packages \ Debugger \ Visualizers。一旦你把这个DLL放到那里并重新启动visual studio,那么你应该在“Expression”类型的变量上获得一个“放大镜”(在调试模式下,你将在监视窗口获得它,当你将鼠标光标移动到变量上时)

1

这个问题是超过5岁,所以我认为它不再相关的原始的海报,但对于其他人试图做同样的事情:当目标是一个接口

System.Diagnostics.DebuggerVisualizer不起作用。你必须指定一个具体类型。您必须指定要显示的每种具体类型的属性:

[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() 
{ 
相关问题