2012-08-28 21 views
6

TL; DR
Có ai biết làm thế nào để viết một Debug Visualizer cho Visual Studio 2012, trong C#, vì vậy tôi có thể hình dung IEnumerable<string>, string[] hoặc tương tự đối tượng?Visual Studio Visualizer cho IEnumerable <string>

More Info
Visual Studio gỡ lỗi Visualizer là rất lớn, và tôi sử dụng một số những người nổi tiếng (Mole) thường xuyên. Tuy nhiên, bây giờ đã đến lúc triển khai một số trình hiển thị tùy chỉnh. Tôi bắt đầu với một visualizer đơn giản cho một chuỗi:

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

mã của DebuggerSide về cơ bản là ví dụ từ mẫu:

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 là hình thức tùy chỉnh với các điều khiển thêm vv ... khi tôi xây dựng dự án và đặt dll trong thư mục My Documents/Visual Studio 11/Visualizers và khởi động lại studio trực quan, tôi thực sự có thể thấy trình gỡ lỗi xuất hiện dưới biểu tượng kính tìm kiếm khi một điểm ngắt được nhấn cho một đối tượng chuỗi. Woohoo! Càng xa càng tốt.

Bây giờ tôi muốn thay vì hiển thị string, trực quan hóa string[] hoặc IEnumerable<string> hoặc một đối tượng tương tự. Tuy nhiên khi tôi thay đổi thuộc tính assembly thành IEnumerable<string>, điều này không hoạt động, thậm chí không có biểu tượng kính tìm kiếm được hiển thị trên các đối tượng IEnumerable.

CẬP NHẬT
tôi có thể lấy nó để làm việc bằng cách thay đổi TargetType để List<> và sau đó kiểm tra nếu tôi có thể đúc để List<string>. Tuy nhiên, điều này có nghĩa là tôi phải bỏ tất cả các đối tượng của tôi, tôi muốn gỡ lỗi để List và không thể sử dụng IEnumerable<> hoặc string []

+0

+1 cho nốt ruồi. Tôi đã cố gắng để viết một visualizer cho các bộ sưu tập và tôi thấy nó đã có nó. Hãy thử Mole ngay bây giờ. ** Cập nhật: ** Mole không còn được bán nữa. Quay lại để viết một visualizer. –

+0

Cung cấp cho một shot, làm việc cho tất cả các đối tượng: https://github.com/amithegde/LpDump – Amit

Trả lời

1

visualizers được ghi nhận như

Hỗ trợ cho các loại thuốc chung là hạn chế. Bạn có thể viết trình hiển thị trực quan cho mục tiêu là loại chung loại chỉ khi loại chung là loại mở.

Điều đó có nghĩa là bạn không thể viết trình hiển thị sử dụng loại được xây dựng kín như IEnumerable<string>. Bạn đã thử đặt loại mục tiêu thành IEnumeraable<> sau đó kiểm tra xem các phần tử có thuộc loại string không?

+0

cảm ơn, tôi thực sự sử dụng một cách tiếp cận, nơi tôi kiểm tra các nội dung của đối tượng. – RoelF

Các vấn đề liên quan