CN112765032A - 程序调试方法、装置、设备及存储介质 - Google Patents
程序调试方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112765032A CN112765032A CN202110096362.5A CN202110096362A CN112765032A CN 112765032 A CN112765032 A CN 112765032A CN 202110096362 A CN202110096362 A CN 202110096362A CN 112765032 A CN112765032 A CN 112765032A
- Authority
- CN
- China
- Prior art keywords
- code
- debugging
- logic
- program
- combined
- 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
- 238000000034 method Methods 0.000 title claims abstract description 99
- 238000003860 storage Methods 0.000 title claims abstract description 61
- 230000006870 function Effects 0.000 claims description 35
- 238000004519 manufacturing process Methods 0.000 claims description 26
- 230000015654 memory Effects 0.000 claims description 25
- 238000011161 development Methods 0.000 claims description 8
- 239000003795 chemical substances by application Substances 0.000 description 51
- 238000013515 script Methods 0.000 description 32
- 238000002347 injection Methods 0.000 description 19
- 239000007924 injection Substances 0.000 description 19
- 238000010586 diagram Methods 0.000 description 17
- 230000008569 process Effects 0.000 description 16
- 238000012545 processing Methods 0.000 description 10
- 238000004458 analytical method Methods 0.000 description 7
- 239000008186 active pharmaceutical agent Substances 0.000 description 6
- 238000004891 communication Methods 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000005856 abnormality Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 239000002775 capsule Substances 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000009776 industrial production Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- 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/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- 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/51—Source to source
-
- 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/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种程序调试方法、装置及存储介质,该方法包括:接收调试请求,所述调试请求包含调试逻辑代码;获取待调试的目标代码;将所述调试逻辑代码与所述目标代码合并,得到带有调试逻辑的组合代码;将所述带有调试逻辑的组合代码存储于一预设存储地址,以供程序执行时由所述带有调试逻辑的组合代码替代所述待调试的目标代码被执行。利用本发明的程序调试方法,通过动态替换待被执行的代码来实现调试逻辑。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种程序调试方法、装置、设备及存储介质。
背景技术
此处的陈述仅提供与本发明有关的背景信息,而不必然地构成现有技术。
在Java软件开发过程中,为了提高程序的鲁棒性,开发和测试人员一般都会进行完整、周密的调试来模拟生产环境可能发生的情况来提高程序应对各种情况的能力。但真实的生产环境是无法百分之百预料的,往往会有没有调试到的异常情况发生在生产环境,并且产生一定影响。出现问题后,开发和测试人员都会在开发环境对异常情景进行复现,找到原因后修改软件代码成功修复问题。令开发人员棘手的是无法复现或复现几率很小的问题,这需要他们耗费大量精力财力去寻找复现的情景和问题的原因,不能及时修复问题,造成了损失。
传统的调试方案有以下几个缺点:
(1)调试复杂。调试往往需要修改代码、观察结果这两个步骤:观察程序执行的结果来决定需要修改哪些代码,修改代码后再观察程序执行的结果。这样循环往复的调试才可以将程序的运行调整到期望状态。大型软件或应用启动慢、关联依赖多且复杂,传统调试方法需要不断的重启应用,调试效率低。
(2)部分异常无法捕捉。传统调试方案无法解决的问题往往都在测试环境无法复现。导致解决异常困难,造成损失。
(3)需要重启进程。传统调试方式需要修改代码重启进程才可以有效调试,这在生产环境中会造成服务中断,产生损失。
发明内容
本发明的目的在于提供一种新的程序调试方法、装置、设备及存储介质。
本发明的目的采用以下技术方案来实现。依据本发明提出的一种程序调试方法,包括以下步骤:接收调试请求,所述调试请求包含调试逻辑代码;获取待调试的目标代码;将所述调试逻辑代码与所述目标代码合并,得到带有调试逻辑的组合代码;将所述带有调试逻辑的组合代码存储于一预设存储地址,以供程序执行时由所述带有调试逻辑的组合代码替代所述待调试的目标代码被执行。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种程序调试方法,包括以下步骤:接收调试请求,所述调试请求包含调试逻辑代码;从应用运行端设备中获取待调试的目标代码;将所述调试逻辑代码与所述目标代码合并,得到带有调试逻辑的组合代码;将所述带有调试逻辑的组合代码发送至所述应用运行端设备,以便存储到所述应用运行端设备的预设存储地址,并且当所述应用运行端设备执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种程序调试方法,包括以下步骤:接收从代理端设备发出的请求,根据所述请求从存储单元中获取待调试的目标代码,并发送至所述代理端设备,以供所述代理端设备合并所述目标代码和调试逻辑代码得到带有调试逻辑的组合代码;接收从所述代理端设备发出的所述带有调试逻辑的组合代码,将所述带有调试逻辑的组合代码存储到预设存储地址;当执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种程序调试方法,包括以下步骤:向具有调试代理模块的设备发出调试请求,所述调试请求包含调试逻辑代码,以供所述具有调试代理模块的设备将所述调试逻辑代码与获取的待调试的目标代码合并得到带有调试逻辑的组合代码,并存储于一预设存储地址,以便当执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行;接收执行所述带有调试逻辑的组合代码所得到的执行结果;根据所述执行结果对所述待调试的目标代码进行调试。
本发明的目的还可以采用以下的技术措施来进一步实现。
前述的程序调试方法,获取所述待调试的目标代码的步骤包括:获取待在生产环境中执行的机器码形式的目标代码,作为所述待调试的目标代码。
前述的程序调试方法,所述合并的步骤具体包括:将所述调试逻辑代码编译为汇编码;将所述待调试的目标代码反编译为汇编码;通过动态插桩,将所述调试逻辑代码的汇编码插入到所述待调试的目标代码的汇编码中,使得合并后的汇编码保持所述目标代码在原程序中对应的原操作不变;对合并后的汇编码进行编译得到所述带有调试逻辑的组合代码。
前述的程序调试方法,获取所述待调试的目标代码的步骤具体包括:根据机器码段的头部中包含的源代码信息、以及所述调试请求中包含的待调试程序的信息,确定所述待调试的目标代码。
前述的程序调试方法,所述带有调试逻辑的组合代码的所述预设存储地址是与所述目标代码的原暂存地址相异的另一暂存地址。
前述的程序调试方法,每条汇编码包括地址字段和指令字段,所述合并的步骤具体包括以下的一个或多个步骤:将所述合并后的汇编码中的一条代码的指令字段设置为所述待调试的目标代码的汇编码中的对应代码的指令字段;将所述合并后的汇编码中的一条代码的指令字段设置为将所述待调试的目标代码的汇编码中的对应代码的地址字段入栈;若所述待调试的目标代码的汇编码中的一条代码为调用一个地址字段,则将所述合并后的汇编码的对应代码的指令字段设置为将所被调用的地址字段入栈。
前述的程序调试方法,所述方法还包括:在执行所述带有调试逻辑的组合代码后,触发回调函数以反馈调试结果信息。
前述的程序调试方法,接收或发出所述调试请求的步骤包括:通过网络接收远程设备传来的请求、或通过网络将请求发出至远程设备;所述触发回调函数以反馈调试结果信息包括:通过网络将所述调试结果信息反馈至调试逻辑开发端。
前述的程序调试方法,所述待调试的目标代码和所述带有调试逻辑的组合代码均为在利用虚拟机构建的Java应用的生产环境中执行的指令。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种程序调试装置,包括:调试请求接收模块,用于接收调试请求,所述调试请求包含调试逻辑代码;目标代码获取模块,用于获取待调试的目标代码;调试逻辑合并模块,用于将所述调试逻辑代码与所述目标代码合并,得到带有调试逻辑的组合代码;组合代码存储模块,用于将所述带有调试逻辑的组合代码存储于一预设存储地址,以供程序执行时由所述带有调试逻辑的组合代码替代所述待调试的目标代码被执行。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种程序调试装置,包括:调试请求接收模块,用于接收调试请求,所述调试请求包含调试逻辑代码;目标代码获取模块,用于从应用运行端设备中获取待调试的目标代码;调试逻辑合并模块,用于将所述调试逻辑代码与所述目标代码合并,得到带有调试逻辑的组合代码;合并结果发出模块,用于将所述带有调试逻辑的组合代码发送至所述应用运行端设备,以便存储到所述应用运行端设备的预设存储地址,并且当所述应用运行端设备执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种程序调试装置,包括:目标代码发出模块,用于接收从代理端设备发出的请求,根据所述请求从存储单元中获取待调试的目标代码,并发送至所述代理端设备,以供所述代理端设备合并所述目标代码和调试逻辑代码得到带有调试逻辑的组合代码;合并结果接收模块,用于接收从所述代理端设备发出的所述带有调试逻辑的组合代码,将所述带有调试逻辑的组合代码存储到预设存储地址;执行模块,用于当执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种程序调试装置,包括:调试请求发出模块,用于向具有调试代理模块的设备发出调试请求,所述调试请求包含调试逻辑代码,以供所述具有调试代理模块的设备将所述调试逻辑代码与获取的待调试的目标代码合并得到带有调试逻辑的组合代码,并存储于一预设存储地址,以便当执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行;执行结果接收模块,用于接收执行所述带有调试逻辑的组合代码所得到的执行结果,以根据所述执行结果对所述待调试的目标代码进行调试。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种程序调试设备,包括:存储器,用于存储非暂时性计算机可读指令;以及处理器,用于运行所述计算机可读指令,使得所述处理器执行时实现前述任意一种程序调试方法。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种计算机可读存储介质,用于存储非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时,使得所述计算机执行前述任意一种程序调试方法。
本发明与现有技术相比具有明显的优点和有益效果。借由上述技术方案,本发明提出的程序调试方法、装置、设备及存储介质至少具有下列优点及有益效果:
1、调试简单。传统方案调试大型软件启动慢、关联依赖多且复杂,调试效率低。本方案无需重启进程,一次启动既可多次修改调试,提升了调试效率。
2、通过替换在生产环境中的待执行的机器码来实现调试,有能力完整捕获生产环境所有异常。生产环境中所有异常通过本方案都可以捕获,不再有难以复现的异常。
3、通过采用动态注入的方式,不需要重启进程。传统调试方式需要修改代码重启进程才可以有效调试,这在生产环境中会造成服务中断,产生损失。本方案无需重启进程就可以调试。
4、支持远程调试。方便服务提供者调试远程的服务,无需派人力到现场支持,节省时间和成本。
5、本发明并不依赖传统的软、硬件断点,通过动态替换CPU执行的代码来实现调试的逻辑。
上述说明仅是本发明技术方案的概述,为了能更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
图1是本发明一个实施例的程序调试方法的流程示意图;
图2是本发明另一实施例的程序调试方法的流程示意图;
图3是本发明另一实施例的程序调试方法的流程示意图;
图4是本发明另一实施例的程序调试方法的流程示意图;
图5是本发明一个实施例提供的对调试逻辑的汇编码和目标代码的汇编码进行合并的流程示意图;
图6是本发明一个实施例提供的进行动态插装和注入前后的代码的示意图;
图7是本发明一个实施例提供的调试系统的结构拓扑图;
图8是本发明一个实施例的程序调试设备的示意图。
具体实施方式
为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的程序调试方法、装置、设备及存储介质的具体实施方式、结构、特征及其功效,详细说明如后。
本文提及的调试指的是:程序设计中的一种方法,是发现和减少计算机程序或电子仪器设备中程序错误的一个过程。本文提及的代理(Agent)指的是:在计算机术语中意为代理程序,Agent并不会自发的执行某些程序,而是在其他人或程序控制完成任务的程序。
图1为本发明的程序调试方法一个实施例的示意性流程框图。在本发明的一些实施例中,请参阅图1,本发明示例的程序调试方法主要包括以下步骤:
步骤S11,接收调试请求,该调试请求包含调试逻辑代码。可选的,调试请求中还可以包含待调试程序的信息、发送端设备地址、接收端设备地址等信息,其中的待调试程序的信息可用于定位待调试的目标代码。
步骤S12,获取待调试的目标代码。该待调试的目标代码也可称为待调试逻辑。
步骤S13,将该调试逻辑代码与该目标代码合并,得到带有调试逻辑的组合代码。
步骤S14,将该带有调试逻辑的组合代码存储于一预设存储地址,以供程序执行时由该带有调试逻辑的组合代码替代该待调试的目标代码被执行,例如供诸如CPU等硬件来执行。
需注意,本实施例一般适用于运行有调试代理程序并运行有待调试的应用程序的设备,即图1中的第一端,可用于实现对生产环境中的程序进行调试。
图2为本发明的程序调试方法另一实施例的示意性流程框图。在本发明的一些实施例中,请参阅图2,本发明示例的程序调试方法主要包括以下步骤:
步骤S21,接收调试请求,该调试请求包含调试逻辑代码。可选的,调试请求中还可以包含待调试程序的信息、发送端设备地址、接收端设备地址等信息,其中的待调试程序的信息可用于定位待调试的目标代码。
步骤S22,从应用运行端设备中获取待调试的目标代码。
步骤S23,将该调试逻辑代码与该目标代码合并,得到带有调试逻辑的组合代码。
步骤S24,将该带有调试逻辑的组合代码发送至该应用运行端设备,以便存储到该应用运行端设备的预设存储地址,并且当该应用运行端设备执行该目标代码时替换为该带有调试逻辑的组合代码来执行。
需注意,本实施例一般适用于运行有调试代理程序但未运行待调试的应用程序的设备,即图2中的第二端,可用于与应用运行端设备(第三端)相配合地实现对生产环境中的程序进行调试。
在本发明的一些实施例中,请参阅图2,本发明示例的程序调试方法主要包括以下步骤:
步骤S31,接收从代理端设备发出的获取待调试的目标代码的请求,根据该请求从存储单元中获取待调试的目标代码,并发送至代理端设备,以供代理端设备合并该目标代码和调试逻辑代码得到带有调试逻辑的组合代码。
步骤S32,接收从代理端设备发出的带有调试逻辑的组合代码,将该带有调试逻辑的组合代码存储到预设存储地址。
步骤S33,当执行该目标代码时替换为该带有调试逻辑的组合代码来执行。
需注意,本实施例一般适用于运行有待调试的应用程序但未运行调试代理程序的设备,即图2中的第三端,可用于与调试代理端设备(第二端)相配合地实现对生产环境中的程序进行调试。
图3为本发明的程序调试方法另一实施例的示意性流程框图。图4为本发明的程序调试方法另一实施例的示意性流程框图。与图1、图2所示实施例的区别为通过第四端来发送调试请求,并将调试结果信息反馈到第四端。具体的,在本发明的一些实施例中,请参阅图3或图4,本发明示例的程序调试方法主要包括以下步骤:
步骤S41,向具有调试代理模块的设备发出调试请求,该调试请求包含调试逻辑代码,以供该具有调试代理模块的设备进行如下处理:将该调试逻辑代码与获取的待调试的目标代码合并得到带有调试逻辑的组合代码,并存储于一预设存储地址,以便当执行该目标代码时替换为该带有调试逻辑的组合代码来执行;
步骤S42(图中未示出),接收执行该组合代码所得到的执行结果;
步骤S43(图中未示出),根据该执行结果对该待调试的目标代码进行调试。
可选的,调试请求中还可以包含待调试程序的信息、发送端设备地址、接收端设备地址等信息,其中的待调试程序的信息可用于定位待调试的目标代码。
需注意,本实施例一般适用于调试逻辑开发端设备,即图3、图4中的第四端,可用于与同时具有调试代理程序并执行该目标代码的设备(第一端)相配合地、或与具有调试代理程序的调试代理端设备(第二端)和用于执行目标代码的应用运行端设备(第三端)相配合地实现对生产环境中的程序进行调试。
在本发明的一些实施例中,前述实施例中步骤S12、步骤S22、步骤S31、步骤S41涉及的获取待调试的目标代码的步骤具体包括:获取待在生产环境中执行的机器码形式的目标代码,作为前述的待调试的目标代码。例如,从处理器等硬件的寄存器中获取目标代码的机器码段,以使得该目标代码为待在生产环境中执行的代码。需注意,本发明并非限制目标代码是从处理器等硬件的寄存器获得的,该目标代码也可以从内存、RAM、ROM等存储单元获得。可选的,该存储单元用于暂存待在生产环境中执行的代码。
其中,生产环境一般指的是软件产品上线后的真实环境。生产环境与开发环境、测试环境相对。
需注意,本发明的一些可选实施例中所获取的目标代码为机器码的原因包括,机器码是待在生产环境执行的代码,而且机器码一般已存储到具体的存储器中从而便于定位。
可选的,在汇编层进行调试逻辑与目标机器码的融合。图5为本发明的程序调试方法一个实施例提供的合并调试逻辑和目标代码的示意性流程框图。具体的,请参阅图5,在本发明的一些实施例中,前述实施例中步骤S13、步骤S23、步骤S31、步骤S41提及的合并过程具体包括:
步骤Sa1,将调试逻辑代码编译为汇编码。
步骤Sa2,将待调试的目标代码反编译为汇编码。
步骤Sa3,通过动态插桩,将该调试逻辑代码的汇编码插入到该目标代码的汇编码中,使得合并后的汇编码保持目标代码在原程序中对应的原操作不变;对合并后的汇编码进行编译得到带有调试逻辑的组合代码。
其中,本文提及的动态插桩、注入:也称为动态二进制插桩(dynamic binaryinstrumentation,简称DBI,也称为动态插装)技术是一种通过注入插桩代码,来分析二进制应用程序在运行时的行为的方法。动态二进制插桩技术,可以在不影响程序动态执行结果的前提下,按照用户的分析需求,在程序执行过程中插入特定分析代码,实现对程序动态执行过程的监控与分析。
可选的,前述的使得合并后的汇编码保持目标代码在原程序中对应的原操作不变包括:合并前的代码对应的原程序中各个操作在合并后的代码中有功能相同的操作,以及多个原操作的执行顺序在合并前后保持不变。需注意并不是指合并前后汇编码的顺序不变,而是对应的原程序中的操作的顺序不变。
在本发明的一些实施例中,合并的步骤具体包括:对于目标代码的至少一些汇编码、或对于目标代码的所有的汇编码生成对应的汇编码,并在该对应的汇编码的行间插入调试逻辑代码的汇编码,以得到合并后的带有调试逻辑的代码。可选的,并非必须逐条一一对应,而可以多条代码与一条代码对应,只需:实际实现的功能(例如,应用程序的高级语言中的函数/方法)保持注入前后不变、以及多个功能(例如,应用程序的高级语言中的函数/方法)的实现顺序保持注入前后不变。
在本发明的一些实施例中,机器码段的头部(header)中包含有该机器码段的编译前的运行程序、高级语言码或汇编码的相关信息,不妨称为源代码信息,例如记录有该机器码段所属的类、所属的函数等信息。并且,前述实施例中步骤S12、步骤S22、步骤S31、步骤S41提及的获取目标代码的过程具体包括:根据机器码段的头部中包含的源代码信息、以及调试请求中包含的待调试程序的信息,定位目标代码。
在本发明的一些实施例中,前述的组合代码的预设存储地址是与待调试的目标代码的原暂存地址相异的另一暂存地址。具体的,前述实施例中步骤S14、步骤S24、步骤S32、步骤S41提及的将组合代码存储到预设存储地址具体包括:将带有调试逻辑的组合代码储存到与目标代码的原暂存地址相异的另一暂存地址,用以不覆盖原来的目标代码。从而在退出调试后,可恢复为未调试状态。进一步地,在一些实施例中,本发明所示方法还包括:接收退出调试指令,根据该退出调试指令,在应用程序执行时读取原暂存地址的目标代码,以替代带有调试逻辑的组合代码。
其中,前述的目标代码的原暂存地址可以位于是静态存储区域、静态区、方法区等存储区;前述将带有调试逻辑的组合代码储存到的另一暂存地址,亦可位于是静态存储区域、静态区、方法区等等存储区,但一般为空白地址。
在本发明的一些实施例中,每条汇编码包括地址字段和指令字段。一般来说,每条汇编码的地址字段表示该条汇编码的指令字段所存储的位置。作为一个可选的具体实施例,前述实施例中的合并的步骤具体包括以下的一个或多个步骤:
将合并后的汇编码中的一条代码的指令字段设置为:目标代码的汇编码中的对应代码的指令字段;
将合并后的汇编码中的一条代码的指令字段设置为:将目标代码的汇编码中的对应代码的地址字段入栈;
若目标代码的汇编码中的一条代码为调用一个地址字段,则将合并后的汇编码的对应代码的指令字段设置为:将所被调用的地址字段入栈、或将合并后的汇编码的对应代码设置为调用相同地址字段。
需注意,汇编语言中,调用一个地址字段一般表示调用该地址字段对应地址所存储的(诸如函数、参数等)内容,例如图2左侧图表的第三行、以及与其对应的右侧图表的第七行。
在本发明的一些实施例中,前述实施例中的合并的步骤还包括:对带有调试逻辑的组合代码进行封装,以利用封装后的带有调试逻辑的组合代码替换待调试的目标代码。
在本发明的一些实施例中,如图1、图2、图3或图4所示,本发明所示方法还包括:步骤S15,在执行带有调试逻辑的组合代码后,触发回调函数以反馈调试结果信息。其中,改调试结果信息包括待调试程序的运行结果、日志、运行过程中的中间参数等。
可选的,可利用调试代理程序将调试脚本上注册的回调函数保存到内存;在产生执行结果后调用该回调函数以反馈调试结果信息。
在本发明的一些实施例中,第一端与第四端之间通过网络远程传输通信连接,网络传输各种请求并网络传输反馈数据,能够实现远程调试。在本发明的一些实施例中,第二端、第三端、第四端之间通过网络远程通信连接,以实现远程调试。具体的,在本发明的一些实施例中,前述实施例提及的接收或发出调试请求、获取目标代码的请求的步骤包括:通过网络接收远程设备传来的请求、或通过网络将请求发出至远程设备。前述实施例提及的触发回调函数以反馈调试结果信息包括:通过网络将调试结果信息反馈至调试逻辑开发端。
本发明所示方案的适用场景包括但不限于使用HotSpot、ART、Dalvik虚拟机构建的Java应用上,包括但不限于Java Web网站、Android应用、Java虚拟环境。可以在生产环境对这些应用进行远程调试分析。
在本发明的一些实施例中,本发明各个实施例中的目标代码和前述的带有调试逻辑的组合代码均为在利用虚拟机构建的Java应用的生产环境中执行的指令,用以在生产环境对Java应用进行调试分析。
需注意,在Java系统中,通过Java语言编写并运行在JVM(全称为Java VirtualMachine,Java虚拟机)上的软件或程序。Java系统通常包含Java Web网站、Android应用等软件。
在本发明的一些实施例中,本发明所示方案涉及调试脚本、调试Agent、和JVM应用。
其中,调试脚本为带有调试逻辑的脚本。开发人员需要根据具体问题分析来编写合适的调试脚本,并将调试脚本输入至调试Agent。
JVM应用指使用Java编写,依赖JVM运行的应用。目前应用比较多的集中在JavaWeb、Android两个方向。本方案可以支持这两种场景进行调试。
而调试Agent这一模块主要承担注入、编译、通信的功能。
调试Agent的编译模块依靠注入脚本的实现语言。如果使用Javascript作为编写语言,则可以使用V8引擎进行编译。
调试Agent的通信模块使用一般的网络请求或其他中间件作为消息交换载体都是可行的,该模块主要功能是传递调试信息。
在一个具体实施例中,本发明提出了Stalker和Capstone两个工具。其中,Stalker是定位和注入的工具,用于寻址定位待调试的目标代码段、以及将合并后的带有调试逻辑的代码注入。Capstone是动态汇编/反汇编的工具,可用于将调试脚本编译为汇编码、将机器码反汇编为汇编码、合并调试逻辑与目标代码、将合并后的汇编码编译为机器码等。通过配合使用Stalker和Capstone,采用动态插装、注入的方式将调试代码注入到正要执行的代码中,实现在软件中任意位置插入代码逻辑。
而调试Agent包括注入模块,该注入模块封装有Stalker和Capstone并继承了他们的特性,抽象为API接口,并且封装了相关接口供注入脚本调用。
而在本发明的另一些实施例中,在调试Agent收到注入脚本后,会先调用编译引擎将脚本编译为机器码,然后调用stalker API将调试脚本与源代码打包编译为机器码,最后调用capstone API将机器码替换掉原应用代码并在合适时间由CPU执行,在执行结束后执行结果回由相关回调函数通过Agent的通信功能回传到结果处理脚本。
图6示出了利用Stalker和Capstone进行动态插装和注入的具体示例,图6中的左图是注入前的代码,一般为应用程序原代码,亦为合并前的目标代码的汇编码;右图是注入后的代码,亦为合并得到的带有调试逻辑的汇编码。在左图或右图中,左侧8位的16进制数为地址字段,右侧为指令字段。图中的ebp代表EBP指针:指向函数栈的栈底。图中的esp代表ESP指针:指向函数栈的栈顶,一般用于指向当前调用的函数。
本示例利用了CPU寄存器中常用到的栈stack结构,需注意,本发明并不限制利用栈结构、LIFO存储器,事实上也可以利用队列、FIFO存储器、堆等其他类型的存储结构。
本示例中,向push ebp和mov ebp,esp两指令之间插入调试逻辑call log_handler,分别对应右图00004000、00004006、0000400D三行代码。其中,push、mov、call均为栈操作,可选的,call log_handler代表“打印日志”。需注意由于本示例采用了将合并结果注入到与目标代码原存储位置相异的位置,因此push ebp和mov ebp,esp两指令的地址字段有所变化。
本发明中,需要尽量不改变注入前后的机器码、汇编码所实际实现的原始程序中的函数/方法的逻辑。在本示例中,为了保持注入前后的实际功能不变,因此在注入后,需要先后执行原函数00001003和00001008处的指令字段。按照函数栈“先入后执行”的特性,需要先入栈00001008再入栈00001003,这分别与右图中的00004012、00004013两行代码对应。需注意,由于00001003对应的是地址调用,所以本示例中直接解析为入栈00001234。
右图中的00004014的指令字段的功能包括将程序执行的上下文入栈,以便00004019的指令字段所进行的调用操作。而00004019代码则对应左图0000100A与0000100B,当该代码被执行时,将执行00001234、00001008位置处记录的操作。
在本发明的一些实施例中,在进行函数调用时,如果要进行返回,则当我们在堆栈中进行堆栈操作时,一定要保证在返回指令执行之前,ESP指向的是函数入栈时的地址。指函数调用前后,ESP指针指向的地址不变。
在本发明的一些实施例中,调试代理Agent可与JVM虚拟机安装于同一设备,而在本发明的另一些实施例中,Agent与JVM也可在不同设备上(此时,Agent需要能够访问JVM所在设备的存储器)。另外,调试所用的终端,可以是Agent/JVM所安装的同一台设备,也可以是不同设备,从而能够进行远程调试。
图7为本发明一个实施例的调试系统的结构拓扑图。请参阅图7,在本发明的一些实施例中,操作流程如下:
步骤一,在服务所在机器运行调试Agent。Agent承担了与远程开发者通信、注入调试代码等功能,调试前需要运行该组件。
步骤二,编写调试脚本,在本方案中为调试脚本。需要开发者根据应用实际情况或者根据异常情况编写。脚本中的代码经过Agent翻译后注入到目标进程中。
步骤三,编写结果处理脚本。注入后的脚本会以网络传输的方式与结果处理脚本通信。本脚本可以接收程序运行结果、运行过程中的中间参数等信息进行收集、存储或分析以便进行调试。
步骤四,在虚拟机运行被调试应用即可以开始调试。
在本发明的一些实施例中,远程调试的流程如下:
1、异常原因分析。调试之前需要对异常情况进行分析才可以找到入手分析的位置,从以下方面可以增加调试的效率。
1.1熟悉源代码:可以从阅读企业文档、代码库等方式熟悉源代码。也可以通过逆向工程等手段进行分析,通过代码来判断异常可能的问题。
1.2通过错误日志来分析。
2、开发调试脚本。经过分析后得到了我们调试的代码,然后就是编写调试脚本进行调试,调试脚本分两部分
2.1通信部分。调试脚本需要编写一个回调方法来接收被调试代码运行的结果和日志。
2.2注入部分。注入部分是实现调试逻辑的核心代码,需要根据Agent提供的API,在被调试代码之间插入调试逻辑,并且在代码执行后触发回调函数发送执行结果和日志。
3、网络请求。待注入的脚本通过网络请求发送到远端Agent,远端Agent执行脚本结果通过网络请求返回到结果处理脚本。
4、注入。调试Agent调用stalker API和capstone API将调试脚本与源代码一起编译后交给CPU执行,实现注入。
5、处理返回结果。调试Agent会将调试脚本上注册的回调函数保存到内存,在产生执行结果后一一调用这些回调函数并通过网络请求回传到结果处理脚本。开发者通过返回的日志或执行结果判断程序运行的情况,根据这些情况酌情再通过重复前述继续调试,这样逐步调试即可得知异常原因。
本发明提出的程序调试方法与传统方法的区别包括:
1)传统方法进行调试是依赖硬件断点或软件断点实现的。硬件断点由硬件寄存器提供支持,在程序执行到特定指令时,这些寄存器会判断是否存在断点,如果存在则中断程序并返回相关信息给调试端。软件断点依赖在程序编译时打入特征值,在程序执行到有特征值的代码时会中断并返回相关信息给调试端。
2)本发明并不依赖传统的软、硬件断点,通过动态替换CPU执行的代码来实现调试的逻辑。
本发明的实施例还提供一种程序调试装置,该装置对应于图1中示出的第一端,具体的,该装置包括:调试请求接收模块、目标代码获取模块、调试逻辑合并模块以及组合代码存储模块。
其中,该调试请求接收模块用于接收调试请求,该调试请求包含调试逻辑代码。
该目标代码获取模块用于获取待调试的目标代码。
该调试逻辑合并模块用于将该调试逻辑代码与该目标代码合并,得到带有调试逻辑的组合代码。
该组合代码存储模块用于将该带有调试逻辑的组合代码存储于一预设存储地址,以供程序执行时由该带有调试逻辑的组合代码替代该待调试的目标代码被执行。
本发明的实施例还提供一种程序调试装置,该装置对应于图2中示出的第二端,具体的,该装置包括:调试请求接收模块、目标代码获取模块、调试逻辑合并模块以及合并结果发出模块。
其中,该调试请求接收模块用于接收调试请求,该调试请求包含调试逻辑代码。
该目标代码获取模块用于从应用运行端设备中获取待调试的目标代码。
该调试逻辑合并模块用于将该调试逻辑代码与该目标代码合并,得到带有调试逻辑的组合代码。
该合并结果发出模块用于将该带有调试逻辑的组合代码发送至该应用运行端设备,以便存储到该应用运行端设备的预设存储地址,并且当该应用运行端设备执行该目标代码时替换为该带有调试逻辑的组合代码来执行。
本发明的实施例还提供一种程序调试装置,该装置对应于图2中示出的第三端,具体的,该装置包括:目标代码发出模块、合并结果接收模块以及执行模块。
该目标代码发出模块用于接收从代理端设备发出的请求,根据该请求从存储单元中获取待调试的目标代码,并发送至该代理端设备,以供该代理端设备合并该目标代码和调试逻辑代码得到带有调试逻辑的组合代码。
该合并结果接收模块用于接收从该代理端设备发出的该带有调试逻辑的组合代码,将该带有调试逻辑的组合代码存储到预设存储地址。
该执行模块用于当执行该目标代码时替换为该带有调试逻辑的组合代码来执行。
本发明的实施例还提供一种程序调试装置,该装置对应于图3或图4中示出的第四端,具体的,该装置包括:调试请求发出模块和执行结果接收模块。该调试请求发出模块用于向具有调试代理模块的设备发出调试请求,该调试请求包含调试逻辑代码,以供该具有调试代理模块的设备将该调试逻辑代码与获取的待调试的目标代码合并得到带有调试逻辑的组合代码,并存储于一预设存储地址,以便当执行该目标代码时替换为该带有调试逻辑的组合代码来执行。该执行结果接收模块用于接收执行该组合代码所得到的执行结果,以根据该执行结果对该待调试的目标代码进行调试。
另外,本发明实施例示出的各种程序调试装置的包括有用于执行前述各个实施例所述方法对应的模块和单元,而其详细说明和技术效果可以参考前述各实施例中的相应说明,在此不再赘述。
图8是图示根据本发明的一个实施例的程序调试设备的示意性框图。如图8所示,根据本公开实施例的程序调试设备100包括存储器101和处理器102。
该存储器101用于存储非暂时性计算机可读指令。具体地,存储器101可以包括一个或多个计算机程序产品,该计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。该易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。该非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。
该处理器102可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元,并且可以控制程序调试设备100中的其它组件以执行期望的功能。在本公开的一个实施例中,该处理器102用于运行该存储器101中存储的该计算机可读指令,使得该程序调试设备100执行前述的本公开各实施例的程序调试方法的全部或部分步骤。
本领域技术人员应能理解,为了解决如何获得良好用户体验效果的技术问题,本实施例中也可以包括诸如通信总线、接口等公知的结构,这些公知的结构也应包含在本发明的保护范围之内。
上文中所述生产环境,包括由计算机或机器人执行全部或部分产品加工、检测、包装等处理的自动化的工业生产环境,也包括其他借助计算机来实现的自动化办公、交通、仓储、零售、金融等各种不同的应用环境。
有关本实施例的详细说明和技术效果可以参考前述各实施例中的相应说明,在此不再赘述。
本发明的实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在设备上运行时,使得设备执行上述相关方法步骤实现上述实施例中的程序调试方法。
本发明的实施例还提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的程序调试方法。
另外,本发明的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的程序调试方法。
其中,本发明提供的装置、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
以上所述,仅是本发明的较佳实施例而已,并非对本发明做任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (18)
1.一种程序调试方法,其特征在于,所述方法包括以下步骤:
接收调试请求,所述调试请求包含调试逻辑代码;
获取待调试的目标代码;
将所述调试逻辑代码与所述目标代码合并,得到带有调试逻辑的组合代码;
将所述带有调试逻辑的组合代码存储于一预设存储地址,以供程序执行时由所述带有调试逻辑的组合代码替代所述待调试的目标代码被执行。
2.一种程序调试方法,其特征在于,所述方法包括以下步骤:
接收调试请求,所述调试请求包含调试逻辑代码;
从应用运行端设备中获取待调试的目标代码;
将所述调试逻辑代码与所述目标代码合并,得到带有调试逻辑的组合代码;
将所述带有调试逻辑的组合代码发送至所述应用运行端设备,以便存储到所述应用运行端设备的预设存储地址,并且当所述应用运行端设备执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行。
3.一种程序调试方法,其特征在于,所述方法包括以下步骤:
接收从代理端设备发出的请求,根据所述请求从存储单元中获取待调试的目标代码,并发送至所述代理端设备,以供所述代理端设备合并所述目标代码和调试逻辑代码得到带有调试逻辑的组合代码;
接收从所述代理端设备发出的所述带有调试逻辑的组合代码,将所述带有调试逻辑的组合代码存储到预设存储地址;
当执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行。
4.一种程序调试方法,其特征在于,所述方法包括以下步骤:
向具有调试代理模块的设备发出调试请求,所述调试请求包含调试逻辑代码,以供所述具有调试代理模块的设备将所述调试逻辑代码与获取的待调试的目标代码合并得到带有调试逻辑的组合代码,并存储于一预设存储地址,以便当执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行;
接收执行所述带有调试逻辑的组合代码所得到的执行结果;
根据所述执行结果对所述待调试的目标代码进行调试。
5.根据权利要求1至4中任意一项所述的程序调试方法,其特征在于,获取所述待调试的目标代码的步骤包括:
获取待在生产环境中执行的机器码形式的目标代码,作为所述待调试的目标代码。
6.根据权利要求5中所述的程序调试方法,其特征在于,所述合并的步骤具体包括:
将所述调试逻辑代码编译为汇编码;
将所述待调试的目标代码反编译为汇编码;
通过动态插桩,将所述调试逻辑代码的汇编码插入到所述待调试的目标代码的汇编码中,使得合并后的汇编码保持所述目标代码在原程序中对应的原操作不变;对合并后的汇编码进行编译得到所述带有调试逻辑的组合代码。
7.根据权利要求5或6所述的程序调试方法,其特征在于,获取所述待调试的目标代码的步骤具体包括:
根据机器码段的头部中包含的源代码信息、以及所述调试请求中包含的待调试程序的信息,确定所述待调试的目标代码。
8.根据前述任一权利要求所述的程序调试方法,其特征在于,所述带有调试逻辑的组合代码的所述预设存储地址是与所述目标代码的原暂存地址相异的另一暂存地址。
9.根据权利要求6至8中任意一项所述的程序调试方法,其特征在于,每条汇编码包括地址字段和指令字段,所述合并的步骤具体包括以下的一个或多个步骤:
将所述合并后的汇编码中的一条代码的指令字段设置为所述待调试的目标代码的汇编码中的对应代码的指令字段;
将所述合并后的汇编码中的一条代码的指令字段设置为将所述待调试的目标代码的汇编码中的对应代码的地址字段入栈;
若所述待调试的目标代码的汇编码中的一条代码为调用一个地址字段,则将所述合并后的汇编码的对应代码的指令字段设置为将所被调用的地址字段入栈。
10.根据前述任一权利要求所述的程序调试方法,其特征在于,所述方法还包括:
在执行所述带有调试逻辑的组合代码后,触发回调函数以反馈调试结果信息。
11.根据权利要求10所述的程序调试方法,其特征在于:
接收或发出所述调试请求的步骤包括:通过网络接收远程设备传来的请求、或通过网络将请求发出至远程设备;
所述触发回调函数以反馈调试结果信息包括:通过网络将所述调试结果信息反馈至调试逻辑开发端。
12.根据前述任一权利要求所述的程序调试方法,其特征在于:
所述待调试的目标代码和所述带有调试逻辑的组合代码均为在利用虚拟机构建的Java应用的生产环境中执行的指令。
13.一种程序调试装置,其特征在于,所述装置包括:
调试请求接收模块,用于接收调试请求,所述调试请求包含调试逻辑代码;
目标代码获取模块,用于获取待调试的目标代码;
调试逻辑合并模块,用于将所述调试逻辑代码与所述目标代码合并,得到带有调试逻辑的组合代码;
组合代码存储模块,用于将所述带有调试逻辑的组合代码存储于一预设存储地址,以供程序执行时由所述带有调试逻辑的组合代码替代所述待调试的目标代码被执行。
14.一种程序调试装置,其特征在于,所述装置包括:
调试请求接收模块,用于接收调试请求,所述调试请求包含调试逻辑代码;
目标代码获取模块,用于从应用运行端设备中获取待调试的目标代码;
调试逻辑合并模块,用于将所述调试逻辑代码与所述目标代码合并,得到带有调试逻辑的组合代码;
合并结果发出模块,用于将所述带有调试逻辑的组合代码发送至所述应用运行端设备,以便存储到所述应用运行端设备的预设存储地址,并且当所述应用运行端设备执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行。
15.一种程序调试装置,其特征在于,所述装置包括:
目标代码发出模块,用于接收从代理端设备发出的请求,根据所述请求从存储单元中获取待调试的目标代码,并发送至所述代理端设备,以供所述代理端设备合并所述目标代码和调试逻辑代码得到带有调试逻辑的组合代码;
合并结果接收模块,用于接收从所述代理端设备发出的所述带有调试逻辑的组合代码,将所述带有调试逻辑的组合代码存储到预设存储地址;
执行模块,用于当执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行。
16.一种程序调试装置,其特征在于,所述装置包括:
调试请求发出模块,用于向具有调试代理模块的设备发出调试请求,所述调试请求包含调试逻辑代码,以供所述具有调试代理模块的设备将所述调试逻辑代码与获取的待调试的目标代码合并得到带有调试逻辑的组合代码,并存储于一预设存储地址,以便当执行所述目标代码时替换为所述带有调试逻辑的组合代码来执行;
执行结果接收模块,用于接收执行所述带有调试逻辑的组合代码所得到的执行结果,以根据所述执行结果对所述待调试的目标代码进行调试。
17.一种程序调试设备,包括:
存储器,用于存储非暂时性计算机可读指令;以及
处理器,用于运行所述计算机可读指令,使得所述计算机可读指令被所述处理器执行时实现权利要求1至12中任一项所述的程序调试方法。
18.一种计算机存储介质,其特征在于,包括计算机指令,当所述计算机指令在设备上运行时,使得所述设备执行如权利要求1至12中任一项所述的程序调试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110096362.5A CN112765032A (zh) | 2021-01-25 | 2021-01-25 | 程序调试方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110096362.5A CN112765032A (zh) | 2021-01-25 | 2021-01-25 | 程序调试方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112765032A true CN112765032A (zh) | 2021-05-07 |
Family
ID=75707105
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110096362.5A Pending CN112765032A (zh) | 2021-01-25 | 2021-01-25 | 程序调试方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112765032A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113596600A (zh) * | 2021-08-03 | 2021-11-02 | 广州繁星互娱信息科技有限公司 | 直播嵌入程序的安全管理方法、装置、设备及存储介质 |
CN113986771A (zh) * | 2021-12-29 | 2022-01-28 | 北京壁仞科技开发有限公司 | 用于调试目标程序代码的方法及装置、电子设备 |
CN114237557A (zh) * | 2021-11-04 | 2022-03-25 | 芯华章科技股份有限公司 | 调试逻辑系统设计的方法、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100199265A1 (en) * | 2009-02-05 | 2010-08-05 | Microsoft Corporation | Program debugging with dynamically inserted instrumentation |
CN102279789A (zh) * | 2010-06-13 | 2011-12-14 | 三星电子(中国)研发中心 | 生产阶段嵌入式系统的调试系统及其调试方法 |
CN104102574A (zh) * | 2013-04-07 | 2014-10-15 | 腾讯科技(深圳)有限公司 | 应用程序测试方法及装置 |
-
2021
- 2021-01-25 CN CN202110096362.5A patent/CN112765032A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100199265A1 (en) * | 2009-02-05 | 2010-08-05 | Microsoft Corporation | Program debugging with dynamically inserted instrumentation |
CN102279789A (zh) * | 2010-06-13 | 2011-12-14 | 三星电子(中国)研发中心 | 生产阶段嵌入式系统的调试系统及其调试方法 |
CN104102574A (zh) * | 2013-04-07 | 2014-10-15 | 腾讯科技(深圳)有限公司 | 应用程序测试方法及装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113596600A (zh) * | 2021-08-03 | 2021-11-02 | 广州繁星互娱信息科技有限公司 | 直播嵌入程序的安全管理方法、装置、设备及存储介质 |
CN114237557A (zh) * | 2021-11-04 | 2022-03-25 | 芯华章科技股份有限公司 | 调试逻辑系统设计的方法、电子设备及存储介质 |
CN114237557B (zh) * | 2021-11-04 | 2023-08-15 | 芯华章科技股份有限公司 | 调试逻辑系统设计的方法、电子设备及存储介质 |
CN113986771A (zh) * | 2021-12-29 | 2022-01-28 | 北京壁仞科技开发有限公司 | 用于调试目标程序代码的方法及装置、电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112765032A (zh) | 程序调试方法、装置、设备及存储介质 | |
US7058927B2 (en) | Computer software run-time analysis systems and methods | |
CN101739333B (zh) | 应用程序的调试方法、调试工具及调试装置 | |
US7316005B2 (en) | Data race detection using sequential program analysis | |
Laranjeiro et al. | A black box tool for robustness testing of REST services | |
US20060253739A1 (en) | Method and apparatus for performing unit testing of software modules with use of directed automated random testing | |
US20070169055A1 (en) | Method and system for automated analysis of the performance of remote method invocations in multi-tier applications using bytecode instrumentation | |
Alimadadi et al. | Finding broken promises in asynchronous JavaScript programs | |
CN110688313B (zh) | 一种VxWorks操作系统下软件测试的故障注入方法 | |
CN113742119A (zh) | 嵌入式系统的调用栈回溯方法、装置和计算机设备 | |
CN110928777B (zh) | 测试用例的处理方法、装置、设备及存储介质 | |
CN110704315B (zh) | 一种嵌入式软件测试的故障注入装置 | |
CN113419969B (zh) | 基于浏览器插件的界面自动化成功率保障方法 | |
US20080115109A1 (en) | Enhanced Hover Help For Software Debuggers | |
CN113127329B (zh) | 脚本调试方法、装置及计算机存储介质 | |
CN113742215A (zh) | 一种自动配置和调用测试工具进行测试分析的方法及系统 | |
CN112445706A (zh) | 程序异常代码获取方法、装置、电子设备以及存储介质 | |
CN116097226A (zh) | 用于将故障注入分布式系统的装置和方法 | |
CN116795576A (zh) | 基于日志打印的设备驱动调试方法、装置和电子设备 | |
EP1653344A1 (en) | Embedded detection objects | |
CN111045891B (zh) | 基于java多线程的监控方法、装置、设备以及存储介质 | |
CN109947407B (zh) | 一种数据获取方法及装置 | |
CN115705297A (zh) | 代码调用检测方法、装置、计算机设备以及存储介质 | |
CN113220586A (zh) | 一种自动化的接口压力测试执行方法、装置和系统 | |
US20060101398A1 (en) | Program output management |
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 |