[连载]《C#通信(串口和网络)框架的统筹与落到实处》- 11.调试器的设计

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.1     调试接口

  
IDebugDevice接口定义了4个调剂接口函数,紧要用来对设备驱动、界面视图、数据导出和劳务组件举行源代码调试。接口定义如下图:

图片 1 

11.1         调试接口… 2

目       录

第十一章      调试器设计

    SuperIO
框架平台设计、开发完成后,想把代码编译成程序集(DLL),二次开发都通过引用DLL完结接口、继承类库来落实驱动和插件的付出,SuperIO框架的代码不会随机去改变。那是框架设计最终要高达的效益,可是在二次开发进度中仍然很不便宜,紧要涉嫌到两地方的题材:1.支付好驱动后,怎么样验证驱动的末段效果?例如:原始数据的分析、数据的拍卖流程和功能的兑现等等,所以要在Debug形式下可以调节驱动的源代码,而不是调试SuperIO本身的代码。不可以把开发好驱动反复挂载到安排文件中,反复启动软件来讲明驱动开发的作用,那将是耗时耗力的一件事。2.在Debug格局下,也就是在调节进度中,SuperIO框架是要有选拔性的与安顿文件音信进行交互,固然只是调试驱动模块的源代码,可是凡事框架平台是处于调试形式,例如:在调试格局下,不加载配制文件中驱动;在调试情势下,不把装备驱动的音信写到配制文件中等等。

    
基于实际应用境况,在框架平纽伦堡加进了调试器的效率。那块代码的贯彻并不复杂,可是在框架平台的连串中是必需的一局地。就如人缺失了一片段后,总显得不那么完美。

 

11.3         命令行格局调试… 5

11.4         小结… 6

11.2         界面方式调试… 3

第十一章     调试器设计… 2

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章 二次开发及运用》。

相关文章