目       录

第十一章     调试器设计... 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.调试器的设计的更多相关文章

  1. [连载]《C#通讯(串口和网络)框架的设计与实现》- 0.前言

                                  目       录 前言 前言 刚参加工作,使用过VB.VC开发软件,随着C#的崛起,听说是C++++,公司决定以后开发软件使用C#,凭借在 ...

  2. 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  3. [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍

    [连载]<C#通讯(串口和网络)框架的设计与实现>- 0.前言 目       录 第一章           通讯框架介绍... 2 1.1           通讯的本质... 2 1 ...

  4. [连载]《C#通讯(串口和网络)框架的设计与实现》- 6.通讯控制器的设计

    目       录 第六章           通讯控制器的设计... 2 6.1           控制器接口... 2 6.2           串口控制器... 3 6.3          ...

  5. [连载]《C#通讯(串口和网络)框架的设计与实现》-2.框架的总体设计

    目       录 C#通讯(串口和网络)框架的设计与实现... 1 (SuperIO)- 框架的总体设计... 1 第二章           框架总体的设计... 2 2.1           ...

  6. [连载]《C#通讯(串口和网络)框架的设计与实现》- 5.串口和网络统一IO设计

    目       录 第五章           串口和网络统一IO设计... 2 5.1           统一IO接口... 2 5.1.1    串口IO.. 4 5.1.2    网络IO.. ...

  7. [连载]《C#通讯(串口和网络)框架的设计与实现》-4.设备驱动管理器的设计

    目       录 第四章           设备驱动管理器的设计... 2 4.1           接口定义... 2 4.2           设备容器... 7 4.3          ...

  8. [连载]《C#通讯(串口和网络)框架的设计与实现》-3.设备驱动的设计

    目       录 第三章           设备驱动的设计... 2 3.1           初始化设备... 4 3.2           运行设备接口设计... 4 3.3        ...

  9. [连载]《C#通讯(串口和网络)框架的设计与实现》- 10.宿主程序详细设计

    目       录 第十章           宿主程序详细设计... 2 10.1        配置文件设计... 3 10.2        加载设备驱动... 4 10.3        加载 ...

随机推荐

  1. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

  2. 安装并使用PHPunit

    安装并使用PHPunit Linux 下安装PHPunit PHP 档案包 (PHAR)  要获取 PHPUnit,最简单的方法是下载 PHPUnit 的 PHP 档案包 (PHAR),它将 PHPU ...

  3. Java中的进程和线程

     Java中的进程与线程 一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是 ...

  4. About me

    stay hungry, stay foolish VaJoy / 蓝邦珏 Addr:Tencent Shenzhen E-Mail:vajoy@qq.com 站内:http://space.cnbl ...

  5. [开源]QuickSwitchSVNClient,快速完成SVN Switch的工具

    在实际的开发中,我们一般使用SVN工具进行源代码的管理.在实际的产品开发中,根据项目的一些定制要求,往往需要对某一些代码的修改,但是又不想影响主要的开发,这个时候需要对当前的主分支做一些分支处理(br ...

  6. Go语言实战 - revel框架教程之CSRF(跨站请求伪造)保护

    CSRF是什么?请看这篇博文“浅谈CSRF攻击方式”,说的非常清楚. 现在做网站敢不防CSRF的我猜只有两种情况,一是没什么人访问,二是局域网应用.山坡网之前属于第一种情况,哈哈,所以至今没什么问题. ...

  7. ABP(现代ASP.NET样板开发框架)系列之13、ABP领域层——数据过滤器(Data filters)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之13.ABP领域层——数据过滤器(Data filters) ABP是“ASP.NET Boilerplate P ...

  8. ABP源码分析四十五:ABP ZERO中的EntityFramework模块

    AbpZeroDbContext:配置ABP.Zero中定义的entity的Dbset EntityFrameworkModelBuilderExtensions:给PrimitiveProperty ...

  9. Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)

    Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...

  10. 【饿了么】招聘Java开发工程师、架构师

    3年以上实际工作经验,本科及以上学历. 具有良好的编程基础( 比如熟悉HTTP.多线程.Socket.JVM.基本的数据结构和算法等). 熟悉Java语言以及相关的服务器(比如Tomcat).工具(M ...