自定義可視化調試工具(Microsoft.VisualStudio.DebuggerVisualizers)

前言: 

最近飛機失聯的太多,明天要飛北京處理服務器雙機熱備的問題,航空保險已買,單號是:TF10122913。 服務器

至於個人銀行卡密碼,在我枕頭下面的字條裏,要是我以後沒再更新文章,請通知我家人,哈哈哈哈。ide

好了,Joke 被 Play 後,下面 Enter 正文。 工具

背景:

話說:使用CYQ.Data時,會常常斷點MDataTable的對象,爲了查看錶格的數據內容,在監視裏會常ToDataTable(),而後借可DataTable的可視化方式查看錶格。

近日:心中莫名就來了一句話,不轉行不行?狠想直接看MDataTable的對象,Like This:spa

 

因而通過一翻小研究,就有了下面的內容。插件

 

1:什麼是:可視化調試工具(Microsoft.VisualStudio.DebuggerVisualizers)

用文字描述顯的太無力,我直接上圖,很直觀:調試

A:對字符串的可視化調試展現: 

 

B:對DataSet、DataTable系列的可視化展現:

 

如上圖,簡單一句話總結一下就是:對指定某種類型的可視化插件展現。 code

 

2:怎麼實現:可視化調試工具(Microsoft.VisualStudio.DebuggerVisualizers) 

不說你覺得很複雜,一說其實簡單的要命,這裏對圖片System.Draw.Image進行示例,最終效果以下圖:

 

下面跟着我一塊兒來:

步驟一:新建個項目=》類庫=》添加一個類。
步驟二:引用:Microsoft.VisualStudio.DebuggerVisualizers 
步驟三:輸入如下代碼:

using Microsoft.VisualStudio.DebuggerVisualizers;
using System;
using System.Drawing;
using System.Windows.Forms;

[assembly: System.Diagnostics.DebuggerVisualizer(
typeof(CYQ.Visualizer.ImageVisualizer),
typeof(VisualizerObjectSource),
Target =  typeof(System.Drawing.Image),
Description =  " Image Visualizer ")]
namespace CYQ.Visualizer
{
     public  class ImageVisualizer : DialogDebuggerVisualizer
    {
         override  protected  void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
        {
            Image image = (Image)objectProvider.GetObject();

            Form form =  new Form();
            form.Text =  string.Format( " Width: {0}, Height: {1} ", image.Width, image.Height);
            form.ClientSize =  new Size(image.Width, image.Height);
            form.FormBorderStyle = FormBorderStyle.FixedToolWindow;

            PictureBox pictureBox =  new PictureBox();
            pictureBox.Image = image;
            pictureBox.Parent = form;
            pictureBox.Dock = DockStyle.Fill;

            windowService.ShowDialog(form);
        }
     }
  }

而後編繹成功後變成一個Xxx.dll,就OK了。

 

簡單的說明一下代碼流程:

1:新建一個類,叫XXXX,須要繼承自:DialogDebuggerVisualizer
2:重寫方法Show(有兩個參數)
3:代碼裏,第一行:objectProvider.GetObject() 返回你要處理的類的實體的拷貝,你進行一下類型轉換就能夠了。
這裏說明一下,要處理的必須是序列化的。
4:最後一行: windowService.ShowDialog(控件);就是展現呈現一個控件了,一般咱們用Form來顯示。
5:中間那一塊,就是咱們自定要的呈現了,本身要寫的東西也就是這些了,學點Winform知識你就會了。
6:最後一步,指定要被插件反射用的程序集信息: 上面有三個typeof
第一個typeof(就是那個XXXX類) 第二個typeof(按示例不用管,除非你須要自定義本身的序列化) 第三個typeof(你要可視化呈現的類) 

3:如何部署:可視化調試工具(Microsoft.VisualStudio.DebuggerVisualizers)

 一句話,把那個Xxx.dll放到如下目錄:VS安裝目錄\Microsoft Visual Studio XXX\Common7\Packages\Debugger\Visualizersorm

 而後就自動生效了,當你調試時,會被加載,進而呈現你的那個效果。對象

4:源碼下載及說明

 對於不一樣的VS(200五、200八、20十二、2015),你須要編繹不一樣的版本,主要是引用的:Microsoft.VisualStudio.DebuggerVisualizers 這個版本不同。blog

 下載地址:CYQ.Visualizer.rar 下載

相關文章
相關標籤/搜索