CN115629992B - 一种对使用Spring技术栈构建的应用系统进行调试的方法 - Google Patents

一种对使用Spring技术栈构建的应用系统进行调试的方法 Download PDF

Info

Publication number
CN115629992B
CN115629992B CN202211620705.4A CN202211620705A CN115629992B CN 115629992 B CN115629992 B CN 115629992B CN 202211620705 A CN202211620705 A CN 202211620705A CN 115629992 B CN115629992 B CN 115629992B
Authority
CN
China
Prior art keywords
calling
original method
debugging
record file
collected data
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.)
Active
Application number
CN202211620705.4A
Other languages
English (en)
Other versions
CN115629992A (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.)
Yunzhu Information Technology Chengdu Co ltd
Original Assignee
Yunzhu Information Technology Chengdu 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 Yunzhu Information Technology Chengdu Co ltd filed Critical Yunzhu Information Technology Chengdu Co ltd
Priority to CN202211620705.4A priority Critical patent/CN115629992B/zh
Publication of CN115629992A publication Critical patent/CN115629992A/zh
Application granted granted Critical
Publication of CN115629992B publication Critical patent/CN115629992B/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/3636Software debugging by tracing the execution of the program
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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技术栈构建的应用系统进行调试的方法
技术领域
本发明属于大数据技术领域,具体涉及一种对使用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 (6)

1.一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,包括以下步骤:
步骤1、判断Java虚拟机加载的每一个类是否带有特殊注解;
步骤2、采用字节码增强工具,对带有特殊注解的类的每一个方法进行字节码增强,生成对应的采集数据;
步骤3、创建分析系统,将所述采集数据发送至分析系统进行处理,形成调用记录文件并保存;
步骤4、下载所述调用记录文件,并根据调用记录文件中每个方法的采集数据在本地进行调试,定位应用系统的代码故障点;
所述特殊注解包括@Controller、@RestController、@Service、@Repository、@Component的任意一个或多个;
所述步骤2包括:步骤21、将所述带有特殊注解的类的每一个方法记为原方法并重命名,创建一个对应的新方法;步骤22、从线程局部变量中获取原方法已有的调用序号或生成一个随机的调用序号;步骤23、记录原方法的入参和调用开始时间;步骤24、在新方法中调用原方法;步骤25、记录原方法的返回值、原方法的执行总耗时和调用结束标记;步骤26、将调用序号、原方法的执行总耗时、原方法的入参、原方法的返回值、调用结束标记、当前时间、原方法所在的类的名称以及原方法的名称记录为采集数据并保存到本地缓存;
所述步骤3包括:当采集数据中没有调用结束标记,则直接将采集数据存入分析系统中;当采集数据中有调用结束标记,提取采集数据中的调用序号,再获取具有相同调用序号的其他采集数据,并按照每个采集数据中携带的调用开始时间从小到大进行排序,形成调用记录文件并保存。
2.根据权利要求1所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,步骤22包括:判断带有特殊注解的类是否带有@Controller或@RestControlle注解,若不带有,则从线程局部变量中获取原方法已有的调用序号;若带有,进一步判断原方法的入参是否含有表示本次请求需要被追踪采集的标志符参数,若含有,则生成一个随机的调用序号并保存于线程局部变量中。
3.根据权利要求1所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,在所述步骤26中,仅当带有@Controller或@RestControlle注解时,才存在调用结束标记并记录。
4.根据权利要求1所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,所述原方法的重命名名称为原方法的名称加上一个随机数。
5.根据权利要求1所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,所述新方法的名称为原方法的名称。
6.根据权利要求1所述的一种对使用Spring技术栈构建的应用系统进行调试的方法,其特征在于,所述字节码增强工具为ByteBuddy。
CN202211620705.4A 2022-12-16 2022-12-16 一种对使用Spring技术栈构建的应用系统进行调试的方法 Active CN115629992B (zh)

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 CN115629992A (zh) 2023-01-20
CN115629992B true 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)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116756092B (zh) * 2023-08-23 2024-01-05 深圳红途科技有限公司 系统下载文件打标方法、装置、计算机设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102129408A (zh) * 2011-04-14 2011-07-20 电子科技大学 一种基于记录回放技术的嵌入式软件调试装置和方法
CN104794059A (zh) * 2015-05-08 2015-07-22 北京理工大学 一种基于函数调用记录的缺陷定位方法及装置
CN111782340A (zh) * 2020-06-29 2020-10-16 中国工商银行股份有限公司 一种基于字节码的数据处理方法、装置、设备及系统
CN113760647A (zh) * 2021-04-15 2021-12-07 北京京东乾石科技有限公司 Sql的追踪方法、装置、设备、系统及存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102222037B (zh) * 2010-04-15 2014-04-02 国际商业机器公司 用于定位java程序的瓶颈的方法和设备
CN105808266B (zh) * 2016-03-29 2019-09-10 广州华多网络科技有限公司 代码运行方法及装置
CN109992454B (zh) * 2017-12-31 2023-09-19 中国移动通信集团江西有限公司 故障定位的方法、装置和存储介质
CN110471787A (zh) * 2019-08-22 2019-11-19 中国工商银行股份有限公司 线上问题捕获方法、系统、装置、电子设备及存储介质
CN111444066B (zh) * 2020-05-18 2022-01-18 江苏电力信息技术有限公司 一种基于ByteBuddy的服务端性能指标监控方法
CN113360377B (zh) * 2021-06-01 2023-11-07 北京京东振世信息技术有限公司 一种测试方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102129408A (zh) * 2011-04-14 2011-07-20 电子科技大学 一种基于记录回放技术的嵌入式软件调试装置和方法
CN104794059A (zh) * 2015-05-08 2015-07-22 北京理工大学 一种基于函数调用记录的缺陷定位方法及装置
CN111782340A (zh) * 2020-06-29 2020-10-16 中国工商银行股份有限公司 一种基于字节码的数据处理方法、装置、设备及系统
CN113760647A (zh) * 2021-04-15 2021-12-07 北京京东乾石科技有限公司 Sql的追踪方法、装置、设备、系统及存储介质

Also Published As

Publication number Publication date
CN115629992A (zh) 2023-01-20

Similar Documents

Publication Publication Date Title
US9740594B2 (en) Automated debug trace specification
US7702959B2 (en) Error management system and method of using the same
US20020087950A1 (en) Capturing snapshots of a debuggee's state during a debug session
US20030204838A1 (en) Debugging platform-independent software applications and related code components
US10565089B2 (en) Identification of code features potentially associated with code behavior
CN115629992B (zh) 一种对使用Spring技术栈构建的应用系统进行调试的方法
US20030188301A1 (en) Code coverage with an integrated development environment
CN104156275A (zh) 一种安卓Android平台异常处理的方法和装置
CN111158741B (zh) 监控业务模块对第三方类库依赖关系变化的方法及装置
CN112115038A (zh) 一种应用测试方法、装置和存储介质
CN115576600A (zh) 基于代码变更的差异处理方法、装置、终端及存储介质
CN106649000A (zh) 实时处理引擎的故障恢复方法及相应的服务器
CN109857716B (zh) 系统交互日志记录方法、装置及存储介质、服务器
CN112612697A (zh) 一种基于字节码技术的软件缺陷测试定位方法及系统
CN117112522A (zh) 并发进程日志管理方法、装置、设备和存储介质
CN113918377B (zh) C++程序崩溃的定位方法、装置、设备及存储介质
JP2005338987A (ja) 例外テスト支援プログラム及び例外テスト支援装置
CN115455059A (zh) 一种基于底层数据解析用户行为的方法、装置及相关介质
JP2010152707A (ja) データベースのバックアップ方法及びデータベースシステム
CN112817782A (zh) 一种数据采集上报方法、装置、电子设备和存储介质
CN111459547A (zh) 一种函数调用链路的展示方法和装置
EP2587380A1 (en) Runtime environment and method for non-invasive monitoring of software applications
CN117687681B (zh) 一种低代码应用的版本管理方法及系统
CN112579454B (zh) 一种任务数据的处理方法、装置以及设备
CN113885774B (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