框架内的服务模型(ServiceModel)用于处理各类业务逻辑(如最简单的CRUD操作),在设计时以类似于伪代码的形式存在,发布时后端会通过Roslyn转换并编译为运行时代码。为了方便开发者更简单的调试服务模型,作者利用开源的netcoredbg初步实现了在线调试功能。

一、实现原理

  原本想参照VSCode实现调试功能,但VSCode使用的vsdbg调试器有许可限制,无法用于第三方IDE,好在GitHub上的netcoredbg项目使用MIT许可且支持VSCode的调试协议。作者画了个流程图简要说明一下调试流程:

  1. WebIDE定位需要调试的服务方法并设置相应的断点后启动调试(如果方法有参数则需要输入参数值);
  2. 服务端DebugService收到调试请求后转换并编译Debug版本的服务代码,然后启动netcoredbg子进程(需要重定向标准输入输出,netcoredbg通过标准输入输出接收调试指令并响应),初始化调试子进程后发送运行命令启动AppContainer子进程,AppContainer子进程在启动时加载已编译好的目标服务实例并注入容器内;
  3. 服务端DebugService在一切准备就绪后发送调用服务方法(调试目标)的请求至AppContainer子进程,开始调试过程(处理netcoredbg调试事件)。

VSCode调试协议参考:

  1. https://github.com/Microsoft/vscode-debugadapter-node/blob/master/debugProtocol.json
  2. https://github.com/Microsoft/vscode-debugadapter-node/blob/master/protocol/src/debugProtocol.ts

二、调试演示

  1. 目前仅实现了通过鼠标定位变量查看相应值;
  2. 尚未实现查看虚拟实体类及其成员的值。

三、本篇小结

  本篇介绍了如何实现IDE的服务模型调试功能,GitHub上的运行时已更新可供测试。作者还在努力争取到年底前达到基本可用的状态,请您多多点赞支持!

AppBoxFuture: 服务模型的在线调试的更多相关文章

  1. AppBoxFuture: 服务模型的在线调试与性能监测

      框架内的服务模型(ServiceModel)用于处理各类业务逻辑(如最简单的CRUD操作),在设计时以类似于伪代码的形式存在,发布时后端会通过Roslyn转换并编译为运行时代码.为了方便开发者作者 ...

  2. AppBoxFuture(一): Hello Future!

      AppBoxFuture是一个快速应用框架(Rapid Application Framework),是作者十几年从事信息化建设的经验结晶.框架具备以下一些特色: 极简的分布式系统架构 根据需要可 ...

  3. 在线调试lua原型设计

    在规模日益增长的软件项目开发中, 如何有效的进行代码调试成为影响开发效率的致命因素之一.在当今网络游戏项目中, lua几乎成了项目脚本的标配.编译型的语言, 诸如C++, 都有良好的ide支持调试.而 ...

  4. 1.4 云计算的SPI服务模型

    云计算是通过共享资源池的方式来提高资源利用率的.在云计算中,根据其资源池中资源的类别,可以把云计算的服务模型分为三种,即所谓的SPI 模型   应用程序 Software as a Service ( ...

  5. Thrift 个人实战--Thrift 网络服务模型

    前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...

  6. 在线调试和演示的前端开发工具------http://jsfiddle.net/

    在线调试和演示的前端开发工具------http://jsfiddle.net/

  7. Keil(MDK-ARM)使用教程(三)_在线调试

    Ⅰ.概述 该文章总结Keil(MDK-ARM)在线调试相关的内容,详情请往下看. 该文章是基于新建好软件工程来讲述,关于Keil的下载.安装和新建工程我已将在前面做了详细的总结,不懂的可以参看我博客里 ...

  8. 由浅入深了解Thrift之服务模型和序列化机制

    一.Thrift介绍 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎.其允许你定义一个简单的定义文件中的数据类型和服务接口.以作为输入文件,编 ...

  9. 用Eclipse和GDB构建ARM交叉编译和在线调试环境

    我们在 Linux 主机中搭建我们的开发环境,使用 Ubuntu 10.04 LTS 为例. 搭建应用开发环境   安装 JRE Eclipse 依赖于Java 环境,所以必须先安装 JRE 或 JD ...

随机推荐

  1. Abstract Factory抽象工厂模式

    抽象工厂模式是是用一个超级工厂去创建其他工厂,简单点说就是工厂的父类,属于创建型模式. 目标:提供一个创建一组对象的方法,而无需指定它们具体的类(同工厂方法). 使用场景:系统的产品有多于一个的产品族 ...

  2. Scrapy高级用法

    日志相关 一.日志相关变量 LOG_LEVEL = '' LOG_FILE = '文件名.log' 二.日志级别 5 CRITICAL :严重错误 4 ERROR :普通错误 3 WARNING :警 ...

  3. Linux之文件权限、用户管理

    世界真美好!

  4. 安装MariaDB

    1.安装MariaDB安装命令yum -y install mariadb mariadb-server安装完成MariaDB,首先启动MariaDBsystemctl start mariadb设置 ...

  5. Java匹马行天下之 Java国出了个Java——举国欢庆

    Java帝国的崛起 前言: 看庭前花开花落,宠辱不惊, 望天上云卷云舒,去留无意. 闹心的事儿,选择释怀: 纠缠的人儿,试着放下, 生活其实很美. 心若向阳,就无惧悲伤. 愿你明朗坦荡纵情豁达,有得有 ...

  6. SVN更改地址

    因为服务器更改或其他某些原因导致svn地址改变,那么本地应该如何操作tortoiseSVN?如何成功的把项目进行迁移? 操作步骤 1.右击项目目录---TortoiseSVN----重新定位(英文版是 ...

  7. Spring Cloud系列之Eureka服务治理

    写在前面 Spring Cloud Eureka是基于Netflix Eureka做的二次封装.主要包含两部分: 服务注册中心 eureka server 服务提供者 eureka client ps ...

  8. Autofac的AOP面向切面编程研究

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  9. Scrapy项目 - 项目源码 - 实现腾讯网站社会招聘信息爬取的爬虫设计

    1.tencentSpider.py # -*- coding: utf-8 -*- import scrapy from Tencent.items import TencentItem #创建爬虫 ...

  10. 从壹开始学习NetCore 45 ║ 终于解决了事务问题

    一.项目说明 哈喽,又来写文章了,原来放假可以这么爽,可以学习和分享,