CN103473431B - 一种轻量级的在线调试php程序的方法 - Google Patents

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

Info

Publication number
CN103473431B
CN103473431B CN201310445315.2A CN201310445315A CN103473431B CN 103473431 B CN103473431 B CN 103473431B CN 201310445315 A CN201310445315 A CN 201310445315A CN 103473431 B CN103473431 B CN 103473431B
Authority
CN
China
Prior art keywords
variable
statement
developer
server
debugging
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201310445315.2A
Other languages
English (en)
Other versions
CN103473431A (zh
Inventor
杨楠
吴凌
张化劲
王千祥
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Peking University
Original Assignee
Peking University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Peking University filed Critical Peking University
Priority to CN201310445315.2A priority Critical patent/CN103473431B/zh
Publication of CN103473431A publication Critical patent/CN103473431A/zh
Application granted granted Critical
Publication of CN103473431B publication Critical patent/CN103473431B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种轻量级的在线调试PHP程序的方法。该方法包括步骤:1.开发者使用鼠标在代码中划取需要查看的变量,这些变量显示在Debug控制台中,便于开发者查看管理;2.开发者点击调试按钮,浏览器将项目路径和划取的变量发送到服务器;3.服务器在文件中找到这些变量,并在其下一行插入输出语句以将变量输出到日志文件中,再将修改后的代码进行部署;4.开发者运行应用时,变量信息被写入日志文件中,包含变量名称、变量值、变量类型和变量位置等;5.开发者点击查看变量,向服务器发送指令,服务器获日志文件,返回变量信息到浏览器端并显示。采用本发明的方法,可以满足了开发者进行程序调试时的基本需求,即查看程序运行时变量的相关信息,同时大大减轻了服务器的负担。

Description

一种轻量级的在线调试PHP程序的方法
技术领域:
本发明是一种轻量级的在线调试PHP程序的方法,应用于在线集成开发环境中,属于软件技术领域。
背景技术:
集成开发环境(Integrated Development Environment,简称IDE)是一种辅助程序开发人员开发软件的应用软件。在线集成开发环境是一种基于云的IDE。开发者通过浏览器进行应用软件的开发,程序在云端运行或部署。
Eclipse等本地集成开发环境调试代码时采用的方式是单步调试,即在需要调试的代码段设置断点,一步一步跟踪程序执行的流程,根据变量的值,找到错误的原因。但对于在线集成开发环境,实现单步调试是一个很大的挑战,因为首先要考虑同步问题,保证服务器端的运行数据和浏览器端的显示内容完全一致;其次,对于每个调试中的项目,服务器端都需要始终保持其调试进程或线程处于运行中,等待用户发来的指令,因而大大增加了服务器的负担。
另外,在最新的TIOBE编程语言排行榜中,PHP语言位居第六(前五名为Java、C及C的扩展语言),其在Web应用开发中具有重要的地位。而PHP语言是一种动态语言,其具有较大的灵活性,在线环境下并不能直接获取到变量的信息。
基于以上原因,目前已有的在线集成开发环境对PHP程序的调试基本无法提供良好的支持。
发明内容:
针对上述问题,本发明提出了一种轻量级的在线调试PHP程序的方法。这种方法的提出基于对软件开发者编程习惯的观察,在编写程序时,如果出现问题,一般开发者会在代码中插入echo语句从而输出关键变量的值,判断应用运行到该处时是否出错。
这种新的调试方法主要思想即是将开发者的这种手动输入echo语句的过程自动化。基本流程如下:
1)开发者使用鼠标在代码中划取需要查看的PHP变量,这些变量显示在Debug控制台中,便于开发者查看管理;
2)开发者点击调试按钮,浏览器将项目路径和划取的变量发送到服务器;
3)服务器在文件中找到这些变量,并在其下一行插入error_log语句以将变量输出到日志文件中,再将修改后的代码进行部署;
4)开发者运行应用时,变量信息被写入日志文件中,包含变量名称、变量值、变量类型和变量位置等;
5)开发者点击查看变量,向服务器发送指令,服务器获取日志文件,返回变量信息到浏览器端并显示。
上述的在线集成开发环境的轻量级调试方法,所述步骤3)中,需要查看的变量位于普通语句,则在该语句之后插入输出语句。
上述的在线集成开发环境的轻量级调试方法,所述步骤3)中,需要查看的变量位于条件语句,首先检查该语句的条件体是否被大括号包围,否则应添加大括号,然后在大括号内插入输出语句。
上述的在线集成开发环境的轻量级调试方法,所述步骤3)中,需要查看的变量位于循环语句,首先检查该语句的条件体是否被大括号包围,否则应添加大括号,然后在大括号内插入输出语句,同时若用户提出变量输出次数的要求,则应控制输出语句的执行次数。
上述的在线集成开发环境的轻量级调试方法,所述步骤3)中,需要查看的变量位于返回语句,则将返回的表达式赋值给临时变量,然后插入输出语句,最后返回临时变量。
本发明的技术效果在于:本发明的方法满足了开发者进行PHP程序调试时的基本需求,即查看程序运行时变量的相关信息,同时相对于传统的单步调试,该轻量级方法大大减轻了服务器的负担,使得服务器不需要保持多个活动进程以等待每个用户的单步请求,符合在线集成开发环境快速响应和降低服务器资源消耗的要求。
附图说明
图1表示在本发明中轻量级调试方法流程图。
具体实施方式:
本发明提出了轻量级的在线调试PHP程序的方法,并进行了具体实现。
作为在线集成开发环境的一个模块,轻量级调试的整体实现可采用三层架构设计,即表现层、业务逻辑层和数据访问层。
表现层显示用户界面,显示代码、控制台,进行用户交互,以及调用后台调试服务时向服务器端通过AJAX发送请求和获取响应。
业务逻辑层将调试功能封装为独立的服务,通过标准的HTTP GET/POST方法访问,该服务当中又细化为不同的操作,包括代码插装和变量选择,用户向服务发送请求可进行其中的一项操作。
数据访问层主要是在插装代码时对文件的操作,包括原文件备份、修改文件内容和恢复文件。
以上三层有机结合在一起,业务逻辑层使用数据访问层实现文件操作,表现层通过调用业务逻辑层的服务将结果呈现给用户。这样的架构使得该轻量级调试方法的实现层次更加清晰,利于代码的复用和后期维护。
完成总体结构设计之后,以下对三个主要步骤进行详细实现说明。
1、变量选择
在浏览器端当用户使用鼠标划取或双击选择了编辑区中的词时,编辑区的选中词条发生变化,该事件触发函数判断该词是否以“$”开头,如果是则该词为PHP变量,显示浮动Watch按钮,其定位为当前光标之后,具体坐标值由编辑区、代码标签页、光标所在行列和滚动条位置综合计算得出。
用户点击Watch按钮,触发变量选择函数,获取当前文件路径、变量名、所在行和列,存储于JSON格式数据,该种格式数据可以表示各种复杂的结构,同时易于人阅读和编写也易于机器解析和生成。JSON数据显示于Debug控制台中,用户可以直接点击控制台的某一项跳转到变量所在的行,也可以删除其中的一项。
另外,如果用户所选变量处于循环中,用户可在工具栏的文本框里填写想要查看的循环次数(默认为3,最大值为20,应对恶意代码中的死循环情况),例如对于一个次数为10的循环,用户填写的次数为3,则只会在结果中显示前3次循环中变量的值。
2、代码插装
变量选择完毕后,用户点击调试按钮,传递到服务器端的参数包括项目名称、JSON格式的变量信息和设定的循环次数。
自动添加输出变量代码的过程需要进行语法分析,使用了JavaCC和JTB工具进行语法分析和建立语法树。通过遍历AST,得到需要插入文件的代码和其位置,并存储于数组中。主要涉及的节点有PHP页面、语句结束符、复合语句、条件语句、迭代语句、跳转语句和变量。
进行代码插装的基本方法是,对于每个变量节点,如果其行、列值与待查看变量相同,则将其存放于数组中,当其所在语句结束后,在下一行插入代码如下形式的代码:
error_log(genstr(2,12,″\$a″,$a,gettype($a)),3,″debug.log″);
表示将第一个参数中的字符串发送到文件目标debug.log。函数genstr()生成包含文件路径、行号、列号、变量名、变量值、变量类型信息的JSON数据,需要在PHP文件开始处插入如下所示代码(为便于阅读,该代码经格式化,插入的代码无换行和缩进以减少占用空间)。
代码插装过程中还需要对特殊语句进行特别处理:
1)条件语句
在if-else语句中,条件体内只有一条语句需要执行时,if、elseif或else后面的大括号可能已被省略,如果此时在条件体内语句之后插入一条error_log语句,将造成代码结构错误,所以需要添加大括号。处理方法为,在条件语句节点,为所有非复合语句的条件体(即未被大括号包围的语句)在前后添加大括号语句。
如果用户查看的变量包含于条件表达式中,也不可以直接插入语句,需要进入到条件体内,在大括号的下一行插入。即将条件语句节点中的处理延迟到复合语句节点中。示例代码如下:
2)迭代语句
同选择语句一样,迭代语句也会出现同样的两个问题,处理方式类似。
另外,迭代语句中的变量信息会被输出多次,系统对其次数进行了限制,用户也可自定义该值,因而需要控制error_log语句的输出次数。处理方法为,在迭代语句节点中,在插入的error_log语句前后添加临时变量进行计数,达到设定值后即不再输出。
3)跳转语句
如果待查看变量包含于retum语句中,那么在之后插入的代码将不会被执行。因而将需要返回的表达式赋值给临时变量,再插入error_log语句,该语句之后将临时变量返回。
3、结果查看
经过以上处理,服务器就得到了待插入代码和其位置;再读取原文件,插入代码,于是得到包含输出变量信息代码的文件;将项目部署之后,恢复文件到未插入代码状态;用户通过链接查看PHP应用时,文件运行即把变量信息写入项目文件夹中的debug.log文件。
用户点击查看调试结果,服务器端获得该项目debug.log文件中的内容,并将其返回浏览器端。该内容已经是JSON格式的数据,所以将其直接显示于Debug控制台中,用户可查看变量位置、名称、值和类型。
接下来通过一个简单的例子说明本发明的应用过程。对于一段PHP代码:
用户在用户界面的编辑区内划取了变量$str(第3行)、$var(第4行)、$i(第7行),并输入了显示循环变量次数为5。点击调试按钮之后,这些信息都被发送到服务器端。
服务器根据代码存储路径找到文件,读入文件内容,经过上述的代码插装过程,得到插装后的代码(此处代码经格式化以便于阅读):
如上代码被部署到服务器上,当用户打开PHP应用时,error_log语句得以执行,将信息以JSON格式写入debug.log文件。服务器再读取该文件即可获得用户想要查看的变量相关信息:
用户根据以上信息即可判断程序运行过程中是否出错即出错位置,实现轻量级的代码调试。

Claims (5)

1.一种轻量级的在线调试PHP程序的方法,满足了开发者进行程序调试时查看程序运行时变量相关信息的需求,同时大大减轻了服务器的负担,其特征在于,包括如下步骤:
1)开发者使用鼠标在代码中划取需要查看的变量,这些变量显示在Debug控制台中,便于开发者查看管理;
2)开发者点击调试按钮,浏览器将项目路径和划取的变量发送到服务器;
3)服务器在文件中找到这些变量,并在其下一行插入输出语句以将变量输出到日志文件中,再将修改后的代码进行部署;
4)开发者运行应用时,变量信息被写入日志文件中,包含变量名称、变量值、变量类型和变量位置;
5)开发者点击查看变量,向服务器发送指令,服务器获取日志文件,返回变量信息到浏览器端并显示。
2.如权利要求1所述的一种轻量级的在线调试PHP程序的方法,其特征在于,所述步骤3)中,需要查看的变量位于普通语句,则在该语句之后插入输出语句。
3.如权利要求1所述的一种轻量级的在线调试PHP程序的方法,其特征在于,所述步骤3)中,需要查看的变量位于条件语句,首先检查该语句的条件体是否被大括号包围,否则应添加大括号,然后在大括号内插入输出语句。
4.如权利要求1所述的一种轻量级的在线调试PHP程序的方法,其特征在于,所述步骤3)中,需要查看的变量位于循环语句,首先检查该语句的条件体是否被大括号包围,否则应添加大括号,然后在大括号内插入输出语句,同时若用户提出变量输出次数的要求,则应控制输出语句的执行次数。
5.如权利要求1所述的一种轻量级的在线调试PHP程序的方法,其特征在于,所述步骤3)中,需要查看的变量位于返回语句,则将返回的表达式赋值给临时变量,然后插入输出语句,最后返回临时变量。
CN201310445315.2A 2013-09-25 2013-09-25 一种轻量级的在线调试php程序的方法 Expired - Fee Related CN103473431B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310445315.2A CN103473431B (zh) 2013-09-25 2013-09-25 一种轻量级的在线调试php程序的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310445315.2A CN103473431B (zh) 2013-09-25 2013-09-25 一种轻量级的在线调试php程序的方法

Publications (2)

Publication Number Publication Date
CN103473431A CN103473431A (zh) 2013-12-25
CN103473431B true CN103473431B (zh) 2016-12-07

Family

ID=49798279

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310445315.2A Expired - Fee Related CN103473431B (zh) 2013-09-25 2013-09-25 一种轻量级的在线调试php程序的方法

Country Status (1)

Country Link
CN (1) CN103473431B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107977304B (zh) * 2016-10-24 2021-05-25 北京京东尚科信息技术有限公司 一种系统调试方法和装置
CN107911264A (zh) * 2017-12-07 2018-04-13 清华大学 可编程路由交换设备在线调试装置及方法
CN113138830A (zh) * 2021-06-22 2021-07-20 阿里云计算有限公司 云应用架构图的生成方法、装置、设备和存储介质
CN113934626A (zh) * 2021-09-26 2022-01-14 中国汽车技术研究中心有限公司 模型过程调试方法、设备和存储介质
CN115658553B (zh) * 2022-12-26 2023-03-17 西安葡萄城软件有限公司 一种基于低代码平台的调试方法、系统及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007140732A (ja) * 2005-11-16 2007-06-07 Ip Flex Kk Lsiの配置配線の決定方法および決定プログラム
CN103049385A (zh) * 2012-12-29 2013-04-17 百度在线网络技术(北京)有限公司 一种云环境下的php代码调试方法及系统
CN103092581A (zh) * 2011-10-28 2013-05-08 阿里巴巴集团控股有限公司 一种Web前端本地开发环境的搭建方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5200675B2 (ja) * 2008-06-11 2013-06-05 富士通株式会社 シミュレーション装置,シミュレーション方法,シミュレーションプログラム及び同プログラムを記録したコンピュータ読取可能な記録媒体

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007140732A (ja) * 2005-11-16 2007-06-07 Ip Flex Kk Lsiの配置配線の決定方法および決定プログラム
CN103092581A (zh) * 2011-10-28 2013-05-08 阿里巴巴集团控股有限公司 一种Web前端本地开发环境的搭建方法和装置
CN103049385A (zh) * 2012-12-29 2013-04-17 百度在线网络技术(北京)有限公司 一种云环境下的php代码调试方法及系统

Also Published As

Publication number Publication date
CN103473431A (zh) 2013-12-25

Similar Documents

Publication Publication Date Title
Saks JavaScript Frameworks: Angular vs React vs Vue.
US8201143B2 (en) Dynamic mating of a modified user interface with pre-modified user interface code library
US8694960B2 (en) Computer-implemented method, system and computer program product for displaying a user interface component
KR102218995B1 (ko) 코드 가상화 및 원격 프로세스 호출 생성을 위한 방법 및 장치
CN103597469B (zh) 集成开发环境中的实况浏览器工具
CN106201893B (zh) 一种Java字节码调试器及调试方法
CN103473431B (zh) 一种轻量级的在线调试php程序的方法
AU2015218520B2 (en) Service extraction and application composition
US20110167332A1 (en) System and Method for Generating Web Pages
US20170192877A1 (en) Mobile application development and deployment
US20050268280A1 (en) Encapsulating changes to a software application
CN102667730A (zh) 设计时调试
CN103377128A (zh) 用于Web应用的竞争检测的方法和系统
CN113064593B (zh) 移动app动态化的方法、装置、计算机设备及存储介质
CN111831384A (zh) 语言切换方法和装置、设备及存储介质
US10282398B1 (en) Editing tool for domain-specific objects with reference variables corresponding to preceding pages
CN114217789A (zh) 功能组件拓展方法、装置、设备、存储介质及程序产品
US20230195825A1 (en) Browser extension with automation testing support
Haller et al. RaUL: RDFa User Interface Language–A data processing model for web applications
CN115905759A (zh) 一种无障碍网页生成方法、装置、介质和设备
US20180113721A1 (en) Systems and methods for generating a self-updating maintenance page
CN110019177A (zh) 规则存储的方法和装置
CN109062785B (zh) 接口参数约束代码定位方法与系统
Burnette Google web toolkit
CN112732254B (zh) 网页开发方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20161207

Termination date: 20170925

CF01 Termination of patent right due to non-payment of annual fee