[连载]《C#通讯(串口和网络)框架的设计与实现》- 11.调试器的设计
目 录
第十一章 调试器设计... 2
11.1 调试接口... 2
11.2 界面方式调试... 3
11.3 命令行方式调试... 5
11.4 小结... 6
第十一章 调试器设计
SuperIO 框架平台设计、开发完毕后,想把代码编译成程序集(DLL),二次开发都通过引用DLL实现接口、继承类库来实现驱动和插件的开发,SuperIO框架的代码不会轻易去改变。这是框架设计最终要达到的效果,但是在二次开发过程中还是很不方便,主要涉及到两方面的问题:1.开发好驱动后,如何验证驱动的最终效果?例如:原始数据的解析、数据的处理流程和功能的实现等等,所以要在Debug模式下能够调试驱动的源代码,而不是调试SuperIO本身的代码。不可能把开发好驱动反复挂载到配置文件中,反复启动软件来验证驱动开发的效果,那将是耗时耗力的一件事。2.在Debug模式下,也就是在调试过程中,SuperIO框架是要有选择性的与配置文件信息进行交互,尽管只是调试驱动模块的源代码,但是整个框架平台是处于调试模式,例如:在调试模式下,不加载配制文件中驱动;在调试模式下,不把设备驱动的信息写到配制文件中等等。
基于现实应用情况,在框架平台中增加了调试器的功能。这块代码的实现并不复杂,但是在框架平台的体系中是必要的一部分。就像人缺少了一部分后,总显得不那么完美。
11.1 调试接口
IDebugDevice接口定义了4个调试接口函数,主要用于对设备驱动、界面视图、数据导出和服务组件进行源代码调试。接口定义如下图:

11.2 界面方式调试
二次开发者可以继承SuperIO.UI.MainForm窗体类来创建自己的宿主程序,可以在此基础上进行扩展。SuperIO.UI.MainForm类本身继承了IDebugDevice接口,并实现了每个调试接口。实现调试接口,本质上是对控制器(SuperIO.DeviceController)的操作,接口实现代码如下:
/// <summary>
/// 调试设备,传入IRunSCLDevice接口
/// </summary>
/// <param name="dev"></param>
public void DebugDevice(IRunDevice dev)
{
this._DeviceController.AddDevice(dev);
} /// <summary>
/// 调试视图窗体,该窗体必须继承SuperIO.Show.IRTDataShow接口
/// </summary>
/// <param name="rtdataform"></param>
public void DebugGraphicsShow(SuperIO.Show.IGraphicsShow show)
{
if (show is System.Windows.Forms.Form)
{
System.Windows.Forms.Form from = show as System.Windows.Forms.Form;
from.MdiParent = this;
from.Show();
this._DeviceController.AddGraphicsShow(show);
}
else
{
MessageBox.Show("实现IGraphicsShow的同时,实例必须还得是Form类型");
}
} /// <summary>
/// 调试导出数据接口,该类接口必须继承SuperIO.MiddleData.IExportData
/// </summary>
/// <param name="export"></param>
public void DebugExportData(IExportData export)
{
this._DeviceController.AddExportData(new List<IExportData>(new IExportData[] { export }));
} /// <summary>
///
/// </summary>
/// <param name="appService"></param>
public void DebugAppService(IAppService appService)
{
if (appService.ServiceType == ServiceType.Show)
{
BarButtonItem bt = new BarButtonItem(this.barManager1, appService.ThisName);
Font font = new Font("Tahoma", 12);
bt.ItemAppearance.SetFont(font);
bt.Tag = appService.ThisKey;
bt.ItemClick += new ItemClickEventHandler(ServiceItem_ItemClick);
barServices.AddItem(bt);
}
_DeviceController.AddAppService(new List<IAppService>(new IAppService[]{appService})); }
有界面方式的调试需要与配置文件进行交互,所以需要设置当前是否处于调试模式,可以通过SuperIO.Device.DebugDevice静态类的IsDebug属性进行标识。
建议使用这种方式对二次开发的组件进行调试。
11.3 命令行方式调试
也可以通过命令行的方式对二次开发的组件进行调试,实际上是SuperIO.Device.DebugDevice静态类用单例的模式创建了SuperIO.UI.MainForm窗体实例,并返回了IDebugDevice接口实例。简单的驱动和插件调试工作可以采用这种调试模式,快捷高效。代码定义如下:
namespace SuperIO.Device
{
public class DebugDevice
{
private static object _LockObj = new object();
private static SuperIO.Device.IDebugDevice _DebugInstance = null;
/// <summary>
/// 获得调试设备实例
/// </summary>
/// <returns></returns>
public static SuperIO.Device.IDebugDevice GetDebugInstance()
{
if (_DebugInstance == null)
{
lock (_LockObj)
{
if (_DebugInstance == null)
{
_DebugInstance = (new SuperIO.UI.MainForm()) as SuperIO.Device.IDebugDevice;
}
}
}
return _DebugInstance;
} private static bool _IsDebug = false;
/// <summary>
/// 是否是调试模式,如果是否不调用配制文件的信息
/// </summary>
public static bool IsDebug
{
get { return _IsDebug; }
set { _IsDebug = value; }
}
}
}
使用这种调试模式,不需要通过SuperIO.Device.DebugDevice. IsDebug属性设置为调试模式。
11.4 小结
任何组件的设计可能并不复杂,但是给工作带来很大方便。调试器更多的是一个概念,并没有太多的实际代码,但是在二次开发过程中确实方便了很多。
下一章介绍《第12章 二次开发及应用》。
[连载]《C#通讯(串口和网络)框架的设计与实现》- 11.调试器的设计的更多相关文章
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 0.前言
目 录 前言 前言 刚参加工作,使用过VB.VC开发软件,随着C#的崛起,听说是C++++,公司决定以后开发软件使用C#,凭借在 ...
- 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍
[连载]<C#通讯(串口和网络)框架的设计与实现>- 0.前言 目 录 第一章 通讯框架介绍... 2 1.1 通讯的本质... 2 1 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 6.通讯控制器的设计
目 录 第六章 通讯控制器的设计... 2 6.1 控制器接口... 2 6.2 串口控制器... 3 6.3 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》-2.框架的总体设计
目 录 C#通讯(串口和网络)框架的设计与实现... 1 (SuperIO)- 框架的总体设计... 1 第二章 框架总体的设计... 2 2.1 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 5.串口和网络统一IO设计
目 录 第五章 串口和网络统一IO设计... 2 5.1 统一IO接口... 2 5.1.1 串口IO.. 4 5.1.2 网络IO.. ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》-4.设备驱动管理器的设计
目 录 第四章 设备驱动管理器的设计... 2 4.1 接口定义... 2 4.2 设备容器... 7 4.3 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》-3.设备驱动的设计
目 录 第三章 设备驱动的设计... 2 3.1 初始化设备... 4 3.2 运行设备接口设计... 4 3.3 ...
- [连载]《C#通讯(串口和网络)框架的设计与实现》- 10.宿主程序详细设计
目 录 第十章 宿主程序详细设计... 2 10.1 配置文件设计... 3 10.2 加载设备驱动... 4 10.3 加载 ...
随机推荐
- 【centos7常用技巧】RPM打包
一.RPM打包的目的 1.当目标机中不存在编译环境时,可以先在本地环境中编译打包,然后直接在目标机中用rpm -ivh *.rpm安装即可. 2.当需要在目标机中安装多个软件或者增加多个文件时,可以将 ...
- ABP理论之CSRF
返回总目录 本篇目录 介绍 ASP.NET MVC ASP.NET WEB API ASP.NET Core[以后补上] 客户端类库 内部原理 介绍 CSRF[Cross-Site Request F ...
- 【转】ofbiz数据库表结构设计
真心不错的文章,可以加深对企业信息化的设计理解:) http://blog.sina.com.cn/s/blog_a2ca5d8c01017fa0.html http://blog.sina.com. ...
- EasyPR--开发详解(5)颜色定位与偏斜扭转
本篇文章介绍EasyPR里新的定位功能:颜色定位与偏斜扭正.希望这篇文档可以帮助开发者与使用者更好的理解EasyPR的设计思想. 让我们先看一下示例图片,这幅图片中的车牌通过颜色的定位法进行定位并从偏 ...
- ScrollView嵌套ListView,GridView数据加载不全问题的解决
我们大家都知道ListView,GridView加载数据项,如果数据项过多时,就会显示滚动条.ScrollView组件里面只能包含一个组件,当ScrollView里面嵌套listView,GridVi ...
- XSS原理
跨站脚本攻击(Cross-Site Scripting),是一种网站应用程序的安全漏洞,是代码注入攻击的一种. XSS的种类: 反射型XSS: 非持久型XSS(需要自行触发,输入-输出). ...
- json数据格式及json校验格式化工具简单实现
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, ...
- Maven中安装本地Jar包到仓库中或将本地jar包上传
摘要 maven install 本地jar 命令格式 mvn install:install-file -DgroupId=<group_name> -DartifactId=<a ...
- 3、C#核心编程结构下
本学习主要参考Andrew Troelsen的C#与.NET4高级程序设计,这小节主要述说以下几个东西: 这一小节是上一小节的补充,主要涉及到一下的知识细节: 1.C#方法的各种细节 2.探讨out ...
- spring帝国-开篇
spring简介: spring是一个开源框架,spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Dev ...