前言
Visual Studio 調試器自帶很多調試工具,調試時斷點光標在類型上,會發現有放大鏡圖標的,就可以進行可視化查看該類型。常見的有文本可視化工具、HTML 可視化工具、XML 可視化工具和數據集可視化工具。有時候需要調試查看特定類型時,就需要定制調試工具。比如調試時查看Image,查看自定義表格數據,GIS開發調試時查看幾何圖形等
關鍵小點
1.Microsoft.VisualStudio.DebuggerVisualizers.dll類庫。在引用管理器中擴展中可以找到
2.IGeometry和String之間轉換(為啥要轉?IGeometry不支持序列化,在調試工具宿主到VS調試進程中時,無法將IGeometry對象序列化傳遞給調試工具,也是迫不得已轉成string,調試時需要多加兩行代碼轉成string才能調動調試工具,也是有點繁瑣,大佬們有什么建議,留言砸我)
3.GDI繪制IGeometry(為啥不用Map直接承接圖形顯示?試過才知道,ActiveX控件無法在非單線程單元初始化,所以算了,還是用最基礎的GDI繪制)
文末有參考鏈接和domo下載
和所有插件開發流程一樣:制作插件-調試插件-安裝插件-使用
一、制作插件
1.新建類庫項目,引入必要Microsoft.VisualStudio.DebuggerVisualizers.dll類庫
2.新建可視化的類。繼承自DialogDebuggerVisualizer。重寫Show方法。你也可以在模板中選擇調試工具更方便
public class ESRIGeometryVisualizer : DialogDebuggerVisualizer { override protected void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) { byte[] wkb = Convert.FromBase64String(objectProvider.GetObject().ToString()); FormShowCustom frm = new FormShowCustom(); frm.OriginWkb = wkb; windowService.ShowDialog(frm); } public static void TestESRIGeometryVisualizer(object objectToVisualize) { VisualizerDevelopmentHost visualizerHost = new VisualizerDevelopmentHost(objectToVisualize, typeof(ESRIGeometryVisualizer)); visualizerHost.ShowVisualizer(); } }
3.命名空間上面需要添加一下特性代碼用於調試時識別
[assembly: System.Diagnostics.DebuggerVisualizer( typeof(GeometryVisualizer.ESRIGeometryVisualizer), typeof(VisualizerObjectSource), Target = typeof(string), Description = "ESRIGeometry可視化工具")]
4.創建一個窗體用於顯示IGeometry。(demo中可見具體算法,利用GDI繪制IGeometry)
二、調試插件
demo中創建個簡單控制台應用程序用於調試。如果你是VS2012、ArcGIS10.2環境可以直接運行
三、安裝插件
編譯成dll后。直接丟到以下兩個路徑
VisualStudioInstallPath\Common7\Packages\Debugger\Visualizers
My Documents\VisualStudioVersion\Visualizers
四、使用插件
重新啟動調試,在IGeometry類型處,將其轉換為string后。光標在類型上會發現放大鏡中已經增加了ESRIGeometry可視化工具選項。
最后顯示結果就是下面這樣
最令人不舒服的就是調試時,需要多加兩行代碼轉成string。相信開源的世界應該會更好點。
IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
byte[] b = factory.CreateWkbVariantFromGeometry(pGeo) as byte[];
string str = Convert.ToBase64String(b);
碎語
僅提供一個調試可視化工具的開發流程,實際可以根據不同的待可視化類型進行定制。比如有基礎平台框架的,底層通用類,且有很多開發人員使用,可以針對需要可視化調試的類進行定制。XML自定義可視化顯示、圖像顯示、流程顯示、一些圖形算法過程等
參考鏈接
https://www.cnblogs.com/cyq1162/p/4551652.html
https://docs.microsoft.com/en-us/visualstudio/debugger
demo源碼下載 提取碼 buti