CN111625463A - 一种程序状态检测方法和装置 - Google Patents

一种程序状态检测方法和装置 Download PDF

Info

Publication number
CN111625463A
CN111625463A CN202010469923.7A CN202010469923A CN111625463A CN 111625463 A CN111625463 A CN 111625463A CN 202010469923 A CN202010469923 A CN 202010469923A CN 111625463 A CN111625463 A CN 111625463A
Authority
CN
China
Prior art keywords
program
expression
specified
state data
target process
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
CN202010469923.7A
Other languages
English (en)
Other versions
CN111625463B (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 Dajia Internet Information Technology Co Ltd
Original Assignee
Beijing Dajia Internet Information Technology 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 Dajia Internet Information Technology Co Ltd filed Critical Beijing Dajia Internet Information Technology Co Ltd
Priority to CN202010469923.7A priority Critical patent/CN111625463B/zh
Publication of CN111625463A publication Critical patent/CN111625463A/zh
Application granted granted Critical
Publication of CN111625463B publication Critical patent/CN111625463B/zh
Active 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/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • 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
    • G06F11/366Software debugging using diagnostics

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

本公开提供了一种程序状态检测方法、装置、电子设备及存储介质。本公开方案中预先写入命令接收逻辑和表达式逻辑,并建立检测程序与线上程序的通信通道,在检测程序中集成命令接收机制和表达式机制,可通过指定的命令接收接口接收用户输入的表达式,利用表达式和通信通道调用线上程序完成对应的状态数据采集,本方案不需要对线上程序的代码作出实际改动,也避免了重启程序造成的排查困难。

Description

一种程序状态检测方法和装置
技术领域
本公开涉计算机技术领域,尤其涉及一种程序状态检测方法、装置、电子设备及存储介质。
背景技术
在业务系统正式上线投入运行后,可能会出现各种各样的异常情况,需要对线上程序进行排查,比如需要检查线上程序中某个静态或实例字段的值,执行一些静态或实例方法,以此对程序状态进行检测,确定异常的产生原因。
在现有方案中,线上程序的排查检测通常需要重新部署程序代码,通过增加特定代码的方式设定好需要输出的日志数据,将代码修改完毕后再重新启动业务系统的运行。然而业务系统在重启后会丢失临时状态数据,很可能导致问题难以复现,使排查工作出现困难。
发明内容
针对上述技术问题,本公开实施例提供一种程序状态检测方法,技术方案如下:
根据本公开实施例的第一方面,提供一种程序状态检测方法,所述方法包括:
状态检测程序通过指定接口接收用户输入的表达式,所述表达式用于表示针对目标进程指定状态数据的采集指令,其中,所述状态检测程序与待检测程序的目标进程之间预先建立了通信通道,所述待检测程序为运行中的线上程序;
基于所述采集指令,调用表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果。
可选的,所述通过指定接口接收用户输入的表达式,包括:调用命令行程序接收用户输入的表达式。
可选的,所述针对目标进程指定状态数据的采集指令包括:针对目标进程中指定方法的执行动作,以及执行所述指定方法时使用的设定参数,所述指定方法和设定参数用于采集目标进程的指定状态数据。
可选的,所述调用表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果,包括:
调用所述表达式引擎获取表达式中的需要执行的指定方法,以及执行所述指定方法时使用的设定参数,通过所述通信通道在设定参数下执行目标进程中的所述指定方法;
将执行所述指定方法后产生的执行结果确定为采集到的指定状态数据,通过所述命令行程序输出所述指定状态数据,并依据所述指定状态数据确定所述程序的状态检测结果。
可选的,所述状态检测程序为Java agent程序,所述状态检测程序与运行中的线上程序的目标进程的通信通道的建立方式,包括:
利用Java虚拟机提供的Attach功能,将所述Java agent程序与正在运行的业务程序建立通信通道。
可选的,所述用户输入的表达式为MVEL表达式,所述调用所述表达式引擎通过所述通信通道采集所述指定状态数据,包括:
调用MVEL引擎编译执行所述MVEL表达式,所述MVEL表达式通过所述通信通道调用所述目标进程,以采集所述指定状态数据。
根据本公开实施例的第二方面,提供一种程序状态检测装置,所述装置包括:
表达式接收模块,被配置为状态检测程序通过指定接口接收用户输入的表达式,所述表达式用于表示针对目标进程指定状态数据的采集指令,其中,所述状态检测程序与待检测程序的目标进程之间预先建立了通信通道,所述待检测程序为运行中的线上程序;
状态检测模块,被配置为基于所述采集指令,调用表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果。
可选的,所述表达式接收模块,在通过指定接口接收用户输入的表达式时,被配置为:调用命令行程序接收用户输入的表达式。
可选的,所述针对目标进程指定状态数据的采集指令包括:针对目标进程中指定方法的执行动作,以及执行所述指定方法时使用的设定参数,所述指定方法和设定参数用于采集目标进程的指定状态数据。
可选的,所述状态检测模块,在调用所述表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果时,被配置为:
调用所述表达式引擎获取表达式中的需要执行的指定方法,以及执行所述指定方法时使用的设定参数,通过所述通信通道在设定参数下执行目标进程中的所述指定方法;
将执行所述指定方法后产生的执行结果确定为采集到的指定状态数据,通过所述命令行程序输出所述指定状态数据,并依据所述指定状态数据确定所述程序的状态检测结果。
可选的,所述状态检测模块为Java agent程序,所述装置还包括:
通信通道建立模块,被配置为利用Java虚拟机提供的Attach功能,将所述Javaagent程序与正在运行的业务程序建立通信通道。
可选的,所述用户输入的表达式为MVEL表达式,所述状态检测模块,在调用所述表达式引擎通过所述通信通道采集所述指定状态数据时,包括:
调用MVEL引擎编译执行所述MVEL表达式,所述MVEL表达式通过所述通信通道调用所述目标进程,以采集所述指定状态数据。
根据本公开实施例的第三方面,提供一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如第一方面所述的方法。
根据本公开实施例的第四方面,提供一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如第一方面所述的方法。
本公开实施例提供了一种程序状态检测方法、装置、电子设备及存储介质。本方案预先编写检测程序,并建立检测程序与线上程序的通信通道,在检测程序中预先写入命令接收逻辑和表达式逻辑,可通过指定的命令接收接口接收用户输入的表达式,利用表达式和通信通道调用线上程序执行相应的方法,以完成对应的状态数据采集,本方案不需要对线上程序的代码作出实际改动,也避免了重启程序造成的排查困难。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开实施例。
此外,本公开实施例中的任一实施例并不需要达到上述的全部效果。
附图说明
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是本公开一示例性实施例示出的程序状态检测方法一种流程图;
图2是本公开一示例性实施例示出的程序状态检测方法的另一种流程图;
图3是本公开一示例性实施例示出的程序状态检测方法的另一种流程图;
图4是本公开一示例性实施例示出的程序状态检测装置的一种示意图;
图5是本公开一示例性实施例示出的电子设备的一种示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本公开提供了一种程序状态检测方法,以及应用所述程序状态检测方法的程序状态检测设备,首先对该程序状态检测方法进行说明。参见图1,包括以下步骤S101~步骤S102:
在步骤S101中,状态检测程序通过指定接口接收用户输入的表达式,所述表达式用于表示针对目标进程指定状态数据的采集指令,其中,所述状态检测程序与待检测程序的目标进程之间预先建立了通信通道,所述待检测程序为运行中的线上程序;
在本公开一实施例中,所述通过指定接口接收用户选定的目标进程中的目标方法,包括:启动命令行程序,通过所述命令行程序接收用户的输入的表达式。
具体而言,状态检测程序是预先配置的程序,其中被预先写入了表达式接收逻辑,该表达式接收逻辑可通过指定接口接收用户输入的表达式。其中一种实施方式为启动命令行程序,即,状态检测程序中写入了命令行程序的调用逻辑,通过调用命令行程序为用户提供表达式的输入接口。
在本公开一实施例中,所述表达式用于表示针对目标进程指定状态数据的采集指令,该针对目标进程指定状态数据的采集指令可以包括针对目标进程中指定方法的执行动作。
其中,在接收用户输入的表达式时,该表达式中的内容可以包括针对目标进程中指定方法的执行动作,并包括执行所述指定方法时使用的设定参数,所述指定方法和设定参数用于采集目标进程的指定状态数据。
在步骤S102中,基于所述采集指令,调用表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果。
在本公开一实施例中,所述用户输入的表达式为MVEL表达式,所述调用所述表达式引擎通过所述通信通道采集所述指定状态数据,包括:
调用MVEL引擎编译执行所述MVEL表达式,所述MVEL表达式通过所述通信通道调用所述目标进程,以采集所述指定状态数据。
在本公开一实施例中,在执行步骤S102时,可以采用但不限于以下方式:
(1-1)调用所述表达式引擎获取表达式中的需要执行的指定方法,以及执行所述指定方法时使用的设定参数,通过所述通信通道在设定参数下执行目标进程中的所述指定方法;
(1-2)将执行所述指定方法后产生的执行结果确定为采集到的指定状态数据,通过所述命令行程序输出所述指定状态数据,并依据所述指定状态数据确定所述程序的状态检测结果。
上述步骤(1-1)至(1-2)的具体实现过程,可详见图2所示实施例。
在业务系统正式上线投入运行后,可能会出现各种各样的异常情况,需要对线上程序进行排查,比如需要检查线上程序中某个静态或实例字段的值,执行一些静态或实例方法,以此对程序状态进行检测,确定异常的产生原因。
在现有方案中,线上程序的排查检测通常需要重新部署程序代码,通过增加特定代码的方式设定好需要输出的日志数据,将代码修改完毕后再重新启动业务系统的运行。然而业务系统在重启后会丢失临时状态数据,很可能导致问题难以复现,使排查工作出现困难。
为了解决上述问题,本公开实施例预先配置了状态检测程序,该状态检测程序预先写入命令行调用逻辑和表达式执行逻辑。在实际检测过程中,在状态检测程序与待检测程序的目标进程之间建立通信通道,使状态检测程序可以基于该通信通道调用待检测程序中所包含的方法,基于方法的执行结果确定该方法是否存在问题。具体而言,通过命令行调用逻辑启动命令行程序,使用户可以通过所述命令行程序输入表达式,通过表达式执行逻辑依据用户输入的表达式,应用表达式引擎执行表达式中的待执行逻辑,该待执行逻辑通常用于执行目标进程中的某个方法,将得到的执行结果确定为程序状态检测的所需数据。
在本公开一实施例中,所述状态检测程序为Java agent程序,所述状态检测程序与线上程序的目标进程之间建立通信通道的方式,包括:
利用Java虚拟机提供的Attach功能,将所述Java agent程序与正在运行的业务程序建立通信通道。
具体而言,启动该Java agent程序的过程为:通过VirtualMachine(虚拟机)类的attach(附加)方法启动所述Java agent程序。在SUM函数提供的tools.jar工具包里有一种类,名为VirtualMachine。通过VirtualMachine类的attach方法,可以启动所述Java agent程序,并可以将所述Java agent程序attach在指定的JVM(Java Virtual Machine,Java虚拟机)进程上。
本公开实施例中将所述JVM进程称为所述目标进程。在Java agent程序编写完成后,会生成一个jar文件。通过attach功能包的loadAgent方法,加载所述jar文件,即可将Java agent程序基于attach方法attach到目标进程。
将Java agent程序基于attach方法attach到目标进程后,视为两者之间建立了通信通道。所述Java agent程序可基于该通信通道与目标进程进行通信,并可以修改目标进程中的数据。
其中,预先编写Java agent程序,并使用attach方法将Java agent程序动态链接到线上运行中的Java程序,可以避免直接对线上运行中的Java程序代码进行单步调试导致的进程卡顿。
图2是根据一示例性实施例示出的另一种程序状态检测方法的流程图,该程序状态检测可以用于能够执行程序状态检测的平台上,并建立在图1所示方法的基础上,如图2所示,可以包括以下步骤S201-S202:
在步骤S201中,调用所述表达式引擎获取表达式中的需要执行的指定方法,以及执行所述指定方法时使用的设定参数,通过所述通信通道在设定参数下执行目标进程中的所述指定方法;
在步骤S202中,将执行所述指定方法后产生的执行结果确定为采集到的指定状态数据,通过所述命令行程序输出所述指定状态数据,并依据所述指定状态数据确定所述程序的状态检测结果。
在本公开的一实施例中,所述表达式为MVEL表达式。
在Java环境中,类是具有共同属性和行为的对象的集合。类中的变量被称为字段,类中的函数被称为方法。
方法本质上是具备特定功能的一段代码块,将具有特定功能的代码块设定为方法,后续可以通过调用方法实现对代码块的复用,不需要为不同场景下的相同功能需求重新撰写代码。即,方法的存在目的是为了提高程序代码的复用性和可读性。
在对程序的进程进行状态检视时,用户往往需要执行其中的某些方法,并查看该方法的执行结果是否符合预期。进而排查出待检测程序的问题是否出在这个方法上。
以下述方法进行举例说明:
Figure BDA0002513927180000081
Figure BDA0002513927180000091
可将该方法的执行结果确定为需要采集的指定状态数据。在正常情况下,该方法的执行结果应为输出“世界你好”,如果执行该方法时正常输出了“世界你好”,则说明该方法无问题,可继续排查程序中的其他问题,如果执行该方法时没有正常输出“世界你好”,则说明该方法存在问题。
在本公开一实施例中,在需要对程序进行排查的情况下,另一种常见需求是检查程序中某个字段的值,判断字段的值是否符合预期,来进行问题排查,在这种情况下,用户输入的采集指令可以为对指定字段的输出指令,以指示输出指定字段的值。
图3是根据一示例性实施例示出的一种更具体的程序状态检测方法的流程图,该程序状态检测方法可以用于能够执行程序状态检测方法的平台上,如图3所示,可以包括以下步骤S301-S304:
在步骤S301中,获取预先编写的Java agent程序,利用Java虚拟机提供的Attach功能,将所述Java agent程序与正在运行的业务程序建立通信通道;
在步骤S302中,运行所述所述Java agent程序,调用其中的命令行程序接收用户输入的MVEL表达式;
在很多情况下,为了信息安全考虑,线上程序所在的线上设备会限制其他设备对线上程序的直接干预权限。而开发人员通常在本地开发设备上而非线上设备上作业,会面临无法在本地开发设备上直接控制线上程序的情况。
在本公开实施例中,在本地开发设备上通过特定端口远程控制线上设备,远程控制线上设备上使用命令行实现对目标程序的输入和接收目标程序的输出,不需要在本地开发设备上直接控制线上程序,也可以达到检测程序状态的效果。
在步骤S303中,获取所述MVEL表达式中包括的针对目标进程中指定方法的执行动作,以及执行所述指定方法时使用的设定参数,所述指定方法和设定参数用于采集目标进程的指定状态数据;
在步骤S304中,调用MVEL引擎编译执行所述MVEL表达式,所述MVEL表达式通过所述通信通道调用所述目标进程,以采集所述指定状态数据。
基于所述采集指令,调用表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果。
MVEL为MVFLEX Expression Language(MVFLEX表达式语言)的缩写,是一种基于java语法的动态/静态的可嵌入的表达式语言,可为Java平台提供Runtime(运行时)语言。MVEL可以通过配置XML文件等方式定义其中的基本逻辑。
其中,一条MVRL表达式可以是一条只包括单个标识符的表达式,也可以是一条包括多种方法调用和内部集合创建的复杂表达式。
在本公开实施例中,MVRL表达式可以视为一种脚本,可以通过通信通道对线上程序执行该脚本,并基于MVRL表达式中的执行逻辑执行线上程序的某些方法流程,并基于执行结果获得状态采集结果。
在执行某个流程时,可以使用Mvel表达式作为条件表达式,基于Mvel表达式的输入值判断如何执行下一步的操作。
在一些情况下,所述MVEL表达式通过所述通信通道调用所述目标进程时,可能需要特定的类加载器来加载类,可以传入可选的类加载器的hash code,通过筛选找出目标类加载器。
具体而言,可通过所述Java agent程序确定Instrumentation类库,在所述Instrumentation类库中确定所述目标进程中已加载的类,根据已加载的类确定特定的类加载器。
由此可见,本公开实施例提出了一种程序状态检测方法,这种方法无需对现有系统做任何适应性改变,只需要将一个新的JAR(Java Archive,Java归档文件)包,即状态检测程序的JAR包放入线上程序的LIB(library,库文件)目录下就可以使用,实施较为方便。
本公开实施例提供了一种程序状态检测方法。预先编写检测程序,并建立检测程序与线上程序的通信通道,在检测程序中集成命令接收机制和表达式机制,可过指定接口接收用户输入的表达式,利用表达式和通信通道调用线上程序完成对应的状态数据采集,本方案不需要对线上程序的代码作出实际改动,也避免了重启程序造成的排查困难。
相应于上述方法实施例,本公开实施例还提供一种程序状态检测装置,,参见图4所示,所述装置可以包括:表达式接收模块410和状态检测模块420。
表达式接收模块410,被配置状态检测程序通过指定接口接收用户输入的表达式,所述表达式用于表示针对目标进程指定状态数据的采集指令,其中,所述状态检测程序与待检测程序的目标进程之间预先建立了通信通道,所述待检测程序为运行中的线上程序;
状态检测模块420,被配置为于所述采集指令,调用表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果。
可选的,所述表达式接收模块,在通过指定接口接收用户输入的表达式时,被配置为:调用命令行程序接收用户输入的表达式。
可选的,所述针对目标进程指定状态数据的采集指令包括:针对目标进程中指定方法的执行动作,以及执行所述指定方法时使用的设定参数,所述指定方法和设定参数用于采集目标进程的指定状态数据。
可选的,所述状态检测模块,在调用所述表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果时,被配置为:
调用所述表达式引擎获取表达式中的需要执行的指定方法,以及执行所述指定方法时使用的设定参数,通过所述通信通道在设定参数下执行目标进程中的所述指定方法;
调用命令行程序接收输出的执行结果,依据所述执行结果确定所述程序的状态检测结果。
可选的,所述状态检测模块为Java agent程序,所述装置还包括:
通信通道建立模块,被配置为利用Java虚拟机提供的Attach功能,将所述Javaagent程序与正在运行的业务程序建立通信通道。
可选的,所述用户输入的表达式为MVEL表达式,所述状态检测模块,在调用所述表达式引擎通过所述通信通道采集所述指定状态数据时,包括:
调用MVEL引擎编译执行所述MVEL表达式,所述MVEL表达式通过所述通信通道调用所述目标进程,以采集所述指定状态数据。
本公开实施例还提供一种电子设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述程序状态检测方法,包括:
状态检测程序通过指定接口接收用户输入的表达式,所述表达式用于表示针对目标进程指定状态数据的采集指令,其中,所述状态检测程序与待检测程序的目标进程之间预先建立了通信通道,所述待检测程序为运行中的线上程序;;
基于所述采集指令,调用表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果。
图5示出了根据本公开的一示例性实施例的基于主设备侧电子设备的示意结构图。请参考图5,在硬件层面,该电子设备包括处理器502、内部总线504、网络接口506、内存504以及非易失性存储器510,当然还可能包括其他业务所需要的硬件。处理器502从非易失性存储器510中读取对应的计算机程序到内存502中然后运行,在逻辑层面上形成执行程序状态检测方法的装置。当然,除了软件实现方式之外,本公开并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的程序状态检测方法,包括:
所述状态检测程序通过指定接口接收用户输入的表达式,所述表达式用于表示针对目标进程指定状态数据的采集指令,其中,所述状态检测程序与待检测程序的目标进程之间预先建立了通信通道,所述待检测程序为运行中的线上程序;
基于所述采集指令,调用表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁存储设备存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本公开方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
以上所述仅是本公开实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本公开实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本公开实施例的保护范围。

Claims (10)

1.一种程序状态检测方法,其特征在于,所述方法包括:
状态检测程序通过指定接口接收用户输入的表达式,所述表达式用于表示针对目标进程指定状态数据的采集指令,其中,所述状态检测程序与待检测程序的目标进程之间预先建立了通信通道,所述待检测程序为运行中的线上程序;
基于所述采集指令,调用表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果。
2.如权利要求1所述的方法,其特征在于,所述通过指定接口接收用户输入的表达式,包括:调用命令行程序接收用户输入的表达式。
3.如权利要求1所述的方法,其特征在于,所述针对目标进程指定状态数据的采集指令包括:针对目标进程中指定方法的执行动作,以及执行所述指定方法时使用的设定参数,所述指定方法和设定参数用于采集目标进程的指定状态数据。
4.如权利要求3所述的方法,其特征在于,所述调用表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果,包括:
调用所述表达式引擎获取表达式中的需要执行的指定方法,以及执行所述指定方法时使用的设定参数,通过所述通信通道在设定参数下执行目标进程中的所述指定方法;
将执行所述指定方法后产生的执行结果确定为采集到的指定状态数据,通过所述命令行程序输出所述指定状态数据,并依据所述指定状态数据确定所述程序的状态检测结果。
5.如权利要求1所述的方法,其特征在于,所述状态检测程序为Java agent程序,所述状态检测程序与运行中的线上程序的目标进程的通信通道的建立方式,包括:
利用Java虚拟机提供的Attach功能,将所述Java agent程序与正在运行的业务程序建立通信通道。
6.如权利要求1所述的方法,其特征在于,所述用户输入的表达式为MVEL表达式,所述调用所述表达式引擎通过所述通信通道采集所述指定状态数据,包括:
调用MVEL引擎编译执行所述MVEL表达式,所述MVEL表达式通过所述通信通道调用所述目标进程,以采集所述指定状态数据。
7.一种程序状态检测装置,其特征在于,其特征在于,所述装置包括:
表达式接收模块,被配置为状态检测程序通过指定接口接收用户输入的表达式,所述表达式用于表示针对目标进程指定状态数据的采集指令,其中,所述状态检测程序与待检测程序的目标进程之间预先建立了通信通道,所述待检测程序为运行中的线上程序;
状态检测模块,被配置为基于所述采集指令,调用表达式引擎通过所述通信通道采集所述目标进程的指定状态数据,并基于采集到的指定状态数据确定所述程序的状态检测结果。
8.如权利要求7所述的装置,其特征在于,所述表达式接收模块,在通过指定接口接收用户输入的表达式时,被配置为:调用命令行程序接收用户输入的表达式。
9.一种电子设备,其特征在于,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如权利要求1至6中任一项所述的方法。
10.一种存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1至6中任一项所述的方法。
CN202010469923.7A 2020-05-28 2020-05-28 一种程序状态检测方法和装置 Active CN111625463B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010469923.7A CN111625463B (zh) 2020-05-28 2020-05-28 一种程序状态检测方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010469923.7A CN111625463B (zh) 2020-05-28 2020-05-28 一种程序状态检测方法和装置

Publications (2)

Publication Number Publication Date
CN111625463A true CN111625463A (zh) 2020-09-04
CN111625463B CN111625463B (zh) 2024-02-13

Family

ID=72272908

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010469923.7A Active CN111625463B (zh) 2020-05-28 2020-05-28 一种程序状态检测方法和装置

Country Status (1)

Country Link
CN (1) CN111625463B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150347269A1 (en) * 2014-05-30 2015-12-03 Microsoft Corporation Emulation-based expression evaluation for diagnostic tools
CN108874624A (zh) * 2018-05-31 2018-11-23 康键信息技术(深圳)有限公司 服务器、监控Java进程的方法及存储介质
CN109840179A (zh) * 2018-12-15 2019-06-04 中国平安人寿保险股份有限公司 RocketMQ线程数监控方法、装置、电子设备及存储介质
CN110471852A (zh) * 2019-08-12 2019-11-19 中国工商银行股份有限公司 在线检测方法、系统和电子设备
CN111026601A (zh) * 2019-09-23 2020-04-17 拉扎斯网络科技(上海)有限公司 Java应用系统的监控方法、装置、电子设备及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150347269A1 (en) * 2014-05-30 2015-12-03 Microsoft Corporation Emulation-based expression evaluation for diagnostic tools
CN108874624A (zh) * 2018-05-31 2018-11-23 康键信息技术(深圳)有限公司 服务器、监控Java进程的方法及存储介质
CN109840179A (zh) * 2018-12-15 2019-06-04 中国平安人寿保险股份有限公司 RocketMQ线程数监控方法、装置、电子设备及存储介质
CN110471852A (zh) * 2019-08-12 2019-11-19 中国工商银行股份有限公司 在线检测方法、系统和电子设备
CN111026601A (zh) * 2019-09-23 2020-04-17 拉扎斯网络科技(上海)有限公司 Java应用系统的监控方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN111625463B (zh) 2024-02-13

Similar Documents

Publication Publication Date Title
US20190324772A1 (en) Method and device for processing smart contracts
US9354949B2 (en) Runtime emulating static thread local storage of portable executable software code
CN106294113B (zh) 一种基于可编程式测试服务的创建方法及装置
CN107179982B (zh) 一种跨进程调试方法和装置
CN110716845A (zh) 一种Android系统的日志信息读取的方法
CN112882690B (zh) 一种应用开发方法及装置
CN111625225A (zh) 一种程序指定数据输出方法和装置
CN110837446A (zh) 应用于嵌入式系统的设备管理方法及装置、介质以及嵌入式设备
CN107301097B (zh) 一种调用java对象、java对象的引用地址信息的存储方法及装置
CN115656788B (zh) 一种芯片测试系统、方法、设备及存储介质
CN111625463B (zh) 一种程序状态检测方法和装置
CN114691496A (zh) 单元测试方法、装置、计算设备及介质
CN110275710B (zh) 一种Java本地接口一致性检查方法及系统、存储介质及终端
JP2015099517A (ja) 車両制御装置
CN111625378A (zh) 一种源代码远程查看方法和装置
CN111124931B (zh) 一种Java代码合规性检查方法和装置
CN113867701A (zh) 一种容器对象实例化方法、装置、存储介质及电子设备
CN116628694B (zh) 反序列化0day安全风险防御方法、装置与设备
JP2016029547A (ja) 実行モジュール生成装置、及び電子制御装置
CN110427224B (zh) 一种ejb模块加载方法、装置、服务器及可读存储介质
CN116010112B (zh) 钩子函数的调用方法、装置、计算机设备及可读存储介质
CN112860224B (zh) 一种函数执行环境构建方法、装置、电子设备及存储介质
CN110766886B (zh) 驱动装置及其驱动读卡器实现卡片业务的方法、自助缴费系统
CN116820959A (zh) 一种在线调试方法及装置
KR101052586B1 (ko) 훅 재진입 방지 장치 및 그 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 기록매체

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
GR01 Patent grant
GR01 Patent grant