CN103577326A - Debug调试方法和装置 - Google Patents

Debug调试方法和装置 Download PDF

Info

Publication number
CN103577326A
CN103577326A CN201310540974.4A CN201310540974A CN103577326A CN 103577326 A CN103577326 A CN 103577326A CN 201310540974 A CN201310540974 A CN 201310540974A CN 103577326 A CN103577326 A CN 103577326A
Authority
CN
China
Prior art keywords
debug
program
debugging
value
information
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.)
Granted
Application number
CN201310540974.4A
Other languages
English (en)
Other versions
CN103577326B (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.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co Ltd
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 Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201310540974.4A priority Critical patent/CN103577326B/zh
Publication of CN103577326A publication Critical patent/CN103577326A/zh
Priority to PCT/CN2014/090306 priority patent/WO2015067171A1/zh
Application granted granted Critical
Publication of CN103577326B publication Critical patent/CN103577326B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种DEBUG调试方法和装置;其中的方法包括:在包含有至少一个调试关键点的程序开始被执行时,获取程序执行的参与主体的标识信息;判断参与主体的标识信息是否属于预先设定的参与主体标识集合;如果属于,则将调试开关的当前取值设置为第一值,否则,将调试开关的当前取值设置为第二值;在程序被执行到每一调试关键点时,均获取调试开关的当前取值;判断调试开关的当前取值;如果为第一值,则根据当前执行的调试关键点处设置的调试信息产生相应的DEBUG信息,并继续执行程序,且所述DEBUG信息被传输至程序调试客户端;如果为第二值,则不执行上述DEBUG信息的产生操作,而继续执行该程序。

Description

DEBUG调试方法和装置
技术领域
本发明涉及PHP调试技术,具体涉及一种针对PHP的DEBUG调试方法和装置。
背景技术
PHP(Hypertext Preprocessor,超文本预处理器)是一种通用的开源脚本语言,其吸收了C语言、Java以及Perl的特点,且主要用于Web开发。由于PHP具有入门门槛较低且易于学习等优点,因此,PHP的应用范围非常广泛。
与其他的软件开发语言一样,PHP在Web开发过程中也需要进行调试;然而,在Web开发过程中的调试通常并不采用单步调试方式,这其中的原因包括:PHP对HTTP环境变量以及数据库等外部资源的依赖性较强,构造这样的单步调试环境通常较麻烦,因此,PHP并不能像C++以及Java等软件开发语言那样可以很方便的进行单步调试;另外,PHP作为弱类型语言,单步调试也并不是必须的。
在利用PHP进行Web开发过程中,现有的PHP调试方式主要包括:利用YII框架的YII-Debug-Boolbar进行DEBUG调试。具体的,YII-Debug-Boolbar将DEBUG信息打印到页面的一个隐藏的DIV中,然后,通过控制相应的按钮展开DIV,从而可以查看其中的DEBUG信息。
在程序正式上线后,如果用户上报故障,则在当前状态下无法再利用YII框架的YII-Debug-Boolbar进行DEBUG调试,如测试人员无法远程获得A用户访问的DEBUG信息;只能利用现有的远程程序调试方式进行程序调试。
现有的远程程序调试方式通常为:利用QQ等工具的远程登录功能登录上报故障的用户的终端设备,并利用用户的终端设备中的调试工具实现远程程序调试。
发明人在实现本发明过程中发现,现有的PHP调试方式不能同时兼顾Web开发过程中的程序调试以及程序上线后的远程程序调试;另外,在针对Web开发模式的PHP调试方式中,被打印到DIV中的DEBUG信息会破坏原有页面的BODY源代码结构,从而在有AJAX(异步JavaScript和XML)请求时,会出现数据结构错误的问题;还有,在Web(尤其是Web2.0)开发过程中,数据通常是以Json格式进行传输的,而现有的打印到DIV中的DEBUG信息通常需要以ECHO格式进行传输,这会影响Web的开发效率。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的DEBUG调试方法和相应的DEBUG调试装置。
依据本发明的一个方面,提供了一种DEBUG调试方法,该方法包括:在包含有至少一个调试关键点的程序开始被执行时,获取程序执行的参与主体的标识信息;判断所述参与主体的标识信息是否属于预先设定的参与主体标识集合;如果属于预先设定的参与主体标识集合,则将所述程序的调试开关的当前取值设置为第一值,否则,将该程序的调试开关的当前取值设置为第二值;其中,该第一值表示调试开关开启,该第二值表示调试开关关闭;在所述程序被执行到每一调试关键点时,均获取调试开关的当前取值;判断所述调试开关的当前取值;如果为第一值,则根据当前执行的调试关键点处设置的调试信息产生相应的DEBUG信息,继续执行所述程序,且所述DEBUG信息被传输至程序调试客户端;如果为第二值,则不执行上述DEBUG信息的产生操作,并继续执行所述程序。
根据本发明的另一方面,提供了一种DEBUG调试装置,该装置包括:第一获取模块,适于在包含有至少一个调试关键点的程序开始被执行时,获取程序执行的参与主体的标识信息;第一处理模块,适于判断所述参与主体的标识信息是否属于预先设定的参与主体标识集合;如果属于预先设定的参与主体标识集合,则将程序的调试开关的当前取值设置为第一值,否则,将所述程序的调试开关的当前取值设置为第二值;其中,所述第一值表示调试开关开启,所述第二值表示调试开关关闭;第二获取模块,适于在所述程序被执行到每一调试关键点时,均获取调试开关的当前取值;第二处理模块,判断所述调试开关的当前取值;如果为第一值,则根据当前执行的调试关键点处设置的调试信息产生相应的DEBUG信息,继续执行所述程序,且所述DEBUG信息被传输至程序调试客户端;如果为第二值,则不执行上述DEBUG信息的产生操作,并继续执行所述程序。
本发明的DEBUG调试方法和装置通过在程序在开始运行时,根据程序执行的参与主体的标识信息设置调试开关开启或者关闭,且程序中的各调试关键点处设置的调试信息会根据调试开关的当前取值来决定是否执行DEBUG信息的打印处理(即产生DEBUG信息),这样,在程序上线后无需删除程序中的调试信息;而且,通过对程序执行的参与主体的标识信息是否属于参与主体标识集合的判断,不仅可以方便的实现Web开发模式的程序调试,而且可以非常方便的针对上报故障的用户实现远程程序调试;进一步的,在Web开发模式下,由于本实施例的DEBUG信息可以以Json格式承载于HTTP消息的头域中传输至程序调试客户端,因此,本发明的调试技术不仅不会影响Web的开发效率,而且也不会破坏原有页面的BODY源代码结构,这样,在有AJAX请求时,不会出现数据结构错误的问题;由此可知,本发明提供的PHP调试技术具有适用范围广以及易用性好等特点。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。本实施例的附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明实施例一的DEBUG调试方法流程图;
图2示出了根据本发明实施例二的DEBUG信息示意图;
图3示出了根据本发明实施例三的DEBUG信息示意图;
图4示出了根据本发明实施例四的DEBUG调试装置示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一、DEBUG调试方法。下面结合图1对本实施例的方法进行说明。
图1中,S100、针对包含有至少一个调试关键点的程序而言,在该程序开始被执行时,获取该程序执行的参与主体的标识信息。
具体的,本实施例中的程序是指基于PHP的程序,如使用PHP开发的基于Web服务的应用程序等;且该程序中的调试关键点可以是利用现有的工具自动设置的调试关键点,如利用FIREPHP工具在程序中自动设置的调试关键点;当然,程序中的调试关键点也可以是程序开发人员根据实际需求而在程序中自行手工设置的调试关键点。
通常情况下,程序中的数据库操作、Memcache操作、网络调用等资源类操作通常都会被设置为需要产生DEBUG信息的调试关键点。
本实施例可以对程序的入口进行相应的改进,如在程序的入口处新增设置相应的程序代码,以便于在程序开始被执行时,新增设置的程序代码首先被执行。由于在程序中新增设置的程序代码的作用包括获取该程序执行的参与主体的标识信息;因此,在该程序开始被执行时,本实施例可以首先获取到程序执行的参与主体的标识信息。
本实施例中的程序执行的参与主体可以为执行该程序的服务器,也可以为:该程序当前所服务的用户;因此,本实施例中的程序执行的参与主体的标识信息可以为服务器的IP地址或者服务器ID,也可以为用户的IP地址或者用户的登录账号(即用户ID)等;该标识信息应能够唯一标识出程序执行的参与主体。
S110、判断上述获取到的参与主体的标识信息是否属于预先设定的参与主体标识集合;如果该参与主体的标识信息属于预先设定的参与主体标识集合,则到S120;如果该参与主体的标识信息不属于预先设定的参与主体标识集合,则到S130。
具体的,本实施例中的参与主体标识集合是预先设置的,如在Web开发过程中,可以将开发环境中运行该程序的服务器的IP地址或者服务器的ID预先设置在该参与主体标识集合中;再如,在程序正式上线后,如果接收到某用户上报的故障信息,则可以将该用户的IP地址或者用户的ID设置在该参与主体标识集合中。
该参与主体标识集合可以由运行该程序的服务器进行维护,且该参与主体标识集合可以设置于该程序内部,也可以独立于该程序而设置,如设置于数据库或者表中,这样,在上述判断过程中,会涉及到数据库或者表的查询访问操作。
该参与主体标识集合通常会包含有一个或者多个参与主体标识。本步骤中的判断获取到的参与主体的标识信息是否属于预先设定的参与主体标识集合是指参与主体的标识信息是否与参与主体标识集合中的某个参与主体标识匹配;也就是说,如果获取到的参与主体的标识信息与参与主体标识集合中的一个参与主体标识匹配,则表示该参与主体的标识信息属于预先设定的参与主体标识集合,否则,表示该参与主体的标识信息不属于预先设定的参与主体标识集合。
在该参与主体标识集合为空的情况下,上述获取到的参与主体的标识信息一定不属于该参与主体标识集合。
S120、将程序的调试开关的当前取值设置为第一值,然后,到S140。
具体的,该程序的调试开关可以为常量,如布尔型常量或者数值型常量等,在该调试开关的当前值被设置为第一值或者第二值后,在该程序的后续执行过程中,该调试开关的取值通常不会发生变化。另外,该程序的调试开关也可以表现为标志位等其他形式。
上述第一值可以为true,也可以为0或者其他预定数值等。
S130、将程序的调试开关的当前取值设置为第二值,然后,到S140。
具体的,第二值与上述第一值不相同,例如,第一值为true时,第二值为false;再如,第一值为0,第二值为1。另外,在Web开发过程中,该调试开关的缺省值可以设置为第一值,而在程序上线后,该调试开关的缺省值可以设置为第二值。
在本实施例中,第一值表示调试开关开启,第二值表示调试开关关闭。
另外,需要说明的是,上述S100至S130均应设置于程序的入口处,如在程序的入口处新增设置相应的程序代码以执行上述S100-S130的操作。
S140、在该程序执行到每一调试关键点时,均需要获取调试开关的当前取值。
具体的,在程序执行到一调试关键点时,该调试关键点处设置的调试信息均会被执行,且均会先获取调试开关(如上述布尔型常量)的当前取值。
S150、判断该调试开关的当前取值,如果该调试开关的当前取值为第一值,则到S160;如果调试开关的当前取值为第二值,则到S170。
S160、根据当前执行到的调试关键点处设置的调试信息产生相应的DEBUG信息,并继续执行该程序中的后续内容。
具体的,调试关键点处设置的调试信息包括DEBUG命令,该DEBUG命令用于产生关键点的日志(即该DEBUG命令用于打印关键点的日志),从而产生相应的DEBUG信息。本实施例中的通过执行DEBUG命令而产生相应的DEBUG信息的过程也可以称为打印DEBUG信息。
本实施例所产生的DEBUG信息可以包括:请求URL信息、POST信息、Cookie信息、程序执行debug信息、页面返回内容以及执行时间等等。
S170、不执行S160中记载的产生相应的DEBUG信息的操作,并继续执行该程序中的后续内容。
具体的,在调试开关的当前取值为第二值的情况下,表示该程序在本次运行过程中不需要进行调试,因此,应忽略当前执行的调试关键点处设置的调试信息中的DEBUG命令,而继续执行程序中的非调试部分的程序代码。
S180、将DEBUG信息传输至程序调试客户端。
具体的,本实施例中的DEBUG信息可以在产生后立即向程序调试客户端发送,也可以在该程序执行完成时,将所有的DEBUG信息一起向程序调试客户端发送。
在Web开发过程中,DEBUG信息被传输至程序调试客户端的一个具体的例子为:在基于一个关键点处的调试信息产生了DEBUG信息后,即刻产生一HTTP消息,并将当前产生的DEBUG信息以Json格式承载于当前产生的该HTTP消息的头域中,之后,将该HTTP消息传输至程序调试客户端。通常情况下,程序调试客户端可以设置于运行该程序的设备(如服务器)中。另外,本实施例也可以采用其他格式(如自定义格式)将DEBUG信息承载于HTTP消息的头域中,相应的,在DEBUG信息的呈现过程中,也应采用相应的方式对DEBUG信息进行解析并显示。
在远程调试过程中,DEBUG信息被传输至程序调试客户端的一个具体的例子为:利用ShutDown函数在程序中注册一DEBUG信息传输函数,该DEBUG信息传输函数主要用于以异步队列的方式将DEBUG信息传输至调试中心(如调试中心管理后台);通常情况下,该调试中心与运行该程序的设备(如服务器)为两台相互独立设置的物理设备。该程序在执行过程中,被执行到的关键点处设置的调试信息产生的DEBUG信息被暂时存储起来,在该程序执行完成或者该程序执行了退出(EXIT)操作时,上述注册的DEBUG信息传输函数被调用,这样,该DEBUG信息传输函数将上述暂时存储的所有DEBUG信息以异步队列的方式传输至调试中心,调试中心在接收到DEBUG信息之后,将该DEBUG信息以Json格式或者其他格式(如自定义格式)承载于HTTP消息的头域中,然后,调试中心将该HTTP消息传输至程序调试客户端,由程序调试客户端将DEBUG信息呈现给维护人员。通常情况下,该程序调试客户端设置于调试中心所在的物理设备中。
由上述实施例的描述可知,本实施例的DEBUG调试方法并不属于单步调试技术;由于程序在开始运行时,会根据程序执行的参与主体的标识信息设置调试开关开启或者关闭,且程序中的各调试关键点处设置的调试信息会根据调试开关的当前取值来决定是否执行DEBUG信息的打印处理,因此,在程序上线后无需删除程序中的调试信息,并且不会对上线后的程序的正常运行产生影响;通过对程序执行的参与主体的标识信息是否属于参与主体标识集合进行判断,不仅可以方便的实现Web开发模式的程序调试,而且,也可以方便的获知针对上报故障的用户的程序运行状态,从而可以非常方便的针对上报故障的用户实现远程程序调试;因此,无论是Web开发模式,还是远程程序调试模式,本实施例均可以实现问题的快速分析定位;另外,在Web开发模式下,由于本实施例的DEBUG信息可以以Json格式承载于HTTP消息的头域中传输至程序调试客户端,因此,不仅不会影响Web的开发效率,而且也不会破坏原有页面的BODY源代码结构,进而在存在AJAX请求时,不会出现数据结构错误的问题。
实施例二、Web开发过程中的DEBUG调试方法。下面结合图2对本实施例的方法进行说明。
在Web开发过程中,应预先在需要关注的关键点(如资源点)处设置调试信息,例如,在Memcache的increment操作处设置的调试信息可以如下所示:
其中,DAGGER_DEBUG为布尔型常量,主要用于控制后面的debug命令是否执行,即控制其后面设置的debug命令是否开启,DAGGER_DEBUG是本实施例中的调试开关。
在程序开始运行时,先获取当前服务器的IP地址,并判断该服务器的IP地址是否属于预先设定的服务器IP地址集合,之后,根据该判断的结果设置DAGGER_DEBUG的当前取值。由于本实施例是在Web开发环境中,因此,预先设定的服务器IP地址集合中设置有当前服务器的IP地址,从而当前服务器的IP地址一定属于预先设定的服务器IP地址集合,进而,DAGGER_DEBUG应被设置为表征调试开关开启的信息。
在用户访问相应的页面时,上述increment操作中设置的调试信息会产生相应的DEBUG信息,该DEBUG信息以基于Json格式的方式承载于HTTP消息的头域中,该HTTP消息传输至程序调试客户端,HTTP消息的头域中的DEBUG信息可以通过本地浏览器的控制台呈现给开发人员,如HTTP消息的头域中的DEBUG信息经Firephp工具解析后,开发人员可以从Firefox浏览器下方的firebug控制台看到相应的DEBUG信息。
上述increment操作中设置的调试信息产生的DEBUG信息的一个具体的例子可参见下述内容:
Mc_connect:127.0.0.1:11211;
Mc_set(dogger_abc),ttl(0):1
Mc_increment(dagger_abc):2
其中,mc_increment(dagger_abc):2是上述DEBUG命令输出的信息。
一个比较完整的DEBUG信息如图2所示。在图2中,数组部分是可以展开呈现的。开发人员通过阅读DEBUG信息可以充分了解程序中的各关键点的执行情况,从而可以对程序中的问题进行快速定位。
实施例三、远程程序调试过程中的DEBUG调试方法。下面结合图3对本实施例的方法进行说明。
在程序的入口处设置有用于打开远程程序调试的程序代码,该程序代码的一个具体的例子为:
也就是说,在用户ID为“303426817”或者为“254659189”时,该程序的远程程序调试功能被打开。上述用户ID也可以替换为用户IP地址等。
在程序开始运行时,应先获取用户ID(如从来自用户的HTTP消息中获取用户ID),并判断该用户ID是否属于预先设定的用户ID集合(即上述程序代码中的array()数组),之后,根据该判断的结果设置DAGGER_DEBUG的当前取值(如“true”or“false”)。由于本实施例是在远程程序调试环境中,因此,在接收到用户上报故障信息的情况下,应将该上报故障的用户的用户ID设置于array()数组中,从而上报故障的用户的用户ID一定会属于上述array()数组,进而,DAGGER_DEBUG应被设置为表征调试开关开启的信息,如true。
在本实施例中,由于该程序的远程程序调试功能被打开,因此,程序中各关键点处设置的调试信息均会产生DEBUG信息,这些DEBUG信息均被暂时存储起来,在程序执行完成时,所有被暂时存储的DEBUG信息以异步队列的方式被传输至调试中心,调试中心将其接收到DEBUG信息以Json格式承载于HTTP消息的头域中,然后,调试中心将HTTP消息传输至程序调试客户端。该程序调试客户端(如Firephp工具的客户端)在其调试信息按钮被维护人员点击时,本地浏览器的控制台为维护人员呈现DEBUG信息。本地浏览器的控制台为维护人员呈现的DEBUG信息的一个具体的例子如图3所示。
实施例四、DEBUG调试装置。下面结合图4对该装置进行详细说明。
图4中示出的装置主要包括:第一获取模块400、第一处理模块410、第二获取模块420以及第二处理模块430。
第一获取模块400主要适于在包含有至少一个调试关键点的程序开始被执行时,获取程序执行的参与主体的标识信息。
具体的,本实施例中的程序是指基于PHP的程序,如使用PHP开发的基于Web服务的应用程序等;且该程序中的调试关键点可以是利用现有的工具自动设置的调试关键点,如利用FIREPHP工具在程序中自动设置的调试关键点;当然,程序中的调试关键点也可以是程序开发人员根据实际需求而在程序中自行手工设置的调试关键点。
通常情况下,程序中的数据库操作、Memcache操作、网络调用等资源类操作通常都会被设置为需要产生DEBUG信息的调试关键点。
本实施例可以对程序的入口进行相应的改进,如在程序的入口处新增设置第一获取模块400,以便于在程序开始被执行时,新增设置的第一获取模块400首先被执行,获取到程序执行的参与主体的标识信息。
本实施例中的程序执行的参与主体可以为执行该程序的服务器,也可以为:该程序当前所服务的用户;因此,本实施例中的程序执行的参与主体的标识信息可以为服务器的IP地址或者服务器ID,也可以为用户的IP地址或者用户的登录账号(即用户ID)等;该标识信息应能够唯一标识出程序执行的参与主体。
第一处理模块410主要适于判断参与主体的标识信息是否属于预先设定的参与主体标识集合;如果属于预先设定的参与主体标识集合,则将程序的调试开关的当前取值设置为第一值,否则,将程序的调试开关的当前取值设置为第二值;其中,第一值表示调试开关开启,第二值表示调试开关关闭;
具体的,本实施例中的参与主体标识集合是预先设置的,如在Web开发过程中,可以将开发环境中运行该程序的服务器的IP地址或者服务器的ID预先设置在该参与主体标识集合中;再如,在程序正式上线后,如果接收到某用户上报的故障信息,则可以将该用户的IP地址或者用户的ID设置在该参与主体标识集合中。
该参与主体标识集合可以由运行该程序的服务器进行维护,且该参与主体标识集合可以设置于该程序内部,也可以独立于该程序而设置。
该参与主体标识集合通常会包含有一个或者多个参与主体标识。第一处理模块410判断获取到的参与主体的标识信息是否属于预先设定的参与主体标识集合是指参与主体的标识信息是否与参与主体标识集合中的某个参与主体标识匹配;也就是说,如果第一处理模块410判断出第一获取模块400获取到的参与主体的标识信息与参与主体标识集合中的一个参与主体标识匹配,则表示该参与主体的标识信息属于预先设定的参与主体标识集合,否则,表示该参与主体的标识信息不属于预先设定的参与主体标识集合。
在该参与主体标识集合为空的情况下,第一处理模块410判断出第一获取模块400获取到的参与主体的标识信息一定不属于该参与主体标识集合。
该程序的调试开关可以为常量,如布尔型常量或者数值型常量等,在第一处理模块410将该调试开关的当前值设置为第一值或者第二值后,在该程序的后续执行过程中,该调试开关的取值通常不会发生变化。另外,该程序的调试开关也可以表现为标志位等其他形式。
第二值与上述第一值不相同,如第一值为true时,第二值为false;再如,第一值为0,第二值为1。另外,在Web开发过程中,该调试开关的缺省值可以设置为第一值,而在程序上线后,该调试开关的缺省值可以设置为第二值。第一值表示调试开关开启,第二值表示调试开关关闭。
另外,需要说明的是,上述第一获取模块400和第一处理模块410均应设置于程序的入口处。
第二获取模块420主要适于在程序被执行到每一调试关键点时,均获取调试开关的当前取值。
具体的,第二获取模块420的数量可以为多个,且程序中的每个调试关键点处均会设置一第二获取模块420;这样,在程序每执行到一个调试关键点处时,该调试关键点处设置的第二获取模块420均会被执行,且均会先获取调试开关(如上述布尔型常量)的当前取值。
第二处理模块430主要适于判断调试开关的当前取值;如果调试开关的当前取值为第一值,则根据当前执行的调试关键点处设置的调试信息产生相应的DEBUG信息,继续执行该程序,且该DEBUG信息被传输至程序调试客户端;如果调试开关的当前取值为第二值,则不执行上述DEBUG信息的产生操作,并继续执行该程序。
具体的,调试关键点处设置的第二处理模块430中的调试信息包括DEBUG命令,该DEBUG命令用于产生关键点的日志(即该DEBUG命令用于打印关键点的日志),从而产生相应的DEBUG信息。
第二处理模块430产生的DEBUG信息可以包括:请求URL信息、POST信息、Cookie信息、程序执行debug信息、页面返回内容以及执行时间等等。
在调试开关的当前取值为第二值的情况下,表示该程序在本次运行过程中不需要进行调试,因此,应忽略当前执行的调试关键点处设置的第二处理模块430中的调试信息中的DEBUG命令,从而可以继续执行程序中的非调试部分的程序代码。
第二处理模块430可以在DEBUG信息产生后,立即向程序调试客户端发送,也可以在该程序执行完成时,将所有的DEBUG信息一起向程序调试客户端发送。
在Web开发过程中,第二处理模块430将DEBUG信息传输至程序调试客户端的一个具体的例子为:在基于一个关键点处的调试信息产生了DEBUG信息后,第二处理模块430即刻产生一HTTP消息,并将当前产生的DEBUG信息以Json格式承载于当前产生的该HTTP消息的头域中,之后,第二处理模块430将该HTTP消息传输至程序调试客户端。另外,第二处理模块430也可以采用其他格式(如自定义格式)将DEBUG信息承载于HTTP消息的头域中,相应的,在DEBUG信息的呈现过程中,也应采用相应的方式对DEBUG信息进行解析并显示。
在远程调试过程中,第二处理模块430将DEBUG信息传输至程序调试客户端的一个具体的例子为:利用ShutDown函数在程序中注册一DEBUG信息传输函数(该DEBUG信息传输函数属于第二处理模块430),该DEBUG信息传输函数主要用于以异步队列的方式将DEBUG信息传输至调试中心(如调试中心管理后台);通常情况下,该调试中心与运行该程序的设备(如服务器)为两台相互独立设置的物理设备。该程序在执行过程中,被执行到的关键点处设置的调试信息产生的DEBUG信息被第二处理模块430暂时存储起来,在该程序执行完成或者该程序执行了退出(EXIT)操作时,上述注册的DEBUG信息传输函数被调用,这样,该DEBUG信息传输函数将上述第二处理模块430暂时存储的所有DEBUG信息以异步队列的方式传输至调试中心,调试中心在接收到DEBUG信息之后,将该DEBUG信息以Json格式或者其他格式(如自定义格式)承载于HTTP消息的头域中,然后,调试中心将该HTTP消息传输至程序调试客户端,由程序调试客户端将DEBUG信息呈现给维护人员。
A1、一种DEBUG调试方法,其包括:
在包含有至少一个调试关键点的程序开始被执行时,获取程序执行的参与主体的标识信息;
判断所述参与主体的标识信息是否属于预先设定的参与主体标识集合;
如果属于预先设定的参与主体标识集合,则将所述程序的调试开关的当前取值设置为第一值,否则,将所述程序的调试开关的当前取值设置为第二值;其中,所述第一值表示调试开关开启,所述第二值表示调试开关关闭;
在所述程序被执行到每一调试关键点时,均获取调试开关的当前取值;
判断所述调试开关的当前取值;
如果为第一值,则根据当前执行的调试关键点处设置的调试信息产生相应的DEBUG信息,继续执行所述程序,且所述DEBUG信息被传输至程序调试客户端;如果为第二值,则不执行上述DEBUG信息的产生操作,并继续执行所述程序。
A2、如A1所述的方法,其中,所述程序执行的参与主体包括:执行所述程序的服务器或者所述程序当前所服务的用户。
A3、如A2所述的方法,其中,所述程序执行的参与主体的标识信息包括:服务器的IP地址、用户的IP地址或者用户的登录账号。
A4、如A1所述的方法,其中,所述程序的调试开关为常量。
A5、如A1所述的方法,其中,在Web开发过程中,所述DEBUG信息被传输至程序调试客户端包括:
将所述DEBUG信息承载于HTTP消息的头域中,并将所述HTTP消息传输至程序调试客户端。
A6、如A1所述的方法,其中,在远程调试过程中,所述DEBUG信息被传输至程序调试客户端包括:
将所述DEBUG信息以异步队列的方式传输至调试中心,且所述调试中心将接收到的DEBUG信息承载于HTTP消息的头域中,并将所述HTTP消息传输至程序调试客户端。
A7、如A5或A6所述的方法,其中,所述DEBUG信息以Json格式承载于HTTP消息的头域中。
A8、如A7所述的方法,其中,所述将所述DEBUG信息以异步队列的方式传输至调试中心包括:
在所述程序执行完成或者执行了退出操作时,调用通过ShutDown函数注册的DEBUG信息传输函数,所述DEBUG信息传输函数将所述DEBUG信息以异步队列的方式传输至调试中心。
A9、一种DEBUG调试装置,其包括:
第一获取模块,适于在包含有至少一个调试关键点的程序开始被执行时,获取程序执行的参与主体的标识信息;
第一处理模块,适于判断所述参与主体的标识信息是否属于预先设定的参与主体标识集合;如果属于预先设定的参与主体标识集合,则将所述程序的调试开关的当前取值设置为第一值,否则,将所述程序的调试开关的当前取值设置为第二值;其中,所述第一值表示调试开关开启,所述第二值表示调试开关关闭;
第二获取模块,适于在所述程序被执行到每一调试关键点时,均获取调试开关的当前取值;
第二处理模块,判断所述调试开关的当前取值;如果为第一值,则根据当前执行的调试关键点处设置的调试信息产生相应的DEBUG信息,继续执行所述程序,且所述DEBUG信息被传输至程序调试客户端;如果为第二值,则不执行上述DEBUG信息的产生操作,并继续执行所述程序。
A10、如A9所述的装置,其中,该程序执行的参与主体包括:执行所述程序的服务器或者所述程序当前所服务的用户。
A11、如A10所述的装置,其中,所述程序执行的参与主体的标识信息包括:服务器的IP地址、用户的IP地址或者用户的登录账号。
A12、如A9所述的装置,其中,所述程序的调试开关为常量。
A13、如A9所述的装置,其中,在Web开发过程中,所述DEBUG信息被传输至程序调试客户端包括:
第二处理模块将所述DEBUG信息承载于HTTP消息的头域中,并将所述HTTP消息传输至程序调试客户端。
A14、如A9所述的装置,其中,在远程调试过程中,所述DEBUG信息被传输至程序调试客户端包括:
第二处理模块将所述DEBUG信息以异步队列的方式传输至调试中心,且所述调试中心将接收到的DEBUG信息承载于HTTP消息的头域中,并将所述HTTP消息传输至程序调试客户端。
A15、如A13或A14所述的装置,其中,所述DEBUG信息以Json格式承载于HTTP消息的头域中。
A16、如A14所述的装置,其中,所述第二处理模块将所述DEBUG信息以异步队列的方式传输至调试中心包括:
在所述程序执行完成或者执行了退出操作时,第二处理模块调用通过ShutDown函数注册的DEBUG信息传输函数,所述DEBUG信息传输函数将所述DEBUG信息以异步队列的方式传输至调试中心。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的DEBUG调试装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(如计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是,上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (10)

1.一种DEBUG调试方法,其包括:
在包含有至少一个调试关键点的程序开始被执行时,获取程序执行的参与主体的标识信息;
判断所述参与主体的标识信息是否属于预先设定的参与主体标识集合;
如果属于预先设定的参与主体标识集合,则将所述程序的调试开关的当前取值设置为第一值,否则,将所述程序的调试开关的当前取值设置为第二值;其中,所述第一值表示调试开关开启,所述第二值表示调试开关关闭;
在所述程序被执行到每一调试关键点时,均获取调试开关的当前取值;
判断所述调试开关的当前取值;
如果为第一值,则根据当前执行的调试关键点处设置的调试信息产生相应的DEBUG信息,继续执行所述程序,且所述DEBUG信息被传输至程序调试客户端;如果为第二值,则不执行上述DEBUG信息的产生操作,并继续执行所述程序。
2.如权利要求1所述的方法,其中,所述程序执行的参与主体包括:执行所述程序的服务器或者所述程序当前所服务的用户。
3.如权利要求2所述的方法,其中,所述程序执行的参与主体的标识信息包括:服务器的IP地址、用户的IP地址或者用户的登录账号。
4.如权利要求1所述的方法,其中,所述程序的调试开关为常量。
5.如权利要求1所述的方法,其中,在Web开发过程中,所述DEBUG信息被传输至程序调试客户端包括:
将所述DEBUG信息承载于HTTP消息的头域中,并将所述HTTP消息传输至程序调试客户端。
6.如权利要求1所述的方法,其中,在远程调试过程中,所述DEBUG信息被传输至程序调试客户端包括:
将所述DEBUG信息以异步队列的方式传输至调试中心,且所述调试中心将接收到的DEBUG信息承载于HTTP消息的头域中,并将所述HTTP消息传输至程序调试客户端。
7.如权利要求5或6所述的方法,其中,所述DEBUG信息以Json格式承载于HTTP消息的头域中。
8.如权利要求7所述的方法,其中,所述将所述DEBUG信息以异步队列的方式传输至调试中心包括:
在所述程序执行完成或者执行了退出操作时,调用通过ShutDown函数注册的DEBUG信息传输函数,所述DEBUG信息传输函数将所述DEBUG信息以异步队列的方式传输至调试中心。
9.一种DEBUG调试装置,其包括:
第一获取模块,适于在包含有至少一个调试关键点的程序开始被执行时,获取程序执行的参与主体的标识信息;
第一处理模块,适于判断所述参与主体的标识信息是否属于预先设定的参与主体标识集合;如果属于预先设定的参与主体标识集合,则将所述程序的调试开关的当前取值设置为第一值,否则,将所述程序的调试开关的当前取值设置为第二值;其中,所述第一值表示调试开关开启,所述第二值表示调试开关关闭;
第二获取模块,适于在所述程序被执行到每一调试关键点时,均获取调试开关的当前取值;
第二处理模块,判断所述调试开关的当前取值;如果为第一值,则根据当前执行的调试关键点处设置的调试信息产生相应的DEBUG信息,继续执行所述程序,且所述DEBUG信息被传输至程序调试客户端;如果为第二值,则不执行上述DEBUG信息的产生操作,并继续执行所述程序。
10.如权利要求9所述的装置,其中,该程序执行的参与主体包括:执行所述程序的服务器或者所述程序当前所服务的用户。
CN201310540974.4A 2013-11-05 2013-11-05 Debug调试方法和装置 Expired - Fee Related CN103577326B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201310540974.4A CN103577326B (zh) 2013-11-05 2013-11-05 Debug调试方法和装置
PCT/CN2014/090306 WO2015067171A1 (zh) 2013-11-05 2014-11-05 Debug调试方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310540974.4A CN103577326B (zh) 2013-11-05 2013-11-05 Debug调试方法和装置

Publications (2)

Publication Number Publication Date
CN103577326A true CN103577326A (zh) 2014-02-12
CN103577326B CN103577326B (zh) 2016-06-29

Family

ID=50049150

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310540974.4A Expired - Fee Related CN103577326B (zh) 2013-11-05 2013-11-05 Debug调试方法和装置

Country Status (2)

Country Link
CN (1) CN103577326B (zh)
WO (1) WO2015067171A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015067171A1 (zh) * 2013-11-05 2015-05-14 北京奇虎科技有限公司 Debug调试方法和装置
CN110287112A (zh) * 2019-06-25 2019-09-27 网易(杭州)网络有限公司 客户端的维护方法、装置及可读存储介质
CN110928753A (zh) * 2019-11-19 2020-03-27 深圳前海环融联易信息科技服务有限公司 浏览器控制台日志输出的控制方法、装置、计算机设备及计算机可读存储介质
WO2022247139A1 (zh) * 2021-05-28 2022-12-01 苏州浪潮智能科技有限公司 一种服务器的日志输出方法、系统及相关装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060156286A1 (en) * 2005-01-11 2006-07-13 Morgan Fabian F Dynamic source code analyzer
CN101482848A (zh) * 2009-02-03 2009-07-15 中兴通讯股份有限公司 一种在嵌入式软件运行状态下的动态调试方法及系统
CN102214137A (zh) * 2010-04-06 2011-10-12 华为技术有限公司 调试方法和调试设备
CN102279790A (zh) * 2010-06-11 2011-12-14 国际商业机器公司 分布式调试方法和系统
CN103049385A (zh) * 2012-12-29 2013-04-17 百度在线网络技术(北京)有限公司 一种云环境下的php代码调试方法及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7873872B1 (en) * 2001-07-10 2011-01-18 Versata Development Group, Inc. System and method for remotely debugging application programs
CN101309475A (zh) * 2007-05-18 2008-11-19 中兴通讯股份有限公司 一种通讯终端调试和发布软件版本合一的方法
CN103577326B (zh) * 2013-11-05 2016-06-29 北京奇虎科技有限公司 Debug调试方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060156286A1 (en) * 2005-01-11 2006-07-13 Morgan Fabian F Dynamic source code analyzer
CN101482848A (zh) * 2009-02-03 2009-07-15 中兴通讯股份有限公司 一种在嵌入式软件运行状态下的动态调试方法及系统
CN102214137A (zh) * 2010-04-06 2011-10-12 华为技术有限公司 调试方法和调试设备
CN102279790A (zh) * 2010-06-11 2011-12-14 国际商业机器公司 分布式调试方法和系统
CN103049385A (zh) * 2012-12-29 2013-04-17 百度在线网络技术(北京)有限公司 一种云环境下的php代码调试方法及系统

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015067171A1 (zh) * 2013-11-05 2015-05-14 北京奇虎科技有限公司 Debug调试方法和装置
CN110287112A (zh) * 2019-06-25 2019-09-27 网易(杭州)网络有限公司 客户端的维护方法、装置及可读存储介质
CN110287112B (zh) * 2019-06-25 2023-10-20 网易(杭州)网络有限公司 客户端的维护方法、装置及可读存储介质
CN110928753A (zh) * 2019-11-19 2020-03-27 深圳前海环融联易信息科技服务有限公司 浏览器控制台日志输出的控制方法、装置、计算机设备及计算机可读存储介质
WO2022247139A1 (zh) * 2021-05-28 2022-12-01 苏州浪潮智能科技有限公司 一种服务器的日志输出方法、系统及相关装置

Also Published As

Publication number Publication date
CN103577326B (zh) 2016-06-29
WO2015067171A1 (zh) 2015-05-14

Similar Documents

Publication Publication Date Title
CN101877696B (zh) 在网络应用环境下重构错误响应信息的设备和方法
CN112187585B (zh) 网络协议测试方法及装置
US20080301647A1 (en) Delivering Malformed Data for Fuzz Testing to Software Applications
US8239493B2 (en) Automated server controlled client-side logging
CN110798380B (zh) 一种数据获取方法、系统、装置、测试设备及测试服务器
CN104199725A (zh) 一种服务接口数据模拟方法和系统
CN111444103B (zh) 一种Web页面自动化测试方法及相关设备
CN111597113A (zh) 小程序的验证方法、装置、设备及存储介质
CN104536890A (zh) 测试系统、方法和装置
CN112988599B (zh) 一种页面调试方法、装置、电子设备和存储介质
CN108763071A (zh) 一种网页测试方法及终端设备
CN103577326A (zh) Debug调试方法和装置
CN103023708A (zh) 通信协议接口的测试方法及系统
US11823701B2 (en) Network operation based on domain specific language
CN102662838B (zh) 一种浏览器中Flash的调试方法及系统
KR20150003651A (ko) 컴퓨팅 시스템 및 컴퓨팅 시스템의 제어방법
CN111427710B (zh) 应用程序中组件的通信方法、装置、设备及存储介质
CN103425473B (zh) 一种开放式微博的实现方法和系统
CN111177632A (zh) 数据获取方法及其相关设备、系统及存储装置
CN116346660A (zh) 基于依赖替换服务的数据处理方法、装置、设备及介质
Waher Mastering Internet of Things: Design and create your own IoT applications using Raspberry Pi 3
CN110209572A (zh) 用户界面测试方法、用户界面测试系统及终端
CN110209644A (zh) 日志管理的方法、装置及系统
CN111722951A (zh) 一种异常处理方法及装置、存储介质
CN111858296B (zh) 接口测试方法、装置、设备和存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220729

Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Qizhi software (Beijing) Co.,Ltd.

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

Granted publication date: 20160629