CN115629992A - 一种对使用Spring技术栈构建的应用系统进行调试的方法 - Google Patents
一种对使用Spring技术栈构建的应用系统进行调试的方法 Download PDFInfo
- Publication number
- CN115629992A CN115629992A CN202211620705.4A CN202211620705A CN115629992A CN 115629992 A CN115629992 A CN 115629992A CN 202211620705 A CN202211620705 A CN 202211620705A CN 115629992 A CN115629992 A CN 115629992A
- Authority
- CN
- China
- Prior art keywords
- calling
- debugging
- original method
- record file
- application system
- 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
Links
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/3636—Software debugging by tracing the execution of the program
-
- 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
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45591—Monitoring or debugging support
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
本发明公开了一种对使用Spring技术栈构建的应用系统进行调试的方法,属于大数据技术领域,所述方法包括判断Java虚拟机加载的每一个类是否带有特殊注解;采用字节码增强工具,对带有特殊注解的类的每一个方法进行字节码增强,并定时生成对应的采集数据;创建分析系统,将所述采集数据发送至分析系统进行处理,形成调用记录文件并保存;下载所述调用记录文件,并根据调用记录文件中每个方法的采集数据在本地进行调试,定位应用系统的代码故障点。本发明将用户请求在生产环境中涉及到的每个方法的调用都进行快照记录,将快照记录按照方法调用的先后顺序串联起来形成调用记录文件,在本地代码进行调试,避免了对生产环境造成影响。
Description
技术领域
本发明属于大数据技术领域,具体涉及一种对使用Spring技术栈构建的应用系统进行调试的方法。
背景技术
Alibaba Arthas是利用Java Agent机制进行在线调试工具,但是需要用户在服务器预装此应用,且在调试时需要登录服务器进行操作。同时该技术携带的 Java Agent会对应用系统的性能造成一定的影响,多次进行在线调试可能导致系统性能持续下降。而各种Java Web服务器自带的远程调试端口已很少使用,因为会对系统安全造成极大隐患,同时也会对生产环境用户的正常请求产生阻塞,让用户感知到请求停顿,极大的影响用户体验。
因此,本发明提供了一种对使用Spring技术栈构建的应用系统进行调试的方法,以至少解决上述部分技术问题。
发明内容
本发明要解决的技术问题是:提供一种对使用Spring技术栈构建的应用系统进行调试的方法,以至少解决上述部分技术问题。
为实现上述目的,本发明采用的技术方案如下:
一种对使用Spring技术栈构建的应用系统进行调试的方法,包括以下步骤:
步骤1、判断Java虚拟机加载的每一个类是否带有特殊注解;
步骤2、采用字节码增强工具,对带有特殊注解的类的每一个方法进行字节码增强,生成对应的采集数据;
步骤3、创建分析系统,将所述采集数据发送至分析系统进行处理,形成调用记录文件并保存;
步骤4、下载所述调用记录文件,并根据调用记录文件中每个方法的采集数据在本地进行调试,定位应用系统的代码故障点。
进一步地,所述特殊注解包括@Controller、@RestController、@Service、@Repository、@Component的任意一个或多个。
进一步地,所述步骤2包括:步骤21、将所述带有特殊注解的类的每一个方法记为原方法并重命名,创建一个对应的新方法;步骤22、从线程局部变量中获取原方法已有的调用序号或生成一个随机的调用序号;步骤23、记录原方法的入参和调用开始时间;步骤24、在新方法中调用原方法;步骤25、记录原方法的返回值、原方法的执行总耗时和调用结束标记;步骤26、将调用序号、原方法的执行总耗时、原方法的入参、原方法的返回值、调用结束标记、当前时间、原方法所在的类的名称以及原方法的名称记录为采集数据并保存到本地缓存。
进一步地,步骤22包括:判断带有特殊注解的类是否带有@Controller或@RestControlle注解,若不带有,则从线程局部变量中获取原方法已有的调用序号;若带有,进一步判断原方法的入参是否含有表示本次请求需要被追踪采集的标志符参数,若含有,则生成一个随机的调用序号并保存于线程局部变量中。
进一步地,在所述步骤26中,仅当带有@Controller或@RestControlle注解时,才存在调用结束标记并记录。
进一步地,所述原方法的重命名名称为原方法的名称加上一个随机数。
进一步地,所述新方法的名称为原方法的名称。
进一步地,所述步骤3包括:当采集数据中没有调用结束标记,则直接将采集数据存入分析系统中;当采集数据中有调用结束标记,提取采集数据中的调用序号,再获取具有相同调用序号的其他采集数据,并按照每个采集数据中携带的调用开始时间从小到大进行排序,形成调用记录文件并保存。
进一步地,所述字节码增强工具为ByteBuddy。
与现有技术相比,本发明具有以下有益效果:
本发明设计科学合理,使用方便,将用户请求在生产环境中涉及到的每个方法的调用都进行快照记录,然后将快照记录按照方法调用的先后顺序串联起来形成调用记录文件。用户使用这份文件可以在本地代码进行调试,从而不必在生产环境进行调试,避免了对生产环境造成影响。
附图说明
图1为本发明的方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进一步详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明提供一种对使用Spring技术栈构建的应用系统进行调试的方法,包括以下步骤:
步骤1、判断Java虚拟机加载的每一个类是否带有特殊注解;
步骤2、采用字节码增强工具,对带有特殊注解的类的每一个方法进行字节码增强,生成对应的采集数据;
步骤3、创建分析系统,将所述采集数据发送至分析系统进行处理,形成调用记录文件并保存;
步骤4、下载所述调用记录文件,并根据调用记录文件中每个方法的采集数据在本地进行调试,定位应用系统的代码故障点。
本发明将用户请求在生产环境中涉及到的每个方法的调用都进行记录,然后将记录按照方法调用的先后顺序串联起来形成调用记录文件。用户使用这份文件可以在本地代码进行调试,从而不必在生产环境进行调试,避免了对生产环境造成影响。
本发明所述方法是利用Java提供的Java Agent机制在Java虚拟机的类加载阶段进行工作。所述特殊注解包括@Controller、@RestController、@Service、@Repository、@Component的任意一个或多个。其中,@Controller是Spring框架提供的注解,@Controller标识的类代表控制器类(控制层/表现层);@RestController其本身用@Controller和@ResponseBody进行注解,实现了二者注解功能的结合,带有此注释的类型被视为控制器;@Service注解用于类上,标记当前类是一个service类,加上该注解会将当前类自动注入到spring容器中,不需要再在applicationContext.xml文件定义bean了;@Repository与@Controller、@Service的作用都是把对象交给Spring管理,@Repository是标注在Dao层接口上,作用是将接口的一个实现类交给Spring管理;@Component是一个元注解,用于注解其他类注解,如@Controller、 @Service、 @Repository 等。
本发明所述步骤2为对每个方法的调用进行快照记录。所述所述字节码增强工具为ByteBuddy。
步骤2包括:步骤21、将所述带有特殊注解的类的每一个方法记为原方法并重命名,创建一个对应的新方法,所述原方法的重命名名称为原方法的名称加上一个随机数,所述新方法的名称为原方法的名称。
步骤22、从线程局部变量(ThreadLocal)中获取原方法已有的调用序号或生成一个随机的调用序号。步骤22包括:判断带有特殊注解的类是否带有@Controller或@RestControlle注解,若不带有,则从线程局部变量中获取原方法已有的调用序号;若带有,进一步判断原方法的入参是否含有表示本次请求需要被追踪采集的标志符参数,若含有,则生成一个随机的调用序号并保存于线程局部变量中。
步骤23、记录原方法的入参和和调用开始时间。
步骤24、在新方法中调用原方法。
步骤25、记录原方法的返回值、原方法的执行总耗时和调用结束标记。
步骤26、将调用序号、原方法的执行总耗时、原方法的入参、原方法的返回值、调用结束标记、当前时间、原方法所在的类的名称以及原方法的名称记录为采集数据并保存到本地缓存。进一步地,仅当带有@Controller或@RestControlle注解时,才存在调用结束标记并记录。
本发明所述步骤3为对采集数据的处理,进而生成每个方法的调用记录文件。创建一个分析系统,对调用产生的采集数据进行处理和保存,分析系统存在于云服务器,如此生产大量的调用记录文件则可存储于云服务器,节约了本地PC机的内存。仅当需要对应用系统的代码故障点进行判定时,从云服务器的分析系统下载调用记录文件,并在本地进行调试。所述步骤3包括:当采集数据中没有调用结束标记,则直接将采集数据存入分析系统中;当采集数据中有调用结束标记,提取采集数据中的调用序号,再获取具有相同调用序号的其他采集数据,并按照每个采集数据中携带的调用开始时间从小到大进行排序,形成调用记录文件并保存。
本发明不仅能够采集方法调用请求中各个被调用方法的详情,还能统计方法执行的时间,这种细粒度的采集比 SkyWalking、PinPoint等链路采集工具采集到的方法执行耗时更精确。同时通过将请求在生产环境的执行流程采集到线下本地缓存中,然后在线下本地缓存进行回放,从而进行系统调试。所述方法在调试系统时不会对生产环境的系统产生任何的影响,并且数据采集即调用记录只会在系统启动时执行一次,不会对生产环境系统的调用产生负担。
最后应说明的是:以上各实施例仅仅为本发明的较优实施例用以说明本发明的技术方案,而非对其限制,当然更不是限制本发明的专利范围;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围;也就是说,但凡在本发明的主体设计思想和精神上作出的毫无实质意义的改动或润色,其所解决的技术问题仍然与本发明一致的,均应当包含在本发明的保护范围之内;另外,将本发明的技术方案直接或间接的运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (9)
1.一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,包括以下步骤:
步骤1、判断Java虚拟机加载的每一个类是否带有特殊注解;
步骤2、采用字节码增强工具,对带有特殊注解的类的每一个方法进行字节码增强,生成对应的采集数据;
步骤3、创建分析系统,将所述采集数据发送至分析系统进行处理,形成调用记录文件并保存;
步骤4、下载所述调用记录文件,并根据调用记录文件中每个方法的采集数据在本地进行调试,定位应用系统的代码故障点。
2.根据权利要求1所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,所述特殊注解包括@Controller、@RestController、@Service、@Repository、@Component的任意一个或多个。
3.根据权利要求2所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,所述步骤2包括:步骤21、将所述带有特殊注解的类的每一个方法记为原方法并重命名,创建一个对应的新方法;步骤22、从线程局部变量中获取原方法已有的调用序号或生成一个随机的调用序号;步骤23、记录原方法的入参和调用开始时间;步骤24、在新方法中调用原方法;步骤25、记录原方法的返回值、原方法的执行总耗时和调用结束标记;步骤26、将调用序号、原方法的执行总耗时、原方法的入参、原方法的返回值、调用结束标记、当前时间、原方法所在的类的名称以及原方法的名称记录为采集数据并保存到本地缓存。
4.根据权利要求3所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,步骤22包括:判断带有特殊注解的类是否带有@Controller或@RestControlle注解,若不带有,则从线程局部变量中获取原方法已有的调用序号;若带有,进一步判断原方法的入参是否含有表示本次请求需要被追踪采集的标志符参数,若含有,则生成一个随机的调用序号并保存于线程局部变量中。
5.根据权利要求3所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,在所述步骤26中,仅当带有@Controller或@RestControlle注解时,才存在调用结束标记并记录。
6.根据权利要求3所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,所述原方法的重命名名称为原方法的名称加上一个随机数。
7.根据权利要求3所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,所述新方法的名称为原方法的名称。
8.根据权利要求3所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,所述步骤3包括:当采集数据中没有调用结束标记,则直接将采集数据存入分析系统中;当采集数据中有调用结束标记,提取采集数据中的调用序号,再获取具有相同调用序号的其他采集数据,并按照每个采集数据中携带的调用开始时间从小到大进行排序,形成调用记录文件并保存。
9.根据权利要求1所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,所述字节码增强工具为ByteBuddy。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211620705.4A CN115629992B (zh) | 2022-12-16 | 2022-12-16 | 一种对使用Spring技术栈构建的应用系统进行调试的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211620705.4A CN115629992B (zh) | 2022-12-16 | 2022-12-16 | 一种对使用Spring技术栈构建的应用系统进行调试的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115629992A true CN115629992A (zh) | 2023-01-20 |
CN115629992B CN115629992B (zh) | 2023-04-07 |
Family
ID=84910655
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211620705.4A Active CN115629992B (zh) | 2022-12-16 | 2022-12-16 | 一种对使用Spring技术栈构建的应用系统进行调试的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115629992B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116756092A (zh) * | 2023-08-23 | 2023-09-15 | 深圳红途科技有限公司 | 系统下载文件打标方法、装置、计算机设备及存储介质 |
CN117667722A (zh) * | 2023-12-08 | 2024-03-08 | 中科世通亨奇(北京)科技有限公司 | 程序跟踪调试的方法、系统、设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102129408A (zh) * | 2011-04-14 | 2011-07-20 | 电子科技大学 | 一种基于记录回放技术的嵌入式软件调试装置和方法 |
US20110258608A1 (en) * | 2010-04-15 | 2011-10-20 | International Business Machines Corporation | Method and apparatus to locate bottleneck of java program |
CN105808266A (zh) * | 2016-03-29 | 2016-07-27 | 广州华多网络科技有限公司 | 代码运行方法及装置 |
CN109992454A (zh) * | 2017-12-31 | 2019-07-09 | 中国移动通信集团江西有限公司 | 故障定位的方法、装置和存储介质 |
CN110471787A (zh) * | 2019-08-22 | 2019-11-19 | 中国工商银行股份有限公司 | 线上问题捕获方法、系统、装置、电子设备及存储介质 |
CN111444066A (zh) * | 2020-05-18 | 2020-07-24 | 江苏电力信息技术有限公司 | 一种基于ByteBuddy的服务端性能指标监控方法 |
CN113360377A (zh) * | 2021-06-01 | 2021-09-07 | 北京京东振世信息技术有限公司 | 一种测试方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104794059B (zh) * | 2015-05-08 | 2017-08-04 | 北京理工大学 | 一种基于函数调用记录的缺陷定位方法及装置 |
CN111782340B (zh) * | 2020-06-29 | 2023-08-08 | 中国工商银行股份有限公司 | 一种基于字节码的数据处理方法、装置、设备及系统 |
CN113760647A (zh) * | 2021-04-15 | 2021-12-07 | 北京京东乾石科技有限公司 | Sql的追踪方法、装置、设备、系统及存储介质 |
-
2022
- 2022-12-16 CN CN202211620705.4A patent/CN115629992B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110258608A1 (en) * | 2010-04-15 | 2011-10-20 | International Business Machines Corporation | Method and apparatus to locate bottleneck of java program |
CN102129408A (zh) * | 2011-04-14 | 2011-07-20 | 电子科技大学 | 一种基于记录回放技术的嵌入式软件调试装置和方法 |
CN105808266A (zh) * | 2016-03-29 | 2016-07-27 | 广州华多网络科技有限公司 | 代码运行方法及装置 |
CN109992454A (zh) * | 2017-12-31 | 2019-07-09 | 中国移动通信集团江西有限公司 | 故障定位的方法、装置和存储介质 |
CN110471787A (zh) * | 2019-08-22 | 2019-11-19 | 中国工商银行股份有限公司 | 线上问题捕获方法、系统、装置、电子设备及存储介质 |
CN111444066A (zh) * | 2020-05-18 | 2020-07-24 | 江苏电力信息技术有限公司 | 一种基于ByteBuddy的服务端性能指标监控方法 |
CN113360377A (zh) * | 2021-06-01 | 2021-09-07 | 北京京东振世信息技术有限公司 | 一种测试方法和装置 |
Non-Patent Citations (1)
Title |
---|
AZIZ NANTHAAMORNPHONG等: "Bytecode-based class dependency extraction tool: Bytecode-CDET" * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116756092A (zh) * | 2023-08-23 | 2023-09-15 | 深圳红途科技有限公司 | 系统下载文件打标方法、装置、计算机设备及存储介质 |
CN116756092B (zh) * | 2023-08-23 | 2024-01-05 | 深圳红途科技有限公司 | 系统下载文件打标方法、装置、计算机设备及存储介质 |
CN117667722A (zh) * | 2023-12-08 | 2024-03-08 | 中科世通亨奇(北京)科技有限公司 | 程序跟踪调试的方法、系统、设备及存储介质 |
CN117667722B (zh) * | 2023-12-08 | 2024-07-23 | 中科世通亨奇(北京)科技有限公司 | 程序跟踪调试的方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115629992B (zh) | 2023-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115629992B (zh) | 一种对使用Spring技术栈构建的应用系统进行调试的方法 | |
CN111602114B (zh) | 用于在集成开发环境内提供即时通信信道的系统和方法 | |
US9740594B2 (en) | Automated debug trace specification | |
US8473919B2 (en) | System and method for repeating program flow for debugging and testing | |
US8443340B2 (en) | Execution capture and replay based debugging | |
US8548947B2 (en) | Systems and methods for file maintenance | |
CN112486786B (zh) | 一种调用链路追踪方法及装置 | |
US10565089B2 (en) | Identification of code features potentially associated with code behavior | |
US20160283357A1 (en) | Call stack relationship acquiring method and apparatus | |
CA2321019A1 (en) | Capturing snapshots of a debuggee's state during a debug session | |
US7913233B2 (en) | Performance analyzer | |
CN111694561A (zh) | 一种接口管理方法、装置、设备及存储介质 | |
CN105512276B (zh) | 一种构建垃圾文件的方法、装置及电子设备 | |
US20040153791A1 (en) | Identifying solutions to computer problems in client/server system | |
CN116561146A (zh) | 数据库日志记录方法、装置、计算机设备及计算机可读存储介质 | |
CN111581051A (zh) | 基于web前端的系统运行日志处理方法、装置、设备及介质 | |
CN106649000A (zh) | 实时处理引擎的故障恢复方法及相应的服务器 | |
CN109857716B (zh) | 系统交互日志记录方法、装置及存储介质、服务器 | |
US7403933B2 (en) | Identifying solutions to computer problems in main system by service system | |
CN110806968B (zh) | 应用程序运行信息获取方法及装置 | |
CN115291938A (zh) | 用于电子证据分析的组件配置方法及系统 | |
CN113946509A (zh) | 埋点查找比对方法和设备,计算设备和可读存储介质 | |
EP2587380A1 (en) | Runtime environment and method for non-invasive monitoring of software applications | |
JP2010152707A (ja) | データベースのバックアップ方法及びデータベースシステム | |
CN111459547A (zh) | 一种函数调用链路的展示方法和装置 |
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 |