CN103473431B - 一种轻量级的在线调试php程序的方法 - Google Patents
一种轻量级的在线调试php程序的方法 Download PDFInfo
- 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
Links
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种轻量级的在线调试PHP程序的方法。该方法包括步骤:1.开发者使用鼠标在代码中划取需要查看的变量,这些变量显示在Debug控制台中,便于开发者查看管理;2.开发者点击调试按钮,浏览器将项目路径和划取的变量发送到服务器;3.服务器在文件中找到这些变量,并在其下一行插入输出语句以将变量输出到日志文件中,再将修改后的代码进行部署;4.开发者运行应用时,变量信息被写入日志文件中,包含变量名称、变量值、变量类型和变量位置等;5.开发者点击查看变量,向服务器发送指令,服务器获日志文件,返回变量信息到浏览器端并显示。采用本发明的方法,可以满足了开发者进行程序调试时的基本需求,即查看程序运行时变量的相关信息,同时大大减轻了服务器的负担。
Description
技术领域:
本发明是一种轻量级的在线调试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)中,需要查看的变量位于返回语句,则将返回的表达式赋值给临时变量,然后插入输出语句,最后返回临时变量。
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)
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)
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5200675B2 (ja) * | 2008-06-11 | 2013-06-05 | 富士通株式会社 | シミュレーション装置,シミュレーション方法,シミュレーションプログラム及び同プログラムを記録したコンピュータ読取可能な記録媒体 |
-
2013
- 2013-09-25 CN CN201310445315.2A patent/CN103473431B/zh not_active Expired - Fee Related
Patent Citations (3)
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 |