一种轻量级的在线调试php程序的方法

文档序号:6513275阅读:1157来源:国知局
一种轻量级的在线调试php程序的方法
【专利摘要】本发明公开了一种轻量级的在线调试PHP程序的方法。该方法包括步骤:1.开发者使用鼠标在代码中划取需要查看的变量,这些变量显示在Debug控制台中,便于开发者查看管理;2.开发者点击调试按钮,浏览器将项目路径和划取的变量发送到服务器;3.服务器在文件中找到这些变量,并在其下一行插入输出语句以将变量输出到日志文件中,再将修改后的代码进行部署;4.开发者运行应用时,变量信息被写入日志文件中,包含变量名称、变量值、变量类型和变量位置等;5.开发者点击查看变量,向服务器发送指令,服务器获日志文件,返回变量信息到浏览器端并显示。采用本发明的方法,可以满足了开发者进行程序调试时的基本需求,即查看程序运行时变量的相关信息,同时大大减轻了服务器的负担。
【专利说明】一种轻量级的在线调试PHP程序的方法
【技术领域】:
[0001]本发明是一种轻量级的在线调试PHP程序的方法,应用于在线集成开发环境中,属于软件【技术领域】。
【背景技术】:
[0002]集成开发环境(IntegratedDevelopment Environment,简称 IDE)是一种辅助程序开发人员开发软件的应用软件。在线集成开发环境是一种基于云的IDE。开发者通过浏览器进行应用软件的开发,程序在云端运行或部署。
[0003]Eclipse等本地集成开发环境调试代码时采用的方式是单步调试,即在需要调试的代码段设置断点,一步一步跟踪程序执行的流程,根据变量的值,找到错误的原因。但对于在线集成开发环境,实现单步调试是一个很大的挑战,因为首先要考虑同步问题,保证服务器端的运行数据和浏览器端的显示内容完全一致;其次,对于每个调试中的项目,服务器端都需要始终保持其调试进程或线程处于运行中,等待用户发来的指令,因而大大增加了服务器的负担。
[0004]另外,在最新的TIOBE编程语言排行榜中,PHP语言位居第六(前五名为Java、C及C的扩展语言),其在Web应用开发中具有重要的地位。而PHP语言是一种动态语言,其具有较大的灵活性,在线环境下并不能直接获取到变量的信息。
[0005]基于以上原因,目前已有的在线集成开发环境对PHP程序的调试基本无法提供良好的支持。

【发明内容】
:
[0006]针对上述问题,本发明提出了一种轻量级的在线调试PHP程序的方法。这种方法的提出基于对软件开发者编程习惯的观察,在编写程序时,如果出现问题,一般开发者会在代码中插入echo语句从而输出关键变量的值,判断应用运行到该处时是否出错。
[0007]这种新的调试方法主要思想即是将开发者的这种手动输入echo语句的过程自动化。基本流程如下:
[0008]I)开发者使用鼠标在代码中划取需要查看的PHP变量,这些变量显示在Debug控制台中,便于开发者查看管理;
[0009]2)开发者点击调试按钮,浏览器将项目路径和划取的变量发送到服务器;
[0010]3)服务器在文件中找到这些变量,并在其下一行插入eirorjog语句以将变量输出到日志文件中,再将修改后的代码进行部署;
[0011]4)开发者运行应用时,变量信息被写入日志文件中,包含变量名称、变量值、变量类型和变量位置等;
[0012]5)开发者点击查看变量,向服务器发送指令,服务器获取日志文件,返回变量信息到浏览器端并显示。
[0013]上述的在线集成开发环境的轻量级调试方法,所述步骤3)中,需要查看的变量位于普通语句,则在该语句之后插入输出语句。
[0014]上述的在线集成开发环境的轻量级调试方法,所述步骤3)中,需要查看的变量位于条件语句,首先检查该语句的条件体是否被大括号包围,否则应添加大括号,然后在大括号内插入输出语句。
[0015]上述的在线集成开发环境的轻量级调试方法,所述步骤3)中,需要查看的变量位于循环语句,首先检查该语句的条件体是否被大括号包围,否则应添加大括号,然后在大括号内插入输出语句,同时若用户提出变量输出次数的要求,则应控制输出语句的执行次数。
[0016]上述的在线集成开发环境的轻量级调试方法,所述步骤3)中,需要查看的变量位于返回语句,则将返回的表达式赋值给临时变量,然后插入输出语句,最后返回临时变量。
[0017]本发明的技术效果在于:本发明的方法满足了开发者进行PHP程序调试时的基本需求,即查看程序运行时变量的相关信息,同时相对于传统的单步调试,该轻量级方法大大减轻了服务器的负担,使得服务器不需要保持多个活动进程以等待每个用户的单步请求,符合在线集成开发环境快速响应和降低服务器资源消耗的要求。
【专利附图】

【附图说明】
[0018]图1表示在本发明中轻量级调试方法流程图。
【具体实施方式】:
[0019]本发明提出了轻量级的在线调试PHP程序的方法,并进行了具体实现。
[0020]作为在线集成开发环境的一个模块,轻量级调试的整体实现可采用三层架构设计,即表现层、业务逻辑层和数据访问层。
[0021]表现层显示用户界面,显示代码、控制台,进行用户交互,以及调用后台调试服务时向服务器端通过AJAX发送请求和获取响应。
[0022]业务逻辑层将调试功能封装为独立的服务,通过标准的HTTP GET/POST方法访问,该服务当中又细化为不同的操作,包括代码插装和变量选择,用户向服务发送请求可进行其中的一项操作。
[0023]数据访问层主要是在插装代码时对文件的操作,包括原文件备份、修改文件内容和恢复文件。
[0024]以上三层有机结合在一起,业务逻辑层使用数据访问层实现文件操作,表现层通过调用业务逻辑层的服务将结果呈现给用户。这样的架构使得该轻量级调试方法的实现层次更加清晰,利于代码的复用和后期维护。
[0025]完成总体结构设计之后,以下对三个主要步骤进行详细实现说明。
[0026]1、变量选择
[0027]在浏览器端当用户使用鼠标划取或双击选择了编辑区中的词时,编辑区的选中词条发生变化,该事件触发函数判断该词是否以“$”开头,如果是则该词为PHP变量,显示浮动Watch按钮,其定位为当前光标之后,具体坐标值由编辑区、代码标签页、光标所在行列和滚动条位置综合计算得出。
[0028]用户点击Watch按钮,触发变量选择函数,获取当前文件路径、变量名、所在行和列,存储于JSON格式数据,该种格式数据可以表示各种复杂的结构,同时易于人阅读和编写也易于机器解析和生成。JSON数据显示于Debug控制台中,用户可以直接点击控制台的某一项跳转到变量所在的行,也可以删除其中的一项。
[0029]另外,如果用户所选变量处于循环中,用户可在工具栏的文本框里填写想要查看的循环次数(默认为3,最大值为20,应对恶意代码中的死循环情况),例如对于一个次数为10的循环,用户填写的次数为3,则只会在结果中显示前3次循环中变量的值。
[0030]2、代码插装
[0031]变量选择完毕后,用户点击调试按钮,传递到服务器端的参数包括项目名称、JSON格式的变量信息和设定的循环次数。
[0032]自动添加输出变量代码的过程需要进行语法分析,使用了JavaCC和JTB工具进行语法分析和建立语法树。通过遍历AST,得到需要插入文件的代码和其位置,并存储于数组中。主要涉及的节点有PHP页面、语句结束符、复合语句、条件语句、迭代语句、跳转语句和变量。
[0033]进行代码插装的基本方法是,对于每个变量节点,如果其行、列值与待查看变量相同,则将其存放于数组中,当其所在语句结束后,在下一行插入代码如下形式的代码:
[0034]error_log (genstr (2,12, " \$a" , $a, gettype ($a) ),3, " debug.log");
[0035]表示将第一个参数中的字符串发送到文件目标debug, log。函数genstr O生成包含文件路径、行号、列号、变量名、变量值、变量类型信息的JSON数据,需要在PHP文件开始处插入如下所示代码(为便于阅读,该代码经格式化,插入的代码无换行和缩进以减少占用空间)。
[0036]
【权利要求】
1.一种轻量级的在线调试PHP程序的方法,满足了开发者进行程序调试时的基本需求,即查看程序运行时变量的相关信息,同时大大减轻了服务器的负担,其特征在于,包括如下步骤: 1)开发者使用鼠标在代码中划取需要查看的变量,这些变量显示在Debug控制台中,便于开发者查看管理; 2)开发者点击调试按钮,浏览器将项目路径和划取的变量发送到服务器; 3)服务器在文件中找到这些变量,并在其下一行插入输出语句以将变量输出到日志文件中,再将修改后的代码进行部署; 4)开发者运行应用时,变量信息被写入日志文件中,包含变量名称、变量值、变量类型和变量位置等; 5)开发者点击查看变量,向服务器发送指令,服务器获取日志文件,返回变量信息到浏览器端并显示。
2.如权利要求1所述的在线集成开发环境的轻量级调试方法,其特征在于,所述步骤3)中,需要查看的变量位于普通语句,则在该语句之后插入输出语句。
3.如权利要求1所述的在线集成开发环境的轻量级调试方法,其特征在于,所述步骤3)中,需要查看的变量位于条件语句,首先检查该语句的条件体是否被大括号包围,否则应添加大括号,然后在大括号内插入输出语句。
4.如权利要求1所述的在线集成开发环境的轻量级调试方法,其特征在于,所述步骤3)中,需要查看的变量位于循环语句,首先检查该语句的条件体是否被大括号包围,否则应添加大括号,然后在大括号内插入输出语句,同时若用户提出变量输出次数的要求,则应控制输出语句的执行次数。
5.如权利要求1所述的在线集成开发环境的轻量级调试方法,其特征在于,所述步骤3)中,需要查看的变量位于返回语句,则将返回的表达式赋值给临时变量,然后插入输出语句,最后返回临时变量。
【文档编号】G06F17/50GK103473431SQ201310445315
【公开日】2013年12月25日 申请日期:2013年9月25日 优先权日:2013年9月25日
【发明者】杨楠, 吴凌, 张化劲, 王千祥 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1