大数据环境下实现跨进程与跨线程调试的系统与方法
【专利摘要】本发明涉及一种大数据环境下实现跨进程与跨线程调试的系统与方法,其中系统包括图形化调试平台和调试框架,所述的图形化调试平台包括资源加载模块、线程管理模块、拦截器接口模块、拦截器实现模块、配置文件模块和调试服务器模块,所述的调试框架包括图形化编辑框架模块、调试器用户界面模块、调试命令解析模块、调试上下文管理模块、调试框架接口模块和调试框架实现模块。采用该种结构的大数据环境下实现跨进程与跨线程调试的系统与方法,克服了上述现有调试技术、工具中难以实现跨进程和线程调试的缺点,可实现跨进程与线程的应用调试支持,系统架构简单,使用维护方便快捷,工作性能稳定可靠,适用范围较为广泛。
【专利说明】大数据环境下实现跨进程与跨线程调试的系统与方法
【技术领域】
[0001]本发明涉及计算机软件领域,尤其涉及计算机分布式应用开发领域,具体是指一种大数据环境下实现跨进程与跨线程调试的系统与方法。
【背景技术】 [0002]大数据时代已经到来,为了对全球飞速增长的大量业务数据、网络数据、日志数据进行存储、处理、传输、转换、分析,从而发掘出大数据隐含的价值,大数据应用的解决方案必不可少。在大数据应用解决方案中,应用的开发是核心基础,应用的调试又是应用开发的关键组成部分,一种好的调试技术能有效定位开发中的问题,极大地提高了应用的开发效率和交付速度。当前,随着各种编程语言的不断成熟,调试功能已成为IDE (集成开发环境)必备的基本功能。对C++语言的开发者来说,最常用的开发调试工具是微软的VisualStudio套件,对Java语言的开发者来说,常用的IDE工具有Eclipse、NetBeans0此外,JavaScript语言的调试功能主要集成在各大浏览器中(如IE、Firefox、Chrome等),数据库开发中常用的存储过程亦有相应的开发调试工具,如PL/SQL,TOAD等。
[0003]大数据应用通常包含多种编程语言、多种技术实现的多个进程,进程中也往往包含多个线程,进程、线程的并发执行、异步调用对应用的调试增加了额外的困难。调试通常分为本地调试和远程调试。本地调试较为简单,一般调试工具均已具备;远程调试相对复杂,仅有使用广泛的编程语言的IDE工具支持,由于远程调试对于生产环境中快速定位问题、远程协助等方面有着十分积极的作用,因而远程调试能力(即跨进程与线程的调试能力)成为判断调试工具是否完备的一个标准。然而,当前大部分IDE工具对多进程、多线程调试的支持并不完善,只能通过断点、日志记录等手段来辅助。所以,提供良好的多进程、多线程调试能力成为各IDE工具亟待解决的问题。
[0004]通用的调试平台需要实现三个核心功能:第一,在指定位置(方法前、每行代码前、图元执行前)暂停或继续执行;第二,支持网络通信,即调试的目标语言必须支持与调试框架的通信;第三,实现执行文件与源文件的映射,以定位到指定行、指定图元。
[0005]当前各类IDE工具提供的调试方案如下表所示:
[0006]
语言暂停方式与IDE通信方式
C/C++ —每行代码前后加代码,通过线程暂停_Socket
"JVM虚拟机提供类加栽、方法进入、TWlO ,.JavaL.,, AJUwP +Socket
__万法退出、打切换的API__
Javascript浏览器浏览器的js引擎提供方法进入、方法火? ? Xc (IE/Mozilla/Chrome)__退出、行切换的 API__不义
~JavascriDtfJSDT)^每行代码前后加代码,通过同步Ajax~
她ascript(JbD I)请求实现暂停AJax
τ..、 Rhino引擎提供方法进入、方法退出、。1 ,, ^ ;u
Javascnpl(Rhino)^ ,卜,"A ~Socket 或具他
___订切换的API__[0007]当前企业所使用的调试方案主要向各大IDE工具看齐,将源(调试)文件编译成Java类或者C++文件等,然后基于各大IDE工具的调试方案进行设计。网络通信则使用通用的Socket协议或自行设计的通信协议。
[0008]同时,良好的图形化调试界面也能提高调试效率。在调试过程中,需要启动界面配置相关参数,需要堆栈视图来查看堆栈信息,需要变量视图来查看、修改变量信息,需要编辑器显示、渲染当前调试内容,需要控制台打印输出信息。这些视图构成了一个完整的调试环境。
[0009]当前企业所使用的调试方案问题:首先,调试方案基于单一语言,只为对应同类线程维护其上下文环境,故不支持不同种类线程的跨线程调试,例如在Java中调用JavaScript, Java线程与JavaScirpt线程之间存在跨线程现象,此时调试方案就需要考虑是否支持此类型的调试;其次,不支持异步线程调试,这是由调试工具本身决定的,调试工具本身并不知道当前调用是同步调用还是异步调用,只能按照逻辑顺序执行,因而在调试过程中还需要使用断点和日志等手段辅助进行调试;最后,只有单一类型调试,不支持多种类型调试,当调试到另一类型文件时,则需要更换调试工具,若要建立多种调试类型的完整的调试链,则需要一个完整可行易于扩展的调试框架。
【发明内容】
[0010]本发明的目的是克服了上述现有技术的缺点,提供了一种能够实现跨进程与线程的应用调试支持、系统架构简单、使用维护方便快捷、工作性能稳定可靠、适用范围较为广泛的大数据环境下实现跨进程与跨线程调试的系统与方法。
[0011]为了实现上述目的,本发明的大数据环境下实现跨进程与跨线程调试的系统与方法具有如下构成:
[0012]该大数据环境下实现跨进程与跨线程调试的系统,其主要特点是,所述的系统包括图形化调试平台和调试框架,所述的图形化调试平台包括:
[0013]资源加载模块,用以通过调试引擎加载调试过程中的各种资源;
[0014]线程管理模块,用以通过调试引擎管理各调试线程的生命周期;
[0015]拦截器接口模块,用以定义拦截器接口和通过调试引擎进行事件并发并于事件并发时调用各调试类型的拦截器动作;
[0016]拦截器实现模块,用以由调试引擎管理调用各调试类型的拦截器接口 ;
[0017]配置文件模块,用以配置调试过程中的参数和选择;
[0018]调试服务器模块,用以接收并解析所述的调试框架发送的调试信息并向所述的调试框架发送调试命令;
[0019]所述的调试框架包括:
[0020]图形化编辑框架模块,用以为业务流程和业务逻辑开发提供图形化的支持;
[0021]调试器用户界面模块,用以提供与用户交互的功能;
[0022]调试命令解析模块,用以接收并解析所述的图形化调试平台发送的调试命令并向所述的图形化调试平台提供必需的调试信息;
[0023]调试上下文管理模块,用以维护各个调试请求的上下文信息并为异步调试和多线程调试提供必备基础;[0024]调试框架接口模块,用以定义调试接口和各种调试类型;
[0025]调试框架实现模块,用以使得各种调试类型分别实现对应的调试框架接口。
[0026]较佳地,所述的图形化调试平台和调试框架通过Socket协议进行通信。
[0027]本发明还涉及一种基于所述的系统大数据环境下实现跨进程与跨线程调试的方法,其主要特点是,所述的方法包括以下步骤:
[0028](I)所述的图形化调试平台和调试框架进行预处理操作;
[0029](2)所述的调试框架根据所述的调试框架获取用户的断点信息进行调试引擎的断点配置;
[0030](3)所述的调试引擎和图形化调试平台根据用户的中断调试指令执行调试中断操作。
[0031]较佳地,所述的图形化调试平台和调试框架进行预处理操作,包括以下步骤:
[0032](11)对所述的配置文件模块进行初始化;
[0033](12)启动所述的图形化调试平台所在的应用服务器;
[0034](13)对所述的图形化调试平台中的资源加载模块、线程管理模块和调试服务器模块进行初始化;
[0035](14)在所述的调试框架的服务器对话框中填写服务器地址和服务器端口 ;
[0036](15)对所述的调试框架中的调试命令解析模块进行初始化;
[0037](16)所述的图形化调试平台接收到调试请求后调用调试引擎进行处理并构建调试命令向所述的调试框架发送;
[0038](17)所述的调试框架接受调试指令进行图形展示和渲染。
[0039]更佳地,所述的对所述的配置文件模块进行初始化,包括以下步骤:
[0040](111)在所述的配置文件模块中配置是否进行调试;
[0041](112)在所述的配置文件模块中配置调试最大超时时间;
[0042](113)在所述的配置文件模块中配置调试服务器的端口 ;
[0043](114)在所述的配置文件模块中配置允许连接调试服务器的IP段;
[0044](115)在所述的配置文件模块中配置需要使用的资源加载类;
[0045](116)在所述的配置文件模块中配置需要使用的执行容器和线程池;
[0046](117)在所述的配置文件模块中配置需要使用的调试类型的拦截器。
[0047]更佳地,所述的对所述的图形化调试平台中的资源加载模块、线程管理模块和调试服务器模块进行初始化,包括以下步骤:
[0048](131)调试引擎模块将配置文件模块中资源加载相关配置载入缓存;
[0049](132)调试引擎扫描项目中的所有文件,按后缀区分将资源文件交由资源加载类处理;
[0050](133)资源加载类将资源文件转换成模型;
[0051](134)按照配置文件模块中执行容器和线程池的配置,初始化容器和线程池;
[0052](135)容器在初始化时注册拦截器事件,由调试引擎进行分发;
[0053](136)执行容器开始接受请求;
[0054](137)若配置文件模块中配置不进行调试,则不进行以下操作;
[0055](138)若配置文件模块中配置进行调试,则按照配置文件模块中配置的调试最大超时时间,调试服务器的端口,允许连接调试服务器的IP段,建立网络服务;
[0056](139)网络服务开始监听,等待与调试框架通信。
[0057]更佳地,所述的对所述的调试框架中的调试命令解析模块进行初始化,包括以下步骤:
[0058](151)调试框架中的调试命令解析模块获取用户填写的服务器地址和服务器端Π ;
[0059](152)调试框架中的调试命令解析模块启动网络服务;
[0060](153)调试框架中的调试命令解析模块与图形化调试平台建立连接。
[0061]较佳地,所述的调试框架根据所述的调试框架获取用户的断点信息进行调试引擎的断点配置,包括以下步骤:
[0062](21)用户通过所述的调试器用户界面模块在调试源文件中设置断点标记;
[0063](22)所述的调试器用户界面模块向调试框架中的断点管理器添加断点标记;
[0064](23)所述的图形化调试平台每隔系统预设时间间隔周期性地向调试框架发送请求获取断点信息;
[0065](24)所述的调试命令解析模块读取所述的断点管理器中的所有断点信息并返回给调试引擎;
[0066](25)所述的调试引擎根据所述的调试命令解析模块解析的断点信息更新所持有的断点信息。
[0067]更佳地,所述的用户通过所述的调试器用户界面模块在调试源文件中设置断点标记,包括以下步骤:
[0068](211)所述的调试器用户界面模块传入调试源文件的资源路径和文本内容;
[0069](212)用户在资源编辑器中添加断点;
[0070](213)所述的调试器用户界面模块判断当前行能否下断点,如果是,则继续步骤(214),否则继续步骤(215);
[0071](214)调试器用户界面模块在断点管理器中添加一个断点并通知断点视图显示断
占.[0072](215)所述的调试器用户界面模块提示当前用户操作无效。
[0073]较佳地,所述的调试引擎和图形化调试平台根据用户的中断调试指令执行调试中断操作,包括以下步骤:
[0074](31)用户通过浏览器发送调试请求后在所述的调试框架进行调试指令操作并将相关调试指令发送给图形化调试平台;
[0075](32)所述的调试框架实现模块和调试上下文管理模块根据当前调试指令和断点信息判断当前行是否需要中断,如果否,则继续步骤(33),如果是则继续步骤(34);
[0076](33)不执行中断操作而继续执行调试;
[0077](34)所述的调试框架通知图形化调试平台中断并向图形化调试平台调用调试引擎获取当前的堆栈以及当前的变量;
[0078](35)所述的图形化调试平台发送调试指令给调试框架;
[0079](36)所述的调试框架的调试器用户界面模块收到所述的调试指令并根据资源路径找到项目中的调试源文件;[0080](37)所述的调试框架的调试器用户界面模块打开调试源文件并定位到当前图元或当前中断行并于当前图元或当前中断行进行图形化渲染;
[0081](38)所述的调试框架的调试器用户界面模块接收图形化调试平台调用堆栈在堆栈视图显示堆栈信息;
[0082](39)所述的调试框架的调试器用户界面模块接收图形化调试平台变量信息在变量视图中显示变量信息。
[0083]更佳地,所述的调试框架实现模块和调试上下文管理模块根据当前调试指令和断点信息判断当前行是否需要中断,包括以下步骤:
[0084](321)所述的调试框架实现模块和调试上下文管理模块判断当前图元存在是否断点,如果是,则继续步骤(34),否则,继续步骤(322);
[0085](322)判断当前调试命令类型,如果当前调试命令为单步跳过,则继续步骤(323),如果当前调试命令为单步返回,则继续步骤(326),如果当前调试命令为单步进入,则继续步骤(328),如果当前调试命令为执行,则继续步骤(33);
[0086](323)判断当前上下文是否在调试上下文的单步堆栈中,如果不在则继续执行步骤(33),如果在,则执行步骤(324);
[0087](324)切换到自定义调试透视图且当前线程执行中断;
[0088](325)调试上下文的单步堆栈的step个数大于O时,执行出栈操作;
[0089](326)判断当前上下文是否在调试上下文的单步堆栈中,如果不在则继续执行步骤(33),如果在,则执行步骤(327);
[0090](327)切换到自定义调试透视图且当前线程执行中断;
[0091](328)切换到自定义调试透视图且当前线程执行中断。
[0092]更佳地,所述的调试框架通知图形化调试平台中断并向图形化调试平台调用调试引擎获取当前的堆栈以及当前的变量,包括以下步骤:
[0093](341)调试框架的调试命令解析模块向图形化调试平台发送中断命令;
[0094](342)图形化调试平台的调试服务器模块接收到中断指令;
[0095](343)调试引擎调用线程管理模块中断指定线程;
[0096](344)调试引擎获取指定线程的堆栈;
[0097](345)调试引擎获取指定线程的变量。
[0098]更佳地,所述的调试框架的调试器用户界面模块收到所述的调试指令根,包括以下步骤:
[0099](361)调试框架中的调试命令解析模块接收到调试命令;
[0100](362)调试框架中的调试命令解析模块解析调试命令;
[0101](363)调试框架中的调试命令解析模块返回资源、行号、调用堆栈和变量内容。
[0102]更佳地,所述的据资源路径找到项目中的调试源文件,包括以下步骤:
[0103](364)调试框架中的调试器用户界面模块获取到资源路径;
[0104](365)调试框架中的调试器用户界面模块检测当前打开的图形化编辑器对应的资源文件是否与资源路径一致,如果是则直接定位到当前编辑器,否则继续步骤(366);
[0105](366)调试框架中的调试器用户界面模块通过索引查找所有项目下的文件,如果能找到,则打开对应编辑器,否则,返回空。[0106]较佳地,所述的步骤(3)之后,还包括以下步骤:
[0107](4)所述的调试框架根据用户的单步进入调试指令执行单步进入操作;
[0108]所述的调试框架根据用户的单步进入调试指令执行单步进入操作包括以下步骤:
[0109](41)用户选择单步进入调试指令;
[0110](42)图形化调试平台判断和调试框架操作的调试线程是否是同一线程,如果不是则结束退出,否则继续步骤(43);
[0111](43)图形化调试平台引擎加载资源,线程管理模块负责将调试线程执行到对应文件第一个图元处或Java方法第一行代码处挂起;
[0112](44)调试框架判断和调试框架操作的调试线程是否是同一线程,如果是则对当前调试图元进行渲染,然后继续步骤(45),如果不是则结束退出;
[0113](45)调试框架判断图元类型,进入对应文件;
[0114](46)调试框架堆栈视图更新堆栈信息;
[0115](47)调试框架变量视图更新变量信息。
[0116]较佳地,所述的步骤(3)之后,还包括以下步骤:
[0117](5)所述的调试框架根据用户的单步跳过调试指令执行单步跳过操作;
[0118]所述的调试框架根据用户的单步跳过调试指令执行单步跳过操作包括以下步骤:
[0119](51)用户选择单步跳过调试指令;
[0120](52)图形化调试平台判断和调试框架操作的调试线程是否是同一线程,如果是,则继续步骤(53),如果不是则结束退出;
[0121](53)图形化调试平台线程管理模块判断当前上下文ID是否在栈中,如果在则继续步骤(54),如果不在则挂起并结束退出;
[0122](54)调试框架判断和调试框架操作的调试线程是否是同一线程,如果是则对当前调试图元进行渲染,然后继续步骤(55),如果不是则结束退出;
[0123](55)调试框架堆栈视图更新堆栈信息;
[0124](56)调试框架变量视图更新变量信息。
[0125]较佳地,所述的步骤(3)之后,还包括以下步骤:
[0126](6)所述的调试框架根据用户的单步返回调试指令执行单步返回操作;
[0127]所述的调试框架根据用户的单步返回调试指令执行单步返回操作包括以下步骤:
[0128](61)用户选择单步返回调试指令;
[0129](62)图形化调试平台判断和调试框架操作的调试线程是否是同一线程,如果是,则继续步骤(63),如果不是则结束退出;
[0130](63)图形化调试平台线程管理模块对调试堆栈进行出栈操作;
[0131](64)图形化调试平台线程管理模块判断当前上下文ID是否在栈中,如果在则继续步骤(65),如果不在则挂起结束退出;
[0132](65)调试框架判断和调试框架操作的调试线程是否是同一线程,若是则对当前调试图元进行渲染,然后继续步骤(66),如果不是则结束退出;[0133](66)调试框架堆栈视图更新堆栈信息;
[0134](67)调试框架变量视图更新变量信息。
[0135]采用了该发明中的大数据环境下实现跨进程与跨线程调试的系统与方法,具有如下有益效果:
[0136]本发明的目的是克服了上述现有调试技术、工具中难以实现跨进程和线程调试的缺点,提供一种可实现跨进程与线程的应用调试支持、系统架构简单、使用维护方便快捷、工作性能稳定可靠、适用范围较为广泛的大数据环境下实现跨进程与跨线程调试的系统及其方法,具体具有如下优点:
[0137](I)跨进程跨线程
[0138]调试框架与图形化调试平台进行跨进程通信,调试过程中需要跨线程访问时,能使得在所跨的线程中进行调试并正常返回,,当同时发起多个调试请求时,为各调试线程维护各自的上下文环境,使其互不干扰。
[0139](2)易于扩展
[0140]增加新的调试类型时,只需对具体调试类型进行实现,无需修改核心代码,使调试框架具有可移植性和扩展性。
[0141](3)可建立一体化的调试链路
[0142]将开发中所涉及的业务流程调试,业务逻辑调试,类调试,方法调试,脚本调试串联起来,建立一体化的调试链路,使开发人员对每个过程进行调试,从而可快速地定位问题并解决问题,提高大数据环境下解决实际生产问题的能力。
【专利附图】
【附图说明】
[0143]图1为本发明的大数据环境下实现跨进程与跨线程调试的系统的结构示意图。
[0144]图2为本发明的单步进入调试指令下调试框架的流程图。
[0145]图3为本发明的单步进入调试指令下图形化调试平台的流程图。
[0146]图4为本发明的单步跳过调试指令下调试框架的流程图。
[0147]图5为本发明的单步跳过调试指令下图形化调试平台的流程图。
[0148]图6为本发明的单步返回调试指令下调试框架的流程图。
[0149]图7为本发明的单步返回调试指令下图形化调试平台的流程图。
【具体实施方式】
[0150]为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。
[0151]为了实现本发明的目的,本发明的大数据环境下实现跨进程与跨线程调试的系统与方法如下:
[0152]该大数据环境下实现跨进程与跨线程调试的系统,包括图形化调试平台和调试框架,其主要特点是,所述的图形化调试平台包括:调试引擎、线程管理、拦截器接口、拦截器实现、配置文件、资源加载和调试服务器模块。
[0153]资源加载模块:通过调试引擎加载调试过程中的各种资源,包括调试文件,配置文件。[0154]线程管理模块:通过调试引擎管理各调试线程的生命周期,关键在于保证各调试线程独立运行,并提供让指定线程暂停(继续执行)的能力。
[0155]拦截器接口模块:定义一套拦截器接口,各调试类型实现,通过引擎进行事件分发,在事件(进出业务流程,进出业务流程图元等)发生时,调用各调试类型实现的拦截器动作。
[0156]拦截器实现模块:各调试类型分别实现所定义的拦截器接口,由引擎进行管理调用。
[0157]配置文件模块:主要包括是否启用调试功能,调试最大超时时间,调试服务器的端口,允许连接调试服务器的IP段等。
[0158]调试服务器模块:主要负责接收并解析调试框架发送的调试信息,并向调试框架发送调试命令。
[0159]所述的调试框架包括:图形化编辑框架、调试器Π (用户界面)、调试上下文管理、调试命令管理、调试框架接口和调试框架实现;
[0160]图形化编辑框架模块:为业务流程、业务逻辑开发提供图形化的支持,提供一个编辑区域和一个选项板,用户在选项板里选择需要的图元,以拖动或单击的方式将图元或连接放置在编辑区域;用户能够查看和修改某个图元或连接的大部分属性;提供上下文菜单和键盘命令;提供图形的缩放功能;提供一个大纲视图,显示编辑区域的缩略图,或是树状模型结构;支持撤消/重做功能等。
[0161]调试器Π (用户界面)模块:提供断点管理、源文件定位、调试启动、查看变量、调试动作(单步进入、单步跳过、单步返回、执行、终止)等与用户交互的功能。
[0162]调试命令解析模块:负责接收并解析图形化调试平台发送的调试命令,并向图形化调试平台提供必需的调试信息。
[0163]调试上下文管理模块:为每一个请求维护其上下文信息,为异步调试和多线程调试提供必备基础。
[0164]调试框架接口模块:定义一套调试接口,各调试类型实现,由整个框架对接口和实现进行分发管理。接口主要包括handleEntry (若调试类型为业务流,则定义进出业务流程前后,进出业务流程图元前后的动作),handleStepInto (定义单步进入动作),handleStepOver (定义单步跳过动作),handleStepReturn (定义单步返回动作),handleResume(定义提交动作),CanHandleStepInto (是否能单步进入),CanHandleStepOver(是否能单步跳过),CanHandleStepReturn (是否能单步返回),getLabel (定义当前堆栈视图栈顶显示的内容),displaySource (资源定位,显示当前调试位置:编辑器+图元)。
[0165]调试框架实现模块:各调试类型分别实现所定义的调试框架接口,由整个框架进行管理。
[0166]调试框架与图形化调试平台通过Socket协议(或其它网络协议)进行通信。
[0167]该大数据环境下实现跨进程与跨线程调试的系统中的调试信息包括调试指令,资源路径,堆栈信息,变量信息,断点所在的行号或ID。
[0168]该大数据环境下实现跨进程与跨线程调试的系统中的调试动作包括单步进入(step Into)、单步跳过(stepOver)、单步返回(stepReturn)、继续执行(resume)和终止(terminate)。[0169]该大数据环境下实现跨进程与跨线程调试的系统中的调试指令包括单步进入(step Into)、单步跳过(stepOver)、单步返回(stepReturn)、继续执行(resume)和终止(terminate)。
[0170]该基于上述的系统实现大数据环境下实现跨进程与跨线程调试的系统与方法,其主要特点是,所述的方法包括图形化调试平台的预处理操作、断点配置操作和调试中断操作,所述的图形化调试平台的预处理操作,包括以下步骤:
[0171](I)配置文件模块的初始化操作。
[0172](2)启动图形化调试平台所在的应用服务器。
[0173](3)图形化调试平台中的资源加载模块进行初始化。
[0174](4)图形化调试平台中的线程管理模块进行初始化。
[0175](5)图形化调试平台中的调试服务器模块进行初始化。
[0176](6)在调试框架打开连接服务器对话框,填写服务器地址和服务器端口,点击确定。
[0177](7)调试框架中的调试命令解析模块进行初始化。
[0178](8)浏览器向图形化调试平台发送请求,地址为http://[服务器端IP]:[调试端口 ]/[文件名]。
[0179](9)图形化调试平台接收调试请求,调用调试引擎进行处理,并构建调试指令向调试框架发送。
[0180](10)调试框架接受调试指令,进行图形展示和渲染。
[0181]所述的断点配置操作,包括以下步骤:
[0182](I)用户通过调试器用户界面模块在调试源文件中设置断点标记。
[0183](2)调试器用户界面模块向调试框架中的断点管理器添加断点标记。
[0184](3)图形化调试平台每隔系统预设的时间间隔周期性地向调试框架发送请求获取断点信息。
[0185](4)调试命令解析模块读取该断点管理器中所有的断点信息。
[0186](5)调试命令解析模块将获得的所有断点信息返回给调试引擎。
[0187](6)调试引擎调用调试服务器模块解析所获得的断点信息。
[0188](7)调试引擎更新所持有的断点信息。
[0189]所述的用户通过调试器用户界面模块在调试源文件中设置断点标记,包括以下步骤:
[0190](I)所述的调试器用户界面模块传入调试源文件的资源路径和文本内容。
[0191](2)用户在资源编辑器中添加断点。
[0192](3)所述的调试器用户界面模块判断当前行是否能下断点,并根据判断结果分别执行以下步骤:
[0193](a)如果当前行能下断点,调试器Π往断点管理器中添加一个断点并通知断点视图显示断点。
[0194](b)如果当前行不能下断点,则用户的操作无效。
[0195]该大数据环境下实现跨进程与跨线程调试的系统与方法中的系统预设的时间间隔为500ms ο[0196]该大数据环境下实现跨进程与跨线程调试的系统与方法中的调试服务器模块发送请求获取断点信息的请求格式为:
[0197][COMMAND]:[调试事件]。
[0198]该大数据环境下实现跨进程与跨线程调试的系统与方法中的调试命令解析模块返回给图形化调试平台的断点信息数据的格式为:
[0199][COMMAND]:[调试事件][断点]:[[断点1:[资源路径][行号或ID]][断点2:[资源路径][行号或ID]]]。
[0200]所述的调试中断操作包括以下步骤:
[0201](I)用户通过浏览器发送调试请求,或在图形化编辑器点击右键菜单的“启动调试”,启动调试。
[0202](2)用户在调试框架进行添加/删除断点,单步调试,提交,中断等操作,并将相关指令发送给图形化调试平台。
[0203](3)调试框架实现模块和调试上下文管理模块根据当前指令(单步进入、单步跳过、单步返回、执行、终止等)、断点信息判断当前行是否需要中断。
[0204](4)如果当前行不需要中断则继续执行。
[0205](5)如果当前行需要中断则调试框架通知图形化调试平台中断,并向图形化调试平台调用引擎获取当前的堆栈以及当前的变量。
[0206](6)图形化调试平台发送调试指令给调试框架。
[0207]调试代码API发送的数据格式如下:
[0208][命令]:[命令类型]
[0209][请求ID]:[当前请求号]
[0210][上下文ID]:[当前上下文ID]
[0211 ][资源路径]:[资源文件URL]
[0212][图元编号]:[当前图元编号]
[0213][行号]:[当前Java或Javascript行号](若当前图元非Java图元或Javascript图元则为空)
[0214][调用堆栈]:[调用堆栈和变量]
[0215](7)调试框架中的调试器命令解析模块收到调试指令和相关的资源、行号、调用堆栈、变量等内容。
[0216](8)调试框架中的调试器UI根据资源的路径找到项目中的调试源文件。
[0217](9)调试框架中的调试器Π打开调试源文件并定位到当前图元或当前中断行,并在当前图元或当前中断行进行图形化渲染,以区别调试图元(调试代码)和非调试图元(非调试代码)。
[0218](10)调试框架中的调试器Π接收图形化调试平台调用堆栈在堆栈视图显示堆栈信息。
[0219](11)调试框架中的调试器Π接收图形化调试平台变量信息在变量视图中显示变
量信息。
[0220]所述的配置文件模块初始化操作包括如下步骤:
[0221](I)配置是否进行调试。[0222](2)配置调试最大超时时间。
[0223](3)配置调试服务器的端口。
[0224](4)配置允许连接调试服务器的IP段。
[0225](5)配置需要使用的资源加载类。
[0226](6)配置需要使用的执行容器和线程池。
[0227](7)配置需要使用的调试类型的拦截器。
[0228]所述的启动图形化调试平台所在的应用服务器包括如下步骤:
[0229](I)用户点击图形化调试平台应用服务器的启动按钮。
[0230](2)应用服务器的启动有两种方式:一种是直接调用启动类的main方法;另一种是在应用中配置web.xml,由应用服务器加载。
[0231](3)若采用直接调用启动类的方式,则调用其main方法启动。
[0232](4)若采用配置web.xml的方式,则由应用服务器加载web.xml中注册的Servlet。
[0233](5) Servlet 进行初始化。
[0234]所述的图形化调试平台中的资源管理模块进行初始化操作包括如下步骤:
[0235](I)调试引擎模块将配置文件模块中资源加载相关配置载入缓存。
[0236](2)调试引擎扫描项目中的所有文件,按后缀区分将资源文件交由资源加载类处理。
[0237](3)资源加载类将资源文件转换成模型。
[0238]所述的图形化调试平台中的线程管理模块进行初始化操作包括如下步骤:
[0239](I)按照配置文件模块中执行容器和线程池的配置,初始化容器和线程池。
[0240](2)容器在初始化时注册拦截器事件,由调试引擎进行分发。
[0241](3)执行容器开始接受请求。
[0242]所述的图形化调试平台中的调试服务器模块进行初始化配置包括如下步骤:
[0243](I)若配置文件模块中配置不进行调试,则不进行以下操作。
[0244](2)若配置文件模块中配置进行调试,则按照配置文件模块中配置的调试最大超时时间,调试服务器的端口,允许连接调试服务器的IP段,建立网络服务。
[0245](3)网络服务开始监听,等待与调试框架通信。
[0246]所述的调试框架中的调试命令解析模块进行初始化操作包括如下步骤:
[0247](I)调试框架中的调试命令解析模块获取用户填写的服务器地址和服务器端口。
[0248](2)调试框架中的调试命令解析模块启动网络服务。
[0249](3)调试框架中的调试命令解析模块与图形化调试平台建立连接。
[0250]所述的调试框架实现模块和调试上下文管理模块根据当前指令(单步进入、单步跳过、单步返回、执行、终止等)、断点信息判断当前行是否需要中断包括如下步骤:
[0251](I)若当前图元存在断点,则执行中断操作;否则,执行以下步骤。
[0252](2)判断当前调试命令类型。
[0253](3)若当前调试命令为单步跳过,则
[0254]a)判断contextID (当前上下文)是否在commandContext (调试上下文)的stepStack (单步堆栈)中,若不在则继续执行,若在,则执行以下步骤。[0255]b)切换到自定义调试透视图。
[0256]c)当前线程执行中断。
[0257](4)若当前调试命令为单步返回,则
[0258]a) commandContext (调试上下文)的stepStack (单步堆栈)的step个数若大于0,则执行pop (出栈)操作
[0259]b)判断contextID (当前上下文)是否在commandContext (调试上下文)的stepStack (单步堆栈)中,若不在则继续执行,若在,则执行以下步骤。
[0260]c)切换到自定义调试透视图。
[0261]d)当前线程执行中断。
[0262](5)若当前调试命令为单步进入,则直接切换到自定义调试透视图,当前线程执行中断。
[0263](6)若当前调试命令为执行,则继续执行。
[0264]所述的如果当前行需要中断则调试框架通知图形化调试平台中断,并向图形化调试平台调用引擎获取当前的堆栈以及当前的变量包括以下步骤:
[0265](I)调试框架的调试命令解析模块向图形化调试平台发送中断命令。
[0266](2)图形化调试平台的调试服务器模块接收到中断指令。
[0267](3)调试引擎调用线程管理模块中断指定线程。
[0268](4)调试引擎获取指定线程的堆栈。
[0269](5)调试引擎获取指定线程的变量。
[0270]所述的调试框架中的调试命令解析模块收到调试命令和相关的资源、行号、调用堆栈、变量等内容包括如下步骤:
[0271](I)调试框架中的调试命令解析模块接收到调试命令。
[0272](2)调试框架中的调试命令解析模块解析调试命令。
[0273](3)调试框架中的调试命令解析模块返回资源、行号、调用堆栈、变量等内容。
[0274]所述的调试框架中的调试器UI根据资源的路径找到项目中的调试源文件包括如下步骤:
[0275](I)调试框架中的调试器UI获取到资源路径。
[0276](2)调试框架中的调试器Π检测当前打开的图形化编辑器对应的资源文件是否与资源路径一致,若是则直接定位到当前编辑器,若不是则执行以下操作。
[0277](3)调试框架中的调试器Π通过索引查找所有项目下的文件,若能找到,打开对应编辑器,若找不到,返回空。
[0278]所述的调试框架单步进入的操作包括以下步骤(如图2,3所示):
[0279](I)用户点击Step Into (单步进入)按钮。
[0280](2)图形化调试平台判断和调试框架操作的调试线程是否是同一线程,若不是则退出。
[0281](3)图形化调试平台引擎加载资源,线程管理模块负责将调试线程执行到对应文件第一个图元处(或Java方法第一行代码处)挂起。
[0282](4)调试框架判断和调试框架操作的调试线程是否是同一线程,若是则对当前调试图元进行渲染,若不是则退出。[0283](5)调试框架判断图元类型,进入对应文件
[0284](6)调试框架堆栈视图更新堆栈信息。
[0285](7)调试框架变量视图更新变量信息。
[0286]所述的调试框架单步跳过的操作包括以下步骤(如图4,5所示):
[0287](I)用户点击Step Over (单步跳过)按钮。
[0288](2)图形化调试平台判断和调试框架操作的调试线程是否是同一线程,若不是则退出。
[0289](3)图形化调试平台线程管理模块判断当前contextID (上下文ID)是否在栈(stepStack)中,如果在继续执行,如果不在则挂起。
[0290](4)调试框架判断和调试框架操作的调试线程是否是同一线程,若是则对当前调试图元进行渲染,若不是则退出
[0291](5)调试框架堆栈视图更新堆栈信息。
[0292](6)调试框架变量视图更新变量信息。
[0293]所述的调试框架单步返回的操作包括以下步骤(如图6,7所示):
[0294](I)用户点击Step Return (单步返回)按钮。
[0295](2)图形化调试平台判断和调试框架操作的调试线程是否是同一线程,若不是则退出。
[0296](3)图形化调试平台线程管理模块对debugStack (调试堆栈)进行出栈操作。
[0297](4)图形化调试平台线程管理模块判断当前contextID (上下文ID)是否在栈(stepStack)中,如果在继续执行,如果不在则挂起。
[0298](5)调试框架判断和调试框架操作的调试线程是否是同一线程,若是则对当前调试图元进行渲染,若不是则退出。
[0299](6)调试框架堆栈视图更新堆栈信息。
[0300]调试框架变量视图更新变量信息。
[0301]以下举一个具体实施例来说明本发明:
[0302]图形化编辑框架:图形化编辑框架的主要功能是为业务流程、业务逻辑开发提供图形化的支持。图形化编辑框架提供一个编辑区域和一个选项板,用户在选项板里选择需要的图元,以拖动或单击的方式将图元或连接放置在编辑区域;用户能够查看和修改某个图元或连接的大部分属性;提供上下文菜单和键盘命令;提供图形的缩放功能;提供一个大纲视图,显示编辑区域的缩略图,或是树状模型结构;支持撤消/重做功能等。
[0303]图形化编辑器框架采用Eclipse GEF框架(Eclipse图形化编辑器框架),其操作步骤如下:
[0304](I)通过向导新建图形化编辑器文件,如业务流程文件以.flow为后缀,业务逻辑以.biz为后缀。
[0305](2)文件创建成功后,在Eclipse中打开对应的图形化编辑器。
[0306](3)用户在图形化编辑器中进行业务化编排开发,具体过程为从选项版中选择图元,将图元拖至编辑器区域中适当位置,并添加连线。
[0307](4)用户使用编辑器上下文菜单,工具栏,快捷键进行操作。
[0308](5)属性视图显示编辑器或图元的属性信息。[0309](6)大纲视图显示图形化编辑器的整体结构。
[0310]2.调试器Π:调试器Π提供断点管理、源文件定位、调试启动、查看变量、调试动作(单步进入、单步跳过、单步返回、执行、终止)等与用户交互的功能。
[0311]Eclipse已实现了一套调试框架,调试器Π基于Eclipse平台,并进行如下改进:
[0312](I)改进堆栈视图。调试框架堆栈视图接收图形化调试平台发送的堆栈信息在堆栈视图显示,显示内容主体为调试线程,并在调试线程中显示调试堆栈。
[0313](2)自定义变量视图。图形化调试平台向调试框架发送XML格式的变量信息,在变量视图中以树形形式显示。
[0314](3)改造断点视图。对调试框架断点视图进行改造,改造后将图形化编辑器的图元断点加入Eclipse的断点视图进行统一管理。
[0315](4)自定义调试透视图。自定义调试视图包括堆栈视图,自定义变量视图,图形化编辑器,大纲视图,控制台。
[0316]3.调试命令解析模块:调试框架调试命令解析模块主要负责接收并解析图形化调试平台发送的调试命令,并向调试引擎提供必需的调试信息。
[0317]4.调试上下文管理:调试上下文管理为每一个请求维护其上下文信息,为异步调试和多线程调试提供必备基础。
[0318]调试上下文管理模块的设计方法如下:
[0319](I)以单例模式设计调试上下文管理器。
[0320](2)在调试上下文管理器中维护一fthreadMap (线程Map), key为threadID (线程ID), value为requestID (请求ID),将一个线程与一个请求对应。
[0321 ] (3)在调试上下文管理器中维护一个commandMap (调试命令Map ), key为requestID (请求ID), value为commandContext (调试上下文),将一个请求与一份调试上下文对应。
[0322](4)在调试上下文中以常量方式定义调试命令常量(单步进入,单步跳过,单步返回,执行等),用来标识当前调试动作。
[0323](5)在调试上下文中维护一个debugStack (调试堆栈),记录调试过程。
[0324](6)在调试上下文中维护一个stepStack (单步堆栈),记录单步调试过程。
[0325](7)以contextID (上下文ID)标识一个业务流程(或业务逻辑等)的执行,contextID (上下文ID)由图形化调试平台引擎生成,传递给调试框架,调试框架负责在进入业务流程时入栈(debugStack),在出业务流程时出栈(debugStack)。
[0326]5.调试框架接口:定义一套调试接口,各调试类型实现,由整个框架对接口和实现进行分发管理。
[0327]调试框架接口主要包括handleEntry (若调试类型为业务流,则定义进出业务流程前后,进出业务流程图元前后的动作),handleStepInto (定义单步进入动作),handleStepOver (定义单步跳过动作),handleStepReturn (定义单步返回动作),handleResume(定义提交动作),CanHandleStepInto (是否能单步进入),CanHandleStepOver(是否能单步跳过),CanHandleStepReturn (是否能单步返回),handleResume (定义提交动作),getLabel (定义当前堆栈视图栈顶显示的内容),displaySource (资源定位,显示当前调试位置:编辑器+图元)。[0328]6.调试框架实现:各调试类型分别实现所定义的调试框架接口,由整个框架进行管理。
[0329]调试框架对调试框架接口和实现管理的步骤为:
[0330](I)调试框架接收图形化调试平台发送的调试命令,并解析出调试类型。
[0331](2)调试框架根据调试类型将当前调试内容分发给对应调试类型的调试框架实现进行处理。
[0332](3)具体类型调试框架实现执行相应操作或返回相应值后,转交给调试框架进行处理。
[0333](4)调试框架构建调试命令,发送给图形化调试平台。
[0334]7.资源加载:通过引擎加载调试过程中的各种资源,包括调试文件,配置文件。
[0335]8.线程管理。通过引擎管理各调试线程的生命周期,关键在于保证各调试线程独立运行,并提供让指定线程暂停(继续执行)的能力。
[0336]9.拦截器接口:定义一套拦截器接口,各调试类型实现,通过引擎进行事件分发,在事件(进出业务流程,进出业务流程图元等)发生时,调用各调试类型实现的拦截器动作。
[0337]10.拦截器实现:各调试类型分别实现所定义的拦截器接口,由引擎进行管理调用。
[0338]以业务流程拦截器为例,业务流程前拦截器,业务流程后拦截器,业务流程图元前拦截器,业务流程后拦截器实现如下。
[0339]业务流程前拦截器实现,包括以下步骤:
[0340](I)获取交易上下文对象。
[0341](2)解析交易上下文对象,获取交易ID。
[0342](3)解析交易上下文对象,获取交易图元ID。
[0343](4)解析交易上下文对象,获取请求ID。
[0344](5)调用UUID生成唯一 ID,标识从开始到结束一整次交易。
[0345](6)新建栈对象,将UUID (唯一 ID生成器)生成的唯一 ID压入栈中。
[0346](7)将栈对象放入交易上下文对象中;
[0347](8)将所有交易信息,构造成Url ;
[0348]业务流程后拦截器,包括以下步骤:
[0349](I)获取交易上下文对象;
[0350](2)解析交易上下文对象,获取交易ID ;
[0351](3)解析交易上下文对象,获取交易图元ID ;
[0352](4)解析交易上下文对象,获取请求ID ;
[0353](5)从交易上下文对象中获取栈对象;
[0354](6)栈对象最顶层ID出栈;
[0355](7)将所有交易信息,构造成Url ;
[0356]业务流程图元前拦截器实现,包括以下步骤:
[0357](I)获取交易上下文对象;
[0358](2)解析交易上下文对象,获取交易ID ;
[0359](3)解析交易上下文对象,获取交易图元ID ;[0360](4)解析交易上下文对象,获取请求ID ;
[0361](5)从交易上下文对象中获取栈对象;
[0362](6)从栈对象中获取标识一整次交易的ID ;
[0363](7)将所有交易信息,构造成Url ;
[0364]业务流程后拦截器实现,包括以下步骤:
[0365](I)获取交易上下文对象;
[0366](2)解析交易上下文对象,获取交易ID ;
[0367](3)解析交易上下文对象,获取交易图元ID ;
[0368](4)解析交易上下文对象,获取请求ID ;
[0369](5)从交易上下文对象中获取栈对象;
[0370](6)从栈对象中获取标识一整次交易的ID ;
[0371](7)将所有交易信息,构造成Url ;
[0372]11.配置文件:主要包括是否启用调试功能,调试最大超时时间,调试服务器的端口,允许连接调试服务器的IP段等。
[0373]以下是调试的相关设置:
[0374]#--------以下是调试的相关设置----------------------#
[0375]#是否启用调试功能
[0376]enabIeDebug=true
[0377]#调试最大超时时间,单位毫秒
[0378]debugT ime0ut=10000
[0379]#调试服务器的端口
[0380]debugPort=9999[0381]#允许连接调试服务器的IP段(支持正则表达式)
[0382]validConnectinglpPattern=.*
[0383]#能触发断点的IP段(支持正则表达式)
[0384]enabIedBreakpointIpPattern=I27.0.0.1
[0385]以下是拦截器相关配置:
[0386]
【权利要求】
1.一种大数据环境下实现跨进程与跨线程调试的系统,其特征在于,所述的系统包括图形化调试平台和调试框架,所述的图形化调试平台包括: 资源加载模块,用以通过调试引擎加载调试过程中的各种资源; 线程管理模块,用以通过调试引擎管理各调试线程的生命周期; 拦截器接口模块,用以定义拦截器接口和通过调试引擎进行事件并发并于事件并发时调用各调试类型的拦截器动作; 拦截器实现模块,用以由调试引擎管理调用各调试类型的拦截器接口 ; 配置文件模块,用以配置调试过程中的参数和选择; 调试服务器模块,用以接收并解析所述的调试框架发送的调试信息并向所述的调试框架发送调试命令; 所述的调试框架包括: 图形化编辑框架模块,用以为业务流程和业务逻辑开发提供图形化的支持; 调试器用户界面模块,用以提供与用户交互的功能; 调试命令解析模块,用以接收并解析所述的图形化调试平台发送的调试命令并向所述的图形化调试平台提供必需的调试信息; 调试上下文管理模块,用以维护各个调试请求的上下文信息并为异步调试和多线程调试提供必备基础; 调试框架接口模块,用以定义调试接口和各种调试类型;` 调试框架实现模块,用以使得各种调试类型分别实现对应的调试框架接口。
2.根据权利要求1所述的大数据环境下实现跨进程与跨线程调试的系统,其特征在于,所述的图形化调试平台和调试框架通过Socket协议进行通信。
3.一种基于权利要求1或2所述的系统大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的方法包括以下步骤: (1)所述的图形化调试平台和调试框架进行预处理操作; (2)所述的调试框架根据所述的调试框架获取用户的断点信息进行调试引擎的断点配置; (3)所述的调试引擎和图形化调试平台根据用户的中断调试指令执行调试中断操作。
4.根据权利要求3所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的图形化调试平台和调试框架进行预处理操作,包括以下步骤: (11)对所述的配置文件模块进行初始化; (12)启动所述的图形化调试平台所在的应用服务器; (13)对所述的图形化调试平台中的资源加载模块、线程管理模块和调试服务器模块进行初始化; (14)在所述的调试框架的服务器对话框中填写服务器地址和服务器端口; (15)对所述的调试框架中的调试命令解析模块进行初始化; (16)所述的图形化调试平台接收到调试请求后调用调试引擎进行处理并构建调试命令向所述的调试框架发送; (17)所述的调试框架接受调试指令进行图形展示和渲染。
5.根据权利要求4所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的对所述的配置文件模块进行初始化,包括以下步骤: (111)在所述的配置文件模块中配置是否进行调试; (112)在所述的配置文件模块中配置调试最大超时时间; (113)在所述的配置文件模块中配置调试服务器的端口; (114)在所述的配置文件模块中配置允许连接调试服务器的IP段; (115)在所述的配置文件模块中配置需要使用的资源加载类; (116)在所述的配置文件模块中配置需要使用的执行容器和线程池; (117)在所述的配置文件模块中配置需要使用的调试类型的拦截器。
6.根据权利要求4所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的对所述的图形化调试平台中的资源加载模块、线程管理模块和调试服务器模块进行初始化,包括以下步骤: (131)调试引擎模块将配置文件模块中资源加载相关配置载入缓存; (132)调试引擎扫描项目中的所有文件,按后缀区分将资源文件交由资源加载类处理; (133)资源加载类将资源文件转换成模型; (134)按照配置文件模块中执行容器和线程池的配置,初始化容器和线程池; (135)容器在初始化时注册拦截器事件,由调试引擎进行分发; (136)执行容器开始接受请求; (137)若配置文件模块中配置不进行调试,则不进行以下操作; (138)若配置文件模块中配置进行调试,则按照配置文件模块中配置的调试最大超时时间,调试服务器的端口,允许连接调试服务器的IP段,建立网络服务; (139)网络服务开始监听,等待与调试框架通信。
7.根据权利要求4所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的对所述的调试框架中的调试命令解析模块进行初始化,包括以下步骤: (151)调试框架中的调试命令解析模块获取用户填写的服务器地址和服务器端口; (152)调试框架中的调试命令解析模块启动网络服务; (153)调试框架中的调试命令解析模块与图形化调试平台建立连接。
8.根据权利要求3所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的调试框架根据所述的调试框架获取用户的断点信息进行调试引擎的断点配置,包括以下步骤: (21)用户通过所述的调试器用户界面模块在调试源文件中设置断点标记; (22)所述的调试器用户界面模块向调试框架中的断点管理器添加断点标记; (23)所述的图形化调试平台每隔系统预设时间间隔周期性地向调试框架发送请求获取断点息; (24)所述的调试命令解析模块读取所述的断点管理器中的所有断点信息并返回给调试引擎; (25)所述的调试引擎根据所述的调试命令解析模块解析的断点信息更新所持有的断点信息。
9.根据权利要求8所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的用户通过所述的调试器用户界面模块在调试源文件中设置断点标记,包括以下步骤: (211)所述的调试器用户界面模块传入调试源文件的资源路径和文本内容; (212)用户在资源编辑器中添加断点; (213)所述的调试器用户界面模块判断当前行能否下断点,如果是,则继续步骤(214),否则继续步骤(215); (214)调试器用户界面模块在断点管理器中添加一个断点并通知断点视图显示断点; (215)所述的调试器用户界面模块提示当前用户操作无效。
10.根据权利要求3所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的调试引擎和图形化调试平台根据用户的中断调试指令执行调试中断操作,包括以下步骤: (31)用户通过浏览器发送调试请求后在所述的调试框架进行调试指令操作并将相关调试指令发送给图形化调试平台; (32)所述的调试框架实现模块和调试上下文管理模块根据当前调试指令和断点信息判断当前行是否需要中断,如果否,则继续步骤(33),如果是则继续步骤(34); (33)不执行中断操作而继续执行调试; (34)所述的调试框架通知图形化调试平台中断并向图形化调试平台调用调试引擎获取当前的堆栈以及当前的变量; (35)所述的图形化调试平台发送`调试指令给调试框架; (36)所述的调试框架的调试器用户界面模块收到所述的调试指令并根据资源路径找到项目中的调试源文件; (37)所述的调试框架的调试器用户界面模块打开调试源文件并定位到当前图元或当前中断行并于当前图元或当前中断行进行图形化渲染; (38)所述的调试框架的调试器用户界面模块接收图形化调试平台调用堆栈在堆栈视图显示堆栈信息; (39)所述的调试框架的调试器用户界面模块接收图形化调试平台变量信息在变量视图中显示变量信息。
11.根据权利要求10所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的调试框架实现模块和调试上下文管理模块根据当前调试指令和断点信息判断当前行是否需要中断,包括以下步骤: (321)所述的调试框架实现模块和调试上下文管理模块判断当前图元存在是否断点,如果是,则继续步骤(34),否则,继续步骤(322 ); (322)判断当前调试命令类型,如果当前调试命令为单步跳过,则继续步骤(323),如果当前调试命令为单步返回,则继续步骤(326),如果当前调试命令为单步进入,则继续步骤(328),如果当前调试命令为执行,则继续步骤(33); (323)判断当前上下文是否在调试上下文的单步堆栈中,如果不在则继续执行步骤(33),如果在,则执行步骤(324); (324)切换到自定义调试透视图且当前线程执行中断; (325)调试上下文的单步堆栈的step个数大于O时,执行出栈操作;(326)判断当前上下文是否在调试上下文的单步堆栈中,如果不在则继续执行步骤(33),如果在,则执行步骤(327); (327)切换到自定义调试透视图且当前线程执行中断; (328)切换到自定义调试透视图且当前线程执行中断。
12.根据权利要求10所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的调试框架通知图形化调试平台中断并向图形化调试平台调用调试引擎获取当前的堆栈以及当前的变量,包括以下步骤: (341)调试框架的调试命令解析模块向图形化调试平台发送中断命令; (342)图形化调试平台的调试服务器模块接收到中断指令; (343)调试引擎调用线程管理模块中断指定线程; (344)调试引擎获取指定线程的堆栈; (345)调试引擎获取指定线程的变量。
13.根据权利要求10所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的调试框架的调试器用户界面模块收到所述的调试指令根,包括以下步骤: (361)调试框架中的调试命令解析模块接收到调试命令; (362)调试框架中的调试 命令解析模块解析调试命令; (363)调试框架中的调试命令解析模块返回资源、行号、调用堆栈和变量内容。
14.根据权利要求10所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的据资源路径找到项目中的调试源文件,包括以下步骤: (364)调试框架中的调试器用户界面模块获取到资源路径; (365)调试框架中的调试器用户界面模块检测当前打开的图形化编辑器对应的资源文件是否与资源路径一致,如果是则直接定位到当前编辑器,否则继续步骤(366); (366)调试框架中的调试器用户界面模块通过索引查找所有项目下的文件,如果能找到,则打开对应编辑器,否则,返回空。
15.根据权利要求3所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的步骤(3)之后,还包括以下步骤: (4)所述的调试框架根据用户的单步进入调试指令执行单步进入操作; 所述的调试框架根据用户的单步进入调试指令执行单步进入操作包括以下步骤: (41)用户选择单步进入调试指令; (42)图形化调试平台判断和调试框架操作的调试线程是否是同一线程,如果不是则结束退出,否则继续步骤(43); (43)图形化调试平台引擎加载资源,线程管理模块负责将调试线程执行到对应文件第一个图元处或Java方法第一行代码处挂起; (44)调试框架判断和调试框架操作的调试线程是否是同一线程,如果是则对当前调试图元进行渲染,然后继续步骤(45),如果不是则结束退出; (45)调试框架判断图元类型,进入对应文件; (46)调试框架堆栈视图更新堆栈信息; (47)调试框架变量视图更新变量信息。
16.根据权利要求3所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的步骤(3)之后,还包括以下步骤: (5)所述的调试框架根据用户的单步跳过调试指令执行单步跳过操作; 所述的调试框架根据用户的单步跳过调试指令执行单步跳过操作包括以下步骤: (51)用户选择单步跳过调试指令; (52)图形化调试平台判断和调试框架操作的调试线程是否是同一线程,如果是,则继续步骤(53),如果不是则结束退出; (53)图形化调试平台线程管理模块判断当前上下文ID是否在栈中,如果在则继续步骤(54),如果不在则挂起并结束退出; (54)调试框架判断和调试框架操作的调试线程是否是同一线程,如果是则对当前调试图元进行渲染,然后继续步骤(55),如果不是则结束退出; (55)调试框架堆栈视图更新堆栈信息; (56)调试框架变量视图更新变量信息。
17.根据权利要求3所述的大数据环境下实现跨进程与跨线程调试的方法,其特征在于,所述的步骤(3)之后,还 包括以下步骤: (6)所述的调试框架根据用户的单步返回调试指令执行单步返回操作; 所述的调试框架根据用户的单步返回调试指令执行单步返回操作包括以下步骤: (61)用户选择单步返回调试指令; (62)图形化调试平台判断和调试框架操作的调试线程是否是同一线程,如果是,则继续步骤(63),如果不是则结束退出; (63)图形化调试平台线程管理模块对调试堆栈进行出栈操作; (64)图形化调试平台线程管理模块判断当前上下文ID是否在栈中,如果在则继续步骤(65),如果不在则挂起结束退出; (65)调试框架判断和调试框架操作的调试线程是否是同一线程,若是则对当前调试图元进行渲染,然后继续步骤(66),如果不是则结束退出; (66)调试框架堆栈视图更新堆栈信息; (67)调试框架变量视图更新变量信息。
【文档编号】G06F11/36GK103678135SQ201310728331
【公开日】2014年3月26日 申请日期:2013年12月25日 优先权日:2013年12月25日
【发明者】马骏, 曹宗伟 申请人:普元信息技术股份有限公司