CN107818043A - 用于程序调试的方法和装置 - Google Patents

用于程序调试的方法和装置 Download PDF

Info

Publication number
CN107818043A
CN107818043A CN201610822696.5A CN201610822696A CN107818043A CN 107818043 A CN107818043 A CN 107818043A CN 201610822696 A CN201610822696 A CN 201610822696A CN 107818043 A CN107818043 A CN 107818043A
Authority
CN
China
Prior art keywords
debugging
user terminal
program
debugger
request
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.)
Pending
Application number
CN201610822696.5A
Other languages
English (en)
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.)
Dong Hua Software Co Shares
DHC Software Co Ltd
Original Assignee
Dong Hua Software Co Shares
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 Dong Hua Software Co Shares filed Critical Dong Hua Software Co Shares
Priority to CN201610822696.5A priority Critical patent/CN107818043A/zh
Publication of CN107818043A publication Critical patent/CN107818043A/zh
Pending legal-status Critical Current

Links

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/362Software debugging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

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

Abstract

本发明公开了一种用于程序调试的方法和装置,应用于服务器。所述方法包括:分别接收多个用户终端发送的、与所述多个用户终端一一对应的多个调试请求,每个调试请求分别用于请求对对应的用户终端中的程序进行调试;响应于所述多个调试请求,分别生成与所述多个调试请求一一对应的多个调试线程;分别通过每个调试线程,对对应的用户终端中的程序进行调试。这样,当一个用户终端的调试由于一些原因暂停时,其他线程中执行的任务并不会受到影响,因此,调试任务对服务器中的其他任务的干扰性较小,使服务器运行更加稳定。

Description

用于程序调试的方法和装置
技术领域
本公开涉及计算机领域,具体地,涉及一种用于程序调试的方法和装置。
背景技术
在大规模、复杂的软件开发周期中,为了保障软件系统的可靠性、灵活性和健壮性,软件程序的调试器在其中发挥了不可替代的作用。调试器是能够监测程序执行状态的工具,它能够定位程序中的错误设计,并分析软件的工作原理。
在程序调试中,可以在用户终端之外的其他节点中远程执行调试任务。程序调试技术可能会对调试程序所在的进程产生影响,比如进程阻塞时,如果同一进程中的其他线程上正在执行其他任务时,也会被迫中断。通常会将调试任务运行于非生产环境中的节点上。
发明内容
本公开的目的是提供一种可靠性较高的、用于程序调试的方法和装置。
为了实现上述目的,本公开提供一种用于程序调试的方法,应用于服务器。所述方法包括:分别接收多个用户终端发送的、与所述多个用户终端一一对应的多个调试请求,每个调试请求分别用于请求对对应的用户终端中的程序进行调试;响应于多个调试请求,分别生成与所述多个调试请求一一对应的多个调试线程;分别通过每个调试线程,对对应的用户终端中的程序进行调试。
可选地,任意两个调试线程中的调试器实例不同,任意两个调试线程中的运行环境不同。
可选地,所述分别通过每个调试线程,对对应的用户终端中的程序进行调试的步骤包括:分别通过每个调试线程,对对应的用户终端中的程序进行断点调试。
可选地,所述分别通过每个调试线程,对对应的用户终端中的程序进行断点调试的步骤包括:当调试进入断点状态时,接收用户终端发送的查询请求,所述查询请求用于请求查询变量值;响应于所述查询请求,查询变量的当前值;向所述用户终端发送所述变量的当前值。
可选地,所述方法还包括:在对一用户终端的程序调试完成时,终止对应的调试线程。
本公开还提供一种用于程序调试的装置,应用于服务器。所述装置包括:接收模块,用于分别接收多个用户终端发送的、与所述多个用户终端一一对应的多个调试请求,每个调试请求分别用于请求对对应的用户终端中的程序进行调试;生成模块,用于响应于多个调试请求,分别生成与所述多个调试请求一一对应的多个调试线程;调试模块,用于分别通过每个调试线程,对对应的用户终端中的程序进行调试。
通过上述技术方案,响应于每个用户终端的调试请求,为每个用户终端建立专用的调试线程。这样,当一个用户终端的调试由于一些原因暂停时,其他线程中执行的任务并不会受到影响,因此,调试任务对服务器中的其他任务的干扰性较小,使服务器运行更加稳定。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1是一示例性实施例提供的用于程序调试的方法的场景图;
图2是一示例性实施例提供的用于程序调试的方法的流程图;
图3是另一示例性实施例提供的用于程序调试的方法的流程图;
图4是一示例性实施例提供的断点调试步骤的流程图;
图5是又一示例性实施例提供的用于程序调试的方法的流程图;
图6是一示例性实施例提供的用于程序调试的装置的框图。
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
如上所述,在传统的程序调试中,服务器为每个调试任务分配一个进程,该进程中包含一个调试器的运行实例。当调试程序遇断点挂起时,此进程会被阻塞。这样,在该进程被调试器用户终端唤醒之前,其他所有执行于此进程上的用户操作均被中断。
考虑到以上缺陷,发明人想到,可以在服务器端为每个用户终端建立专用的调试线程,以解决在程序调试过程中调试程序挂起时,影响其他任务的问题。这样,使得服务器运行的可靠性更高。
图1是一示例性实施例提供的用于程序调试的方法的场景图。如图1所示,程序调试可以在一个服务器和多个用户终端1,2,…,N之间进行。
图2是一示例性实施例提供的用于程序调试的方法的流程图。所述方法应用于服务器,如图2所示,所述方法包括以下步骤。
在步骤S11中,分别接收多个用户终端发送的、与所述多个用户终端一一对应的多个调试请求,每个调试请求分别用于请求对对应的用户终端中的程序进行调试。
在步骤S12中,响应于多个调试请求,分别生成与所述多个调试请求一一对应的多个调试线程。
在步骤S13中,分别通过每个调试线程,对对应的用户终端中的程序进行调试。
其中,多个用户终端可以同时或不同时地发送调试请求。服务器在接收到一用户终端的调试请求时,创建专用于该用户终端的调试线程。
举例来说,在第一用户终端就其内部的一程序向服务器发送调试请求时,服务器可以响应于该请求,创建专用于该第一用户终端的第一调试线程,即该第一调试线程与第一用户终端相对应。之后,可以通过第一调试线程对第一用户终端中的程序进行远程调试。
对第一用户终端中的程序调试期间,当第二用户终端就其内部的一程序向服务器发送调试请求时,服务器可以响应于该请求,创建专用于第二用户终端的第二调试线程。之后,通过第二调试线程对第二用户终端中的程序进行远程调试。
具体地,可以在调试线程中初始化一个调试会话,该初始化可以实现于用户终端的集成开发环境(Integrated Development Environment,IDE)内部或外部。可以在调试会话内运行一个协作的、无阻塞非侵入式调试器实例。
调试请求可以包括一个待执行的调试操作(代码)。服务器和用户终端之间可以(例如,采用长轮询技术)建立双向的通信管道(即建立数据传输协议,确定统一的序列化及编码格式),通过该通信管道进行远程调试。
本公开的实施例中,上述调试会话是基于线程的。线程级别的调试技术可以保证当某些事件引起调试线程暂停时,其他线程上执行的任务不会受到影响。
在上述实施例中,由于用户代码被运行于远端服务器的调试线程中,调试器和用户终端可以随时获取调试过程中的所有数据,并可以控制程序的执行,因此,这种服务器端的调试需要用户终端的高操作权限来保证系统和数据的安全性。也就是,为了保证用户数据的安全性,不具有相应权限的用户终端无法实现上述分布式的调试。为了实现资源的隔离,不同的用户终端在启用调试服务时,可以使用不同的堆栈空间及运行环境。
由此,在本公开的另一实施例中,任意两个调试线程中的调试器实例不同,任意两个调试线程中的运行环境不同。例如,服务器为每个调试线程提供与其对应的调试器实例相匹配、协作的运行环境。这样,由于不同调试线程使用不同的调试器实例、运行环境以及堆栈空间,各个用户终端的调试任务在服务器端实现了资源隔离,因此,提出调试请求的用户终端并不需要具有高操作权限。
图3是另一示例性实施例提供的用于程序调试的方法的流程图。如图3所示,在图2的基础上,分别通过每个调试线程,对对应的用户终端中的程序进行调试的步骤(步骤S13)可以包括步骤S131。
在步骤S131中,分别通过每个调试线程,对对应的用户终端中的程序进行断点调试。
也就是,可以通过断点调试的方法对各个用户终端进行程序的调试。具体地,在预先使用脚本解释器逐行解释脚本语句时,可向每行脚本插入断点。当调试过程中遇到断点时,解释脚本的线程会被停止,而其他正在执行的线程可以正常执行。该实施例中,采用了断点调试的方法,增强了用户与服务器调试进程之间的交互性,利于及时发现问题。
在断点调试时,用户还可以在断点状态下,远程通过服务器查询变量值。图4是一示例性实施例提供的断点调试步骤的流程图。如图4所示,分别通过每个调试线程,对对应的用户终端中的程序进行断点调试的步骤(步骤S131)可以包括以下步骤。
在步骤S1311中,当调试进入断点状态时,接收用户终端发送的查询请求,所述查询请求用于请求查询变量值。
在步骤S1312中,响应于所述查询请求,查询变量的当前值。
在步骤S1313中,向所述用户终端发送所述变量的当前值。
以用户终端通过IDE实现调试的方式为例。具体地,可以在用户终端启动一个IDE,IDE可显示待调试的用户源码,并提供可选的调试操作。用户可以通过IDE在待调试源码中设置断点。用户终端可以将包含有断点信息的调试请求发送至服务器。当启动调试服务后,服务器创建调试线程,用户终端和服务器之间建立通信管道。
服务器在执行每条语句前,可以检查其内部状态来判断下一条待执行语句是否包含断点,并执行相应操作。当进入断点状态时,服务器可以生成一调试消息,该调试消息可以包括当前正在调试的代码文件以及当前所遇断点语句的位置信息等。服务器将该断点消息发送至对应的用户终端。用户终端中例如可以将当前执行行进行加亮显示。
该实施例中,可以在调试进入断点状态时,执行查询变量值的调试操作,增强了用户操作的灵活性。
另外,可以根据回调函数,对与各个调试器实例对应的用户终端中的程序进行调试。也就是,可以预先通过插装代码向用户终端的程序中插入回调方法。这样,服务器在遇到断点前可以通过回调函数实现代码调试。
图5是又一示例性实施例提供的用于程序调试的方法的流程图。如图5所示,在图2的基础上,所述方法还可以包括步骤S14。
在步骤S14中,在对一用户终端的程序调试完成时,终止对应的调试线程。
也就是,当一用户终端的调试任务完成以后,可以关闭服务器和该用户终端的调试会话和通信管道,以免不必要的资源占用。
通过上述技术方案,响应于每个用户终端的调试请求,为每个用户终端建立专用的调试线程。这样,当一个用户终端的调试由于一些原因暂停时,其他线程中执行的任务并不会受到影响,因此,调试任务对服务器中的其他任务的干扰性较小,使服务器运行更加稳定。
本公开还提供一种用于程序调试的装置,应用于服务器。图6是一示例性实施例提供的用于程序调试的装置的框图。如图6所示,所述用于程序调试的装置10可以包括接收模块11、生成模块12和调试模块13。
接收模块11用于分别接收多个用户终端发送的、与所述多个用户终端一一对应的多个调试请求,每个调试请求分别用于请求对对应的用户终端中的程序进行调试。
生成模块12用于响应于多个调试请求,分别生成与多个调试请求一一对应的多个调试线程。
调试模块13用于分别通过每个调试线程,对对应的用户终端中的程序进行调试。
可选地,任意两个调试线程中的调试器实例不同,任意两个调试线程中的运行环境不同。
可选地,所述调试模块13可以包括断点调试子模块。
断点调试子模块用于分别通过每个调试线程,对对应的用户终端中的程序进行断点调试。
可选地,所述断点调试子模块可以包括查询请求接收子模块、查询子模块和发送子模块。
查询请求接收子模块用于当调试进入断点状态时,接收用户终端发送的查询请求,所述查询请求用于请求查询变量值。
查询子模块用于响应于所述查询请求,查询变量的当前值。
发送子模块用于向所述用户终端发送所述变量的当前值。
可选地,所述装置还包括终止模块。
终止模块用于在对一用户终端的程序调试完成时,终止对应的调试线程的运行。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
通过上述技术方案,响应于每个用户终端的调试请求,为每个用户终端建立专用的调试线程。这样,当一个用户终端的调试由于一些原因暂停时,其他线程中执行的任务并不会受到影响,因此,调试任务对服务器中的其他任务的干扰性较小,使服务器运行更加稳定。
也就是,本公开提供了一种云服务器,该云服务器能够响应于多个用户终端的调试请求,启动线程级别的调试器实例,分别对多个用户终端中的程序进行调试,使得在调试过程中遇到中断时,不会影响其他任务的执行。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

Claims (10)

1.一种用于程序调试的方法,应用于服务器,其特征在于,所述方法包括:
分别接收多个用户终端发送的、与所述多个用户终端一一对应的多个调试请求,每个调试请求分别用于请求对对应的用户终端中的程序进行调试;
响应于所述多个调试请求,分别生成与所述多个调试请求一一对应的多个调试线程;
分别通过每个调试线程,对对应的用户终端中的程序进行调试。
2.根据权利要求1所述的方法,其特征在于,任意两个调试线程中的调试器实例不同,任意两个调试线程中的运行环境不同。
3.根据权利要求1所述的方法,其特征在于,所述分别通过每个调试线程,对对应的用户终端中的程序进行调试的步骤包括:
分别通过每个调试线程,对对应的用户终端中的程序进行断点调试。
4.根据权利要求3所述的方法,其特征在于,所述分别通过每个调试线程,对对应的用户终端中的程序进行断点调试的步骤包括:
当调试进入断点状态时,接收用户终端发送的查询请求,所述查询请求用于请求查询变量值;
响应于所述查询请求,查询变量的当前值;
向所述用户终端发送所述变量的当前值。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在对一用户终端的程序调试完成时,终止对应的调试线程。
6.一种用于程序调试的装置,应用于服务器,其特征在于,所述装置包括:
接收模块,用于分别接收多个用户终端发送的、与所述多个用户终端一一对应的多个调试请求,每个调试请求分别用于请求对对应的用户终端中的程序进行调试;
生成模块,用于响应于所述多个调试请求,分别生成与所述多个调试请求一一对应的多个调试线程;
调试模块,用于分别通过每个调试线程,对对应的用户终端中的程序进行调试。
7.根据权利要求6所述的装置,其特征在于,任意两个调试线程中的调试器实例不同,任意两个调试线程中的运行环境不同。
8.根据权利要求6所述的装置,其特征在于,所述调试模块包括:
断点调试子模块,用于分别通过每个调试线程,对对应的用户终端中的程序进行断点调试。
9.根据权利要求8所述的装置,其特征在于,所述断点调试子模块包括:
查询请求接收子模块,用于当调试进入断点状态时,接收用户终端发送的查询请求,所述查询请求用于请求查询变量值;
查询子模块,用于响应于所述查询请求,查询变量的当前值;
发送子模块,用于向所述用户终端发送所述变量的当前值。
10.根据权利要求6所述的装置,其特征在于,所述装置还包括:
终止模块,用于在对一用户终端的程序调试完成时,终止对应的调试线程的运行。
CN201610822696.5A 2016-09-13 2016-09-13 用于程序调试的方法和装置 Pending CN107818043A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610822696.5A CN107818043A (zh) 2016-09-13 2016-09-13 用于程序调试的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610822696.5A CN107818043A (zh) 2016-09-13 2016-09-13 用于程序调试的方法和装置

Publications (1)

Publication Number Publication Date
CN107818043A true CN107818043A (zh) 2018-03-20

Family

ID=61600591

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610822696.5A Pending CN107818043A (zh) 2016-09-13 2016-09-13 用于程序调试的方法和装置

Country Status (1)

Country Link
CN (1) CN107818043A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408310A (zh) * 2018-10-19 2019-03-01 网易(杭州)网络有限公司 服务器的调试方法、服务器及可读存储介质
CN109542773A (zh) * 2018-11-02 2019-03-29 五八同城信息技术有限公司 编译器插件调试方法、装置、计算机设备及可读存储介质
CN111142469A (zh) * 2019-12-27 2020-05-12 北京和利时智能技术有限公司 一种plc的组态程序的调试方法及调试系统
CN113568825A (zh) * 2021-05-25 2021-10-29 杭州慧康物联网科技有限公司 程序流程调试方法、装置、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1335962A (zh) * 1999-09-07 2002-02-13 皇家菲利浦电子有限公司 面向线程的调试
US20070168997A1 (en) * 2005-12-20 2007-07-19 Duong-Han Tran Debugging of remote application software on a local computer
CN102195970A (zh) * 2010-03-10 2011-09-21 微软公司 基于客户端会话的调试
CN103684899A (zh) * 2012-09-17 2014-03-26 腾讯科技(深圳)有限公司 远程调试方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1335962A (zh) * 1999-09-07 2002-02-13 皇家菲利浦电子有限公司 面向线程的调试
US20070168997A1 (en) * 2005-12-20 2007-07-19 Duong-Han Tran Debugging of remote application software on a local computer
CN102195970A (zh) * 2010-03-10 2011-09-21 微软公司 基于客户端会话的调试
CN103684899A (zh) * 2012-09-17 2014-03-26 腾讯科技(深圳)有限公司 远程调试方法和装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
殷绍剑: "《嵌入式多线程远程调试器研究与实现》", 《中国优秀硕士学位论文全文数据库信息科技辑》 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109408310A (zh) * 2018-10-19 2019-03-01 网易(杭州)网络有限公司 服务器的调试方法、服务器及可读存储介质
CN109408310B (zh) * 2018-10-19 2022-02-18 网易(杭州)网络有限公司 服务器的调试方法、服务器及可读存储介质
CN109542773A (zh) * 2018-11-02 2019-03-29 五八同城信息技术有限公司 编译器插件调试方法、装置、计算机设备及可读存储介质
CN111142469A (zh) * 2019-12-27 2020-05-12 北京和利时智能技术有限公司 一种plc的组态程序的调试方法及调试系统
CN111142469B (zh) * 2019-12-27 2021-07-27 北京和利时智能技术有限公司 一种plc的组态程序的调试方法及调试系统
CN113568825A (zh) * 2021-05-25 2021-10-29 杭州慧康物联网科技有限公司 程序流程调试方法、装置、设备及存储介质
CN113568825B (zh) * 2021-05-25 2024-03-15 杭州慧康物联网科技有限公司 程序流程调试方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
WO2021047193A1 (zh) 一种语音处理方法、装置、设备和计算机存储介质
CN104778121B (zh) 游戏程序的测试方法、装置及系统
CN107818043A (zh) 用于程序调试的方法和装置
CN108345531A (zh) 一种测试方法、装置及系统
KR102085383B1 (ko) 그룹 채팅 서비스를 이용하는 단말 및 이의 운용 방법
CN108322437B (zh) 用于多规约设备之间的自适应通讯方法和装置
CN111831538A (zh) 调试方法、装置以及存储介质
WO2021047197A1 (zh) 一种语音处理方法、装置、设备和计算机存储介质
CN108280627A (zh) 一种签到控制方法、装置及系统
CN105554750B (zh) 一种数据帧的传输方法及终端
CN111131741B (zh) 多方视频通话方法、电子设备、装置及计算机可读存储介质
CN104079398B (zh) 一种数据通信方法、装置及系统
CN112463266A (zh) 执行策略生成方法、装置、电子设备以及存储介质
EP4369203A1 (en) Cloud platform docking debugging method and apparatus, and electronic device and storage medium
CN110213795A (zh) 一种双sim卡同时通信的方法、移动终端及存储介质
CN112511636B (zh) 数据传输系统、方法、装置、计算机设备及存储介质
JP2006260451A (ja) 端末装置
US10645196B1 (en) Multicomponent software-controllable system and a method for interaction of server-client processes and a machine-readable carrier for performing the method
CN109412931B (zh) 利用即时通讯方式进行知识问答的方法、装置和终端设备
CN111783643A (zh) 人脸识别的方法、装置、电子设备及存储介质
CN104639384A (zh) 测试命令发送方法、装置及系统
CN113760235B (zh) 一种ble开发调试系统及方法
CN110532070B (zh) 用于方法调用的方法、存储介质、设备及系统
CN115622981B (zh) 一种WebRTC通信方法、装置、设备和存储介质
EP4362598A1 (en) Connection method and apparatus, display device, terminal device, and medium

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20180320

RJ01 Rejection of invention patent application after publication