前言  

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

VisualStudio自定义调试工具(GIS)的更多相关文章

  1. 几篇关于VisualStudio的调试工具文章

    现代的软件变得日益复杂,强大的调试功能也变得日益重要起来.在VisualStudio的最近几个版本中,在调试工具方面也是增强了不少的,本文转录了几个微软官方介绍的一些新增的调试功能的文章,如果能很好的 ...

  2. VisualStudio 自定义外部命令

    通过自定义命令,可以在 VisualStudio 加上一些自定义命令,可以快速启动 git 或者做其他的事情 添加命令 首先打开工具 外部命令,点击添加,然后在弹出的窗口输入下面内容 例如添加内容是打 ...

  3. Metalama简介5.配合VisualStudio自定义重构或快速操作功能

    使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题 Metalama简介1. 不止是一个.NET跨平台的编译时AOP框架 Metalama简介2.利用Aspect在编译时进行消除重 ...

  4. VisualStudio自定义代码段_方法一

    在VisualStudio里,使用代码段会提高我们的编写速度.其实,就是给一段代码加个快捷方式,使用时,快捷方式按键+2次Tab键. 举个例子: 比如输入Console.WriteLine (); 传 ...

  5. VisualStudio自定义代码段_方法二

    1.在项目中新增一个xml文件为vcoo.snippet,然后右键“插入代码段”,选择Snippet即可: 2.修改代码片段内容后保存: 3.VS菜单中选择“工具”-“代码段管理器”导入这个snipp ...

  6. InnoSetup 以命令行自动编译打包

    本章介绍,在新建Innosetup的编译脚本iss文件后,在不运行Innosetup软件的基础上,以bat自动编译运行打包. 一.添加Innosetup软件包 下载InnoSetup软件包并解压到bu ...

  7. dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...

  8. 2018-8-10-dotnet-从入门到放弃的-500-篇文章合集

    title author date CreateTime categories dotnet 从入门到放弃的 500 篇文章合集 lindexi 2018-08-10 19:16:52 +0800 2 ...

  9. 2018-8-10-VisualStudio-自定义外部命令

    title author date CreateTime categories VisualStudio 自定义外部命令 lindexi 2018-08-10 19:16:53 +0800 2018- ...

随机推荐

  1. MySql优化相关概念的理解笔记

    MySQL架构 查询执行流程 查询执行的流程是怎样的: 连接1.1客户端发起一条Query请求,监听客户端的‘连接管理模块’接收请求1.2将请求转发到‘连接进/线程模块’1.3调用‘用户模块’来进行授 ...

  2. openSession 与 getCurrentSession的区别

    1.openSession 每一次获得的是一个全新的session对象,而getCurrentSession获得的是与当前线程绑定的session对象 package cn.kiwifly.view; ...

  3. Codeforces Round #461 (Div. 2)B-Magic Forest+位运算或优雅的暴力

    Magic Forest 题意:就是在1 ~ n中找三个值,满足三角形的要求,同时三个数的异或运算还要为0: , where  denotes the bitwise xor of integers  ...

  4. POJ-1062 昂贵的聘礼 (最短路)

    POJ-1062 昂贵的聘礼:http://poj.org/problem?id=1062 题意: 有一个人要到1号点花费最少的钱,他可以花费一号点对应的价格,也可以先买下其他一些点,使得费用降低. ...

  5. HDU3068 最长回文 Manacher's Algorithm 马拉车算法 模板

    HDU3068 复习了一下这个算法, 注意数组大小要开两倍大. #include <algorithm> #include <iterator> #include <io ...

  6. codeforces 879 D. Teams Formation(思维)

    题目链接:http://codeforces.com/contest/879/problem/D 题意:这题题意我反正是看了很久,可能是我的理解能力有点差,就是将一个数组倍增m倍然后将连续的相同的k个 ...

  7. yzoj 1201数字三角形3题解

    题意 如下图所示为一个数字三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 请编程计算从顶至底部某处的一条路径,使该路径所经过的数字的总和最大.约定: (1)每一步可沿直线向下或右 ...

  8. 多级树的深度遍历与广度遍历(Java实现)

    目录 多级树的深度遍历与广度遍历 节点模型 深度优先遍历 广度优先遍历 多级树的深度遍历与广度遍历 深度优先遍历与广度优先遍历其实是属于图算法的一种,多级树可以看做是一种特殊的图,所以多级数的深/广遍 ...

  9. eclipse中SpringBoot的maven项目出现无法解析父类的解决办法

    在eclipse中建立SpringBoot的maven项目时,继承父类,添加如下代码: <parent> <groupId>org.springframework.boot&l ...

  10. MD5字符串加密

    MD5字符串加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 132 ...