2012-08-28 62 views
6

TL; DR
有誰知道怎麼寫了調試展臺在Visual Studio 2012中,C#,所以我們能想象IEnumerable<string>string[]或類似物體?Visual Studio的可視化工具的IEnumerable <string>

更多信息
的Visual Studio調試可視化工具是偉大的,我用了一些流行的(Mole)定期。然而,現在是推出一些自定義的可視化工具的時候了。我開始了一個簡單的可視化的字符串:

[assembly: System.Diagnostics.DebuggerVisualizer(typeof(My.Namespace.DebuggerSide), 
              typeof(VisualizerObjectSource), 
              Target = typeof(string), 
              Description = "Awesome Visualizer")] 

DebuggerSide的代碼基本上是從模板的例子:

public class DebuggerSide : 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 = (string)objectProvider.GetObject(); 

     using (var displayForm = new VisualizerForm(data)) 
     { 
      windowService.ShowDialog(displayForm); 
     } 
    } 

    /// <summary> 
    /// Tests the visualizer by hosting it outside of the debugger. 
    /// </summary> 
    /// <param name="objectToVisualize">The object to display in the visualizer.</param> 
    public static void TestShowVisualizer(object objectToVisualize) 
    { 
     VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(DebuggerSide)); 
     visualizerHost.ShowVisualizer(); 
    } 
} 

VisualizerForm是額外的控制等自定義窗體... 當我構建項目並將dll放入My Documents/Visual Studio 11/Visualizers文件夾並重新啓動visual studio時,我確實可以看到調試器出現在尋找玻璃圖標下的字符串對象的斷點處。哇噢!到現在爲止還挺好。

現在我想,而不是想像string,可視化string[]IEnumerable<string>或類似的對象。但是,當我將程序集屬性更改爲IEnumerable<string>時,這不起作用,IEnumerable對象上甚至沒有顯示鏡像圖標。

UPDATE
我可以得到它通過改變TargetType的到List<>,然後檢查是否能轉換爲List<string>工作。但是,這意味着我要投我的所有對象我想調試到List不能使用IEnumerable<>或字符串[]

+0

+1對於鼴鼠。我試圖爲集合編寫一個可視化工具,我發現它已經有了。現在去試試摩爾。 **更新:**鼴鼠不再被出售。回到編寫可視化器。 –

+0

給這個鏡頭,適用於所有對象:https://github.com/amithegde/LpDump – Amit

回答

1

展示臺被記錄爲

支持泛型類型是有限的。只有當泛型類型是開放類型時,纔可以爲泛型類型的目標編寫可視化器。

這意味着您無法編寫使用像IEnumerable<string>這樣的封閉構造類型的可視化工具。您是否嘗試將目標類型設置爲IEnumeraable<>,然後檢查以確定元素是否爲string

+0

謝謝,我確實使用了一種方法來檢查對象的內容。 – RoelF

相關問題