2010-08-13 101 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() 
{ 
相關問題