CN113760290A - 一种程序控制方法、装置、计算机设备及存储介质 - Google Patents
一种程序控制方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN113760290A CN113760290A CN202010501224.6A CN202010501224A CN113760290A CN 113760290 A CN113760290 A CN 113760290A CN 202010501224 A CN202010501224 A CN 202010501224A CN 113760290 A CN113760290 A CN 113760290A
- Authority
- CN
- China
- Prior art keywords
- program
- debugging information
- processed
- analysis result
- information analysis
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
Abstract
本申请公开了一种程序控制方法、装置、计算机设备及存储介质,属于计算机技术领域。该方法包括:获取待处理程序在编译时期生成的调试信息;所述调试信息通过预置在所述待处理程序中的插桩函数获取;解析所述调试信息,得到调试信息解析结果;根据所述调试信息解析结果对所述待处理程序进行控制。本申请实施例的技术方案能够对程序进行动态控制,从而提高程序的控制效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种程序控制方法、装置、计算机设备及存储介质。
背景技术
嵌入式技术执行专用功能并被内部计算机控制的设备或者系统。随着嵌入式技术的发展,嵌入式系统在生产、生活、工业、农业等方面发挥不可替代的作用。尤其对于工业、航空、通信等领域来说,嵌入式设备起着决定性的作用,其应用时需要不间断运行。
绝大多数嵌入式系统是用户针对特定任务而定制的,而嵌入式系统中的软件系统通常需要利用专用的编程语言,如C语言或汇编语言等实现。嵌入式系统在应用过程中,不可避免的存在故障、需求变更或硬件损坏等情况。因此,在嵌入式系统中程序运行过程中,往往需要对程序的运行过程进行监控,或者,在有需求时改变程序的行为。
目前,如果需要改变程序的行为,最常用的方式是修改程序代码,程序代码修改完成后需要重新编译程序,并发布、替换软件版本,而且还需要重启设备或重启程序,对于大型项目来说需要消耗大量的时间成本,效率较低。
发明内容
本申请实施例提供了一种程序控制方法、装置、计算机设备及存储介质,以对程序进行动态控制,从而提高程序的控制效率。
第一方面,本申请实施例提供了一种程序控制方法,包括:
获取待处理程序在编译时期生成的调试信息;所述调试信息通过预置在所述待处理程序中的插桩函数获取;
解析所述调试信息,得到调试信息解析结果;
根据所述调试信息解析结果对所述待处理程序进行控制。
第二方面,本申请实施例还提供了一种程序控制装置,包括:
调试信息获取模块,用于获取待处理程序在编译时期生成的调试信息;所述调试信息通过预置在所述待处理程序中的插桩函数获取;
调试信息解析模块,用于解析所述调试信息,得到调试信息解析结果;
程序控制模块,用于根据所述调试信息解析结果对所述待处理程序进行控制。
第三方面,本申请实施例还提供了一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现第一方面中任意所述的程序控制方法。
第四方面,本申请实施例还提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任意所述的程序控制方法。
本申请实施例通过预置在待处理程序中的插桩函数获取待处理程序在编译时期生成的调试信息,以对获取的调试信息进行解析得到调试信息解析结果,进而根据调试信息解析结果对待处理程序进行控制,解决需要通过重新编译、发布及替换等编辑操作对程序进行控制时存在的效率低的问题,实现在不重新编译软件版本、不重新替换软件、不重启设备或者重启程序的前提下,动态地控制程序,从而提高程序的控制效率。
附图说明
图1为本申请实施例提供的一种程序控制方法的流程示意图;
图2为本申请实施例提供的一种程序控制方法的流程示意图;
图3是本申请实施例提供的一种程序控制的示意图;
图4为本申请实施例提供的一种程序控制装置的示意图;
图5为本申请提供的一种计算机设备的结构示意图;
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本申请的说明,其本身没有特有的意义。因此,“模块”、“部件”或“单元”可以混合地使用。
为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
在一个示例性实施方式中,图1为本申请实施例提供的一种程序控制方法的流程示意图。该方法适用于动态地控制程序的情况。该方法可以由本申请提供的程序控制装置执行,该程序控制装置可以由软件和/或硬件实现,并集成在计算机设备中。
如图1所示,本申请实施例提供的程序控制方法,包括:
S110、获取待处理程序在编译时期生成的调试信息;所述调试信息通过预置在所述待处理程序中的插桩函数获取。
其中,待处理程序可以是需要被动态控制的程序,示例性的,C语言程序或C++语音程序等,本申请实施例并不对待处理程序所应用的具体编程语言的类型进行限定。调试信息可以是待处理程序在编译时所生成的相关信息,具有一定的数据格式,其数据格式的类型取决于采用的编程语言的类型。例如,如果待处理程序的编程语言采用C语言,则调试信息诸如可以是函数调用时的指针信息或入参信息等,本申请实施例并不对调试信息的具体类型进行限定。
在本申请实施例中,可以由与待处理程序相连的计算机设备对待处理程序进行动态控制。在待处理程序运行之前,可以预先在待处理程序中预置插桩函数。插桩函数的数量可以是一个或多个,具体可以根据实际需求设定,本申请实施例并不对插桩函数的数量进行限定。相应的,在待处理程序编译运行时,可以由内置在待处理程序中的插桩函数获取待处理程序所生成的调试信息,并将获取的调试信息发送至与待处理程序相连的计算机设备。
S120、解析所述调试信息,得到调试信息解析结果。
其中,调试信息解析结果可以是对调试信息进行解析所得到的解析结果。
相应的,在计算机设备获取到待处理程序生成的调试信息后,即可对调试信息进行解析,得到匹配的调试信息解析结果。调试信息解析结果可以反应待处理程序在编译运行时所具体涉及的参数信息。例如,如果待处理程序的编程语言采用C语言,则调试信息解析结果诸如可以是函数调用的栈信息或入参数值等。也即,调试信息具体可以是待处理程序的行为数据,而调试信息解析结果则可以是对行为数据的语义分析。
需要说明的是,由于调试信息具有一定的数据格式,待处理程序所采用的编程语言的类型不同时,调试信息对应的数据格式可能不同。因此,需要根据调试信息具体的数据格式对调试信息进行解析,以避免解析失败。
示例性的,假设调试信息的数据格式为:字节1:Ab,字节2:Ac,字节3:D,则对该调试信息的调试信息解析结果可以是:字节1的数据加字节3的数据得到参数E,也即,E=AbD。
S130、根据所述调试信息解析结果对所述待处理程序进行控制。
相应的,在计算机设备获取到调试信息对应的调试信息解析结果后,即可根据调试信息解析结果对待处理程序进行控制。所谓控制诸如可以是监控待处理程序内部的运行状态、改变待处理程序输出的信息或改变待处理程序的运行行为等,本申请实施例并不对待处理程序的控制行为类型进行限定。需要说明的是,根据调试信息解析结果对待处理程序进行控制,可以是动态控制运行状态中的待处理程序。
在上述方案中,通过预置在待处理程序中的插桩函数获取待处理程序在编译时期生成的调试信息,并根据调试信息的调试信息解析结果对运行状态中的待处理程序进行动态地控制。也即,本申请实施例所提供的程序控制方法无需中断待处理程序的运行状态,因此也无需重新编译待处理程序的软件版本并重新替换新的待处理程序,更无需重启设备或待处理程序,在待处理程序运行过程中即可对其进行动态的控制,以解决待处理程序的故障问题,或更改待处理程序的行为需求等。由此可见,在程序运行过程中对程序进行动态控制,可以大幅缩减程序修改、重新编译、替换旧版本以及重新操作所消耗的时间,从而提高程序的控制效率。
本申请实施例通过预置在待处理程序中的插桩函数获取待处理程序在编译时期生成的调试信息,以对获取的调试信息进行解析得到调试信息解析结果,进而根据调试信息解析结果对待处理程序进行控制,解决需要通过重新编译、发布及替换等编辑操作对程序进行控制时存在的效率低的问题,实现在不重新编译软件版本、不重新替换软件、不重启设备或者重启程序的前提下,动态地控制程序,从而提高程序的控制效率。
在一个示例性实施方式中,图2为本申请实施例提供的一种程序控制方法的流程示意图。本实施例以上述实施例为基础进行具体化,在本实施例中,给出了根据所述调试信息解析结果对所述待处理程序进行控制的多种可选的具体实现方式。相应的,如图2所示,本实施例的方法可以包括:
S210、在与所述待处理程序建立连接的情况下,通过所述插桩函数捕获所述待处理程序中的函数调用行为,以获取所述待处理程序在编译时期生成的调试信息。
需要说明的是,对待处理程序进行动态控制的计算机设备需要与待处理程序建立连接,才可以对待处理程序进行控制。相应的,如果计算机设备没有与待处理程序建立连接,此时插桩函数可以不做任何动作,也即不进行函数调用行为的捕获操作。在计算机设备与待处理程序建立连接后,插桩函数才开始执行捕获操作,并对待处理程序中的函数调用行为进行捕获,以获取待处理程序在编译时期生成的调试信息。
在本申请的一个可选实施例中,所述调试信息可以包括所述插桩函数捕获函数调用行为时获取的当前指针变量、堆栈指针、入参类型、入参堆栈位置以及入参结构体中的至少一项。
可选的,调试信息可以包括但不限于插桩函数捕获函数调用行为时获取的当前指针变量堆栈指针、入参类型、入参堆栈位置以及入参结构体。其中,当前指针变量可以用于确定插桩函数捕获的函数类型,并可以用于进一步确定待处理程序的调用函数的调用链。堆栈指针可以用于确定待处理程序的堆栈信息。入参类型、入参堆栈位置以及入参结构体可以用于确定入参信息,如入参类型或入参数值等。
S220、解析所述调试信息,得到调试信息解析结果。
在本申请的一个可选实施例中,所述调试信息解析结果可以包括所述待处理程序中函数调用行为所调用的调用栈关联信息、入参类型以及入参数值中的至少一项;其中,所述调用栈关联信息可以包括调用链和/或堆栈信息。
可选的,调试信息解析结果可以包括但不限于待处理程序中函数调用行为所调用的调用栈关联信息、入参类型以及入参数值。其中,调用栈关联信息可以包括调用链和/或堆栈信息,可以通过对当前指针变量及堆栈指针进行解析获取,入参类型可以根据调试信息中的入参类型进行解析获取,入参数值则可以根据入参堆栈位置以及入参结构体进行解析获取。
S230、根据所述调试信息解析结果执行与所述插桩函数存在映射关系的动态指令,以对所述待处理程序进行控制。
其中,所述动态指令包括动态命令和/或动态脚本。
其中,动态指令可以用于对待处理程序进行动态控制,如修改调用函数的行为。动态指令可以包括但不限于动态命令和/或动态脚本。动态命令可以是程序中常用的命令,如延时、打印参数、参数保存、返回等命令。动态脚本可以是指用高级语言编写的解释性质的脚本,动态脚本可以动态的修改,不需要编译、打包及发布等操作。
可选的,计算机设备可以根据获取的调试信息解析结果执行与插桩函数存在映射关系的动态命令和/或动态脚本等动态指令,对待处理程序进行动态控制。需要说明的是,插桩函数可以对应设置一个或多个动态命令和/或动态脚本,也即,插桩函数可以与一个或多个动态命令和/或动态脚本建立映射关系,本申请实施例并不对插桩函数所对应设置的动态命令和/或动态脚本的数量进行限定。
图3是本申请实施例提供的一种程序控制的示意图。在一个可选的示例中,如图3所示,以嵌入式C语言程序作为待处理程序,并利用行为捕获套件对运行时C程序进行动态控制。其中,行为捕获套件可以运行在与待处理程序相连的计算机设备中。可选的,可以在C程序代码中预置多个插桩函数(图3中预置了3个插桩函数)。当运行时C程序未与行为捕获套件建立连接时,插桩函数不做任何动作。当行为捕获套件通过网线或串口等形式连接到运行时C程序后,插桩函数可以开始捕获C程序中的函数调用行为,以获取运行时c程序在编译时期生成的当前IP指针、堆栈指针、入参类型、入参堆栈位置以及入参结构体等调试信息,并将获取的调试信息发送至行为捕获套件。
行为捕获套件内部包括远端动态解析程序,可以接收插桩函数发送的调试信息。远端动态解析程序可以解析调试信息,对运行时C程序的栈结构进行分析,从而获取当前调用函数调用的调用链、堆栈信息、调用函数的入参类型及入参数值等调试信息解析结果,也即获取对栈结果的分析结果。相应的,远端动态解析程序可以根据栈结果的分析结果,执行插桩函数对应设置的动态命令和/或动态脚本,以对运行时C程序执行监控程序内部的运行状态、改变程序的输出打印信息或改变程序的运行行为等动态控制操作。
如图3所示,行为捕获套件内部还可以包括行为记录数据库和行为展示模块。其中,行为记录数据库可以用于记录函数调用行为的时间、参数信息、调用链或堆栈信息等,行为记录数据库还可以提供数据的查询、分析或过滤等机制,对存储的数据进行数据处理。行为展示模块可以提供可视化展示功能,以展示程序控制过程中所采集到的行为信息,也即行为记录数据库存储的数据。
相应的,S230可以包括:
S231a、遍历所述调试信息解析结果,查找待控制入参参数。
S232a、根据预先配置的动态脚本将所述待控制入参参数的当前参数值修改为目标参数值。
其中,待控制入参参数可以是待处理程序中需要被动态控制的入参参数。当前参数值可以是待控制入参参数当前所使用的参数值,目标参数值可以是针对待处理程序控制需求所设定的参数值。
可选的,在计算机设备对待处理程序进行动态控制时,如果需要对程序故障或硬件故障(如硬件损坏等)等情况进行处理,可以遍历调试信息解析结果,查找待控制入参参数,并利用捕获该调试信息的插桩函数预先配置的动态脚本,将待控制入参参数的当前参数值修改为目标参数值。
在一个可选的示例中,结合图3举例说明。假设将C程序作为待处理程序,则在C程序运行之前,预置一个或多个插桩函数。如果C程序中目标函数的目标入参取值为100时会引发程序故障,需要在检测到目标入参取值100时,将目标入参的参数值修改为200。为此,可以在行为捕获套件中配置动态脚本,该动态脚本的功能是:检测到目标函数的目标入参的参数值为100时,将目标入参的参数值修改为200。相应的,如果运行时C程序的目标函数调用时被插桩函数捕获,则行为捕获套件可以遍历调试信息解析结果,查找目标入参,并将目标入参的当前参数值100修改为200,从而有效规避程序故障问题。
S231b、遍历所述调试信息解析结果,查找待控制入参参数。
S232b、根据预先配置的动态命令对所述待控制入参参数执行数据输出操作。
其中,所述数据输出操作包括打印所述待控制入参参数的当前参数值,和/或,存储所述待控制入参参数的当前参数值。
可选的,在计算机设备对待处理程序进行动态控制时,如果需要对程序中的函数入参进行分析,则可以遍历调试信息解析结果,查找待控制入参参数,并利用捕获该调试信息的插桩函数预先配置的动态命令,对待控制入参参数执行打印参数值或存储参数值等数据输出操作。
在一个可选的示例中,结合图3举例说明。假设将C程序作为待处理程序,则在C程序运行之前,预置一个或多个插桩函数。如果有对C程序中目标函数的目标入参进行打印和分析的需求,则可以在行为捕获套件中配置动态命令,该动态命令的功能是:打印及存储目标函数的目标入参的当前参数值。相应的,如果运行时C程序的目标函数调用时被插桩函数捕获,则行为捕获套件可以遍历调试信息解析结果,查找目标入参,并获取目标入参的当前参数值,可以将当前参数值存储至行为记录数据库中,以通过行为记录数据库对目标入参的当前参数值进行分析和展示。
S231c、将所述调试信息解析结果以及所述调试信息解析结果的关联行为信息存储至行为记录数据库。
其中,所述关联行为信息包括函数调用的时间。
其中,关联行为信息可以调试信息中调用函数的相关信息,如函数调用的时间等。
可选的,在计算机设备对待处理程序进行动态控制时,如果需要对程序的运行过程进行监控,则可以将调试信息解析结果以及调试信息解析结果的关联行为信息存储至行为记录数据库,以根据行为数据库获取的数据进行可视化展示或分析。
采用上述技术方案,通过预置在待处理程序中的插桩函数获取待处理程序在编译时期生成的调试信息,以对获取的调试信息进行解析得到调试信息解析结果,进而根据调试信息解析结果对待处理程序进行控制,如监控待处理程序内部的运行状态、改变待处理程序的输出打印信息,改变待处理程序的运行行为等。在待处理程序存在故障或需求变更的时候,可以动态改变函数的行为。在硬件损坏的时候,也可以对故障进行降级处理等。能够避免修改代码、重新编译程序、发布及替换软件版本,从而提高程序的控制效率。
在一个示例性实施方式中,图4为本申请实施例提供的一种程序控制装置的示意图,该装置可以由软件和/或硬件实现,并集成在计算机设备中。
如图4所示程序控制装置包括:调试信息获取模块310、调试信息解析模块320以及程序控制模块330,其中:
调试信息获取模块310,用于获取待处理程序在编译时期生成的调试信息;所述调试信息通过预置在所述待处理程序中的插桩函数获取;
调试信息解析模块320,用于解析所述调试信息,得到调试信息解析结果;
程序控制模块330,用于根据所述调试信息解析结果对所述待处理程序进行控制。
本申请实施例通过预置在待处理程序中的插桩函数获取待处理程序在编译时期生成的调试信息,以对获取的调试信息进行解析得到调试信息解析结果,进而根据调试信息解析结果对待处理程序进行控制,解决需要通过重新编译、发布及替换等编辑操作对程序进行控制时存在的效率低的问题,实现在不重新编译软件版本、不重新替换软件、不重启设备或者重启程序的前提下,动态地控制程序,从而提高程序的控制效率。
可选的,调试信息获取模块310具体用于:在与所述待处理程序建立连接的情况下,通过所述插桩函数捕获所述待处理程序中的函数调用行为,以获取所述待处理程序在编译时期生成的调试信息。
可选的,程序控制模块330具体用于:根据所述调试信息解析结果执行与所述插桩函数存在映射关系的动态指令,以对所述待处理程序进行控制;其中,所述动态指令包括动态命令和/或动态脚本。
可选的,程序控制模块330具体用于:遍历所述调试信息解析结果,查找待控制入参参数;根据预先配置的动态脚本将所述待控制入参参数的当前参数值修改为目标参数值。
可选的,程序控制模块330具体用于:遍历所述调试信息解析结果,查找待控制入参参数;根据预先配置的动态命令对所述待控制入参参数执行数据输出操作;其中,所述数据输出操作包括打印所述待控制入参参数的当前参数值,和/或,存储所述待控制入参参数的当前参数值。
可选的,程序控制模块330具体用于:将所述调试信息解析结果以及所述调试信息解析结果的关联行为信息存储至行为记录数据库;其中,所述关联行为信息包括函数调用的时间。
可选的,所述调试信息包括所述插桩函数捕获函数调用行为时获取的当前指针变量、堆栈指针、入参类型、入参堆栈位置以及入参结构体中的至少一项。
可选的,所述调试信息解析结果包括所述待处理程序中函数调用行为所调用的调用栈关联信息、入参类型以及入参数值中的至少一项;其中,所述调用栈关联信息包括调用链和/或堆栈信息。
上述程序控制装置可执行本申请实施例所提供的程序控制方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的程序控制方法。
在一个示例性实施方式中,本申请实施例还提供了一种计算机设备,图5为本申请提供的一种计算机设备的结构示意图,如图5所示,本申请提供的计算机设备,包括:一个或多个处理器410和存储装置420;该计算机设备的处理器410可以是一个或多个,图5中以一个处理器410为例;存储装置420用于存储一个或多个程序;所述一个或多个程序被所述一个或多个处理器410执行,使得所述一个或多个处理器410实现如本申请实施例中所述的程序控制方法。
计算机设备中的处理器410、存储装置420可以通过总线或其他方式连接,图5中以通过总线连接为例。
存储装置420作为一种计算机可读存储介质,可设置为存储软件程序、计算机可执行程序以及模块,如本申请实施例所述的程序控制方法对应的程序指令/模块(例如,程序控制装置中的调试信息获取模块310、调试信息解析模块320以及程序控制模块330)。存储装置420可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等。此外,存储装置420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至通信节点。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本申请实施例还提供一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本申请实施例中的程序控制方法:获取待处理程序在编译时期生成的调试信息;所述调试信息通过预置在所述待处理程序中的插桩函数获取;解析所述调试信息,得到调试信息解析结果;根据所述调试信息解析结果对所述待处理程序进行控制。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本申请可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台通信设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
值得注意的是,上述程序控制装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。
以上所述,仅为本申请的示例性实施例而已,并非用于限定本申请的保护范围。
一般来说,本申请的多种实施例可以在硬件或专用电路、软件、逻辑或其任何组合中实现。例如,一些方面可以被实现在硬件中,而其它方面可以被实现在可以被控制器、微处理器或其它计算装置执行的固件或软件中,尽管本申请不限于此。
本申请的实施例可以通过移动装置的数据处理器执行计算机程序指令来实现,例如在处理器实体中,或者通过硬件,或者通过软件和硬件的组合。计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码。
本申请附图中的任何逻辑流程的框图可以表示程序步骤,或者可以表示相互连接的逻辑电路、模块和功能,或者可以表示程序步骤与逻辑电路、模块和功能的组合。计算机程序可以存储在存储器上。存储器可以具有任何适合于本地技术环境的类型并且可以使用任何适合的数据存储技术实现,例如但不限于只读存储器(ROM)、随机访问存储器(RAM)、光存储器装置和系统(数码多功能光碟DVD或CD光盘)等。计算机可读介质可以包括非瞬时性存储介质。数据处理器可以是任何适合于本地技术环境的类型,例如但不限于通用计算机、专用计算机、微处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、可编程逻辑器件(FGPA)以及基于多核处理器架构的处理器。
通过示范性和非限制性的示例,上文已提供了对本申请的示范实施例的详细描述。但结合附图和权利要求来考虑,对以上实施例的多种修改和调整对本领域技术人员来说是显而易见的,但不偏离本申请的范围。因此,本申请的恰当范围将根据权利要求确定。
Claims (11)
1.一种程序控制方法,其特征在于,包括:
获取待处理程序在编译时期生成的调试信息;所述调试信息通过预置在所述待处理程序中的插桩函数获取;
解析所述调试信息,得到调试信息解析结果;
根据所述调试信息解析结果对所述待处理程序进行控制。
2.根据权利要求1所述的方法,其特征在于,所述获取待处理程序在编译时期生成的调试信息,包括:
在与所述待处理程序建立连接的情况下,通过所述插桩函数捕获所述待处理程序中的函数调用行为,以获取所述待处理程序在编译时期生成的调试信息。
3.根据权利要求1所述的方法,其特征在于,所述根据所述调试信息解析结果对所述待处理程序进行控制,包括:
根据所述调试信息解析结果执行与所述插桩函数存在映射关系的动态指令,以对所述待处理程序进行控制;
其中,所述动态指令包括动态命令和/或动态脚本。
4.根据权利要求3所述的方法,其特征在于,所述根据所述调试信息解析结果执行与所述插桩函数存在映射关系的动态指令,包括:
遍历所述调试信息解析结果,查找待控制入参参数;
根据预先配置的动态脚本将所述待控制入参参数的当前参数值修改为目标参数值。
5.根据权利要求3所述的方法,其特征在于,所述根据所述调试信息解析结果执行与所述插桩函数存在映射关系的动态指令,包括:
遍历所述调试信息解析结果,查找待控制入参参数;
根据预先配置的动态命令对所述待控制入参参数执行数据输出操作;
其中,所述数据输出操作包括打印所述待控制入参参数的当前参数值,和/或,存储所述待控制入参参数的当前参数值。
6.根据权利要求3所述的方法,其特征在于,所述根据所述调试信息解析结果执行与所述插桩函数存在映射关系的动态指令,包括:
将所述调试信息解析结果以及所述调试信息解析结果的关联行为信息存储至行为记录数据库;
其中,所述关联行为信息包括函数调用的时间。
7.根据权利要求1-6任一所述的方法,其特征在于,所述调试信息包括所述插桩函数捕获函数调用行为时获取的当前指针变量、堆栈指针、入参类型、入参堆栈位置以及入参结构体中的至少一项。
8.根据权利要求1-6任一所述的方法,其特征在于,所述调试信息解析结果包括所述待处理程序中函数调用行为所调用的调用栈关联信息、入参类型以及入参数值中的至少一项;
其中,所述调用栈关联信息包括调用链和/或堆栈信息。
9.一种程序控制装置,其特征在于,包括:
调试信息获取模块,用于获取待处理程序在编译时期生成的调试信息;所述调试信息通过预置在所述待处理程序中的插桩函数获取;
调试信息解析模块,用于解析所述调试信息,得到调试信息解析结果;
程序控制模块,用于根据所述调试信息解析结果对所述待处理程序进行控制。
10.一种计算机设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的程序控制方法。
11.一种存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-8中任一所述的程序控制方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010501224.6A CN113760290A (zh) | 2020-06-04 | 2020-06-04 | 一种程序控制方法、装置、计算机设备及存储介质 |
PCT/CN2021/079097 WO2021244088A1 (zh) | 2020-06-04 | 2021-03-04 | 程序控制方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010501224.6A CN113760290A (zh) | 2020-06-04 | 2020-06-04 | 一种程序控制方法、装置、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113760290A true CN113760290A (zh) | 2021-12-07 |
Family
ID=78783811
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010501224.6A Pending CN113760290A (zh) | 2020-06-04 | 2020-06-04 | 一种程序控制方法、装置、计算机设备及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113760290A (zh) |
WO (1) | WO2021244088A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116225925B (zh) * | 2023-02-21 | 2023-11-21 | 东南大学 | 一种计算机软件在线实时可视化调试方法 |
CN116483736B (zh) * | 2023-06-21 | 2024-03-12 | 荣耀终端有限公司 | 插桩位置确定方法及电子设备 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7484205B2 (en) * | 2002-12-12 | 2009-01-27 | Microsoft Corporation | Preprocessor-based source code instrumentation |
US8266608B2 (en) * | 2005-02-18 | 2012-09-11 | Green Hills Software, Inc. | Post-compile instrumentation of object code for generating execution trace data |
CN102053906A (zh) * | 2009-10-30 | 2011-05-11 | 国际商业机器公司 | 用于收集程序运行时信息的系统和方法 |
CN104252402B (zh) * | 2014-09-05 | 2018-04-27 | 深圳创维数字技术有限公司 | 一种程序调试方法及装置 |
GB2552519A (en) * | 2016-07-27 | 2018-01-31 | Undo Ltd | Debugging Systems |
CN107066390B (zh) * | 2017-04-24 | 2020-01-17 | 许继集团有限公司 | 一种动态内存泄漏检测方法及系统 |
-
2020
- 2020-06-04 CN CN202010501224.6A patent/CN113760290A/zh active Pending
-
2021
- 2021-03-04 WO PCT/CN2021/079097 patent/WO2021244088A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2021244088A1 (zh) | 2021-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7058927B2 (en) | Computer software run-time analysis systems and methods | |
US10380350B1 (en) | Efficient and comprehensive source code fuzzing | |
US7900198B2 (en) | Method and system for parameter profile compiling | |
US7383540B2 (en) | Altering execution flow of a computer program | |
US20110191752A1 (en) | Method and System for Debugging of Software on Target Devices | |
US8910126B2 (en) | Compiling source code for debugging with variable value restoration based on debugging user activity | |
CN111382048B (zh) | 真机测试平台上移动设备的管理方法和装置 | |
Liu et al. | FCatch: Automatically detecting time-of-fault bugs in cloud systems | |
US20110126179A1 (en) | Method and System for Dynamic Patching Software Using Source Code | |
US9836386B2 (en) | Automatic switch to debugging mode | |
CN113760290A (zh) | 一种程序控制方法、装置、计算机设备及存储介质 | |
US11422920B2 (en) | Debugging multiple instances of code using thread patterns | |
TWI684916B (zh) | 函式選取方法和伺服器 | |
CN107168773A (zh) | 一种jvm崩溃后问题定位及应用恢复的处理方法及装置 | |
CN109542444B (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
CN111813672B (zh) | 一种针对多种处理器架构的非侵入式覆盖率统计方法 | |
US20210096892A1 (en) | Snapshot for compiler optimization | |
CN110209565B (zh) | 一种元数据模型调试方法及其装置 | |
CN105446886A (zh) | 一种计算机程序调试方法和装置 | |
CN112765032A (zh) | 程序调试方法、装置、设备及存储介质 | |
CN115168175A (zh) | 程序错误解决方法、装置、电子设备和存储介质 | |
US9032372B2 (en) | Runtime environment and method for non-invasive monitoring of software applications | |
CN115904928A (zh) | 一种慢函数监控的插桩方法、装置、设备及存储介质 | |
Lawall et al. | Tarantula: Killing driver bugs before they hatch | |
JPH11110256A (ja) | プログラムデバッグ装置、プログラムデバッグ方法及びその方法を記録したコンピュータ読取り可能な記録媒体 |
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 |