CN105808266B - 代码运行方法及装置 - Google Patents

代码运行方法及装置 Download PDF

Info

Publication number
CN105808266B
CN105808266B CN201610188994.3A CN201610188994A CN105808266B CN 105808266 B CN105808266 B CN 105808266B CN 201610188994 A CN201610188994 A CN 201610188994A CN 105808266 B CN105808266 B CN 105808266B
Authority
CN
China
Prior art keywords
bytecode
code
enhancing
party
component
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
CN201610188994.3A
Other languages
English (en)
Other versions
CN105808266A (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.)
Guangzhou Huaduo Network Technology Co Ltd
Original Assignee
Guangzhou Huaduo Network 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 Guangzhou Huaduo Network Technology Co Ltd filed Critical Guangzhou Huaduo Network Technology Co Ltd
Priority to CN201610188994.3A priority Critical patent/CN105808266B/zh
Publication of CN105808266A publication Critical patent/CN105808266A/zh
Application granted granted Critical
Publication of CN105808266B publication Critical patent/CN105808266B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • 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/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种代码运行方法及装置,属于代码测试领域。所述代码运行方法包括:获取第三方组件的源代码对应的第一字节码;在第一字节码中指定位置添加第二字节码,得到增强字节码,第二字节码根据自定义类的源代码编译得到,自定义类用于实现代码调试功能;使用JVM加载并运行增强字节码。本发明实施例解决了开发人员在没有第三方组件源代码修改权限的情况下,无法通过在第三方组件中添加打印日志代码来实现日志打印功能的问题;达到了在不对第三方组件源代码进行修改的前提下,为第三方组件增加代码调试功能的效果。

Description

代码运行方法及装置
技术领域
本发明实施例涉及代码测试领域,特别涉及一种代码运行方法及装置。
背景技术
JAVA是一种被广泛应用于服务端程序开发的高级程序语言。
利用JAVA开发的服务端程序部署到线上环境运行时,由于输入数据的不确定性,开发人员需要通过打印日志的方式进行故障分析。为了使服务端程序具有打印日志功能,开发人员在开发服务端程序时,需要在代码中添加相应的打印日志代码,当运行至该打印日志代码处时,即可打印出相应的日志。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:开发人员在开发服务端程序时,会在代码中添加第三方组件来实现部分功能,开发人员在没有第三方组件源代码修改权限的情况下,无法通过在第三方组件中添加打印日志代码来实现日志打印功能。
发明内容
为了解决现有技术中开发人员在没有第三方组件源代码修改权限的情况下,无法通过在第三方组件中添加打印日志代码来实现日志打印功能的问题,本发明实施例提供了一种代码运行方法及装置。所述技术方案如下:
根据本发明实施例的第一方面,提供一种代码运行方法,所述方法包括:
获取第三方组件的源代码对应的第一字节码;
在第一字节码中指定位置添加第二字节码,得到增强字节码,该第二字节码根据自定义类的源代码编译得到,该自定义类用于实现代码调试功能;
使用JVM(JAVA Virtual Machine,JAVA虚拟机)加载并运行该增强字节码。
可选地,使用JVM加载并运行增强字节码之前,包括:
将第一字节码替换为增强字节码。
可选地,将第一字节码替换为增强字节码,包括:
在JAVA程序构建过程中,通过Ant插件或Maven插件将第一字节码替换为增强字节码。
或,
在JAVA程序运行过程中,使用java.lang.instrument包将第一字节码替换为增强字节码。
可选地,代码调试功能包括日志打印功能和断点调试功能中的至少一种。
可选地,在第一字节码中指定位置添加第二字节码,得到增强字节码,包括:
使用预定字节码操纵框架,在第一字节码的指定位置添加第二字节码,预定字节码操纵框架包括ASM框架、Cglib框架、BCEL框架、JBET框架和Javassist框架中的至少一种。
根据本发明实施例的第二方面,提供一种代码运行装置,所述装置包括:
编译模块,用于获取第三方组件的源代码对应的第一字节码;
添加模块,用于在第一字节码中指定位置添加第二字节码,得到增强字节码,该第二字节码根据自定义类的源代码编译得到,该自定义类用于实现代码调试功能;
运行模块,用于使用JVM加载并运行该增强字节码。
可选地,该装置,包括:
替换模块,用于将第一字节码替换为增强字节码。
可选地,替换模块,包括:
第一替换单元,用于在JAVA程序构建过程中,通过Ant插件或Maven插件将第一字节码替换为增强字节码。
或,
第二替换单元,用于在JAVA程序运行过程中,使用java.lang.instrument包将第一字节码替换为增强字节码。
可选地,代码调试功能包括日志打印功能和断点调试功能中的至少一种。
可选地,添加模块,用于:
使用预定字节码操纵框架,在第一字节码的指定位置添加第二字节码,预定字节码操纵框架包括ASM框架、Cglib框架、BCEL框架、JBET框架和Javassist框架中的至少一种。
通过在使用JVM运行第三方组件之前,获取第三方组件的源代码对应的字节码,并将用于实现代码调试功能的自定义类的字节码添加到该第三方组件对应的字节码中,使得第三方组件具备代码调试功能;解决了开发人员在没有第三方组件源代码修改权限的情况下,无法通过在第三方组件中添加打印日志代码来实现日志打印功能的问题;达到了在不对第三方组件源代码进行修改的前提下,为第三方组件增加代码调试功能的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本发明一个实施例提供的代码运行方法的方法流程图;
图2A示出了本发明另一个实施例提供的代码运行方法的方法流程图;
图2B示出了本发明再一个实施例提供的代码运行方法的方法流程图;
图3示出了本发明一个实施例提供的代码运行装置的结构方框图;
图4示出了本发明另一个实施例提供的代码运行装置的结构方框图;
图5示出了本发明一个实施例提供的代码运行装置的框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
为了方便理解,下面对本发明实施例中涉及的名词进行解释。
源代码:指人类可读的计算机语言指令,通常按照一定的程序设计语言规范编写。常见的源代码包含JAVA源代码、C语言源代码和C++语言源代码等等。
字节码:一种执行程序,由一系列二进制代码组成,可以由编译器对源代码进行编译后得到,并能够被计算机读取识别。
编译器:用于将源代码转换为计算机可读代码的程序。以JAVA编译器为例,JAVA编译器即为一种将JAVA源代码转换为JAVA字节码的程序。
JVM:即JAVA虚拟机,一种虚拟出来的计算机,能够模拟出JAVA程序所实现的各种功能。JVM通过加载执行源代码对应的字节码来实现源代码的功能。
JAVA程序开发过程中,编写好的JAVA程序的源代码经过JAVA编译程序编译后,生成对应的字节码,JVM通过加载并运行该字节码即实现运行该JAVA程序。本发明各个实施例提供的代码运行方法即应用于“JAVA编译程序编译JAVA源代码之后,JVM加载并运行字节码之前”这一阶段,从而在不修改源代码的前提下,实现增加代码调试功能的效果。
本发明各个实施例提供的代码运行方法用于配置有代码编译及运行环境的电子设备中,比如,该电子设备可以是个人计算机。
为了简化描述,下文中仅以代码运行方法由计算机执行来举例说明,但对此不构成限定。
程序开发过程中,为了节约开发时间,简化开发过程,对于一些比较常用的功能,开发人员通常通过添加第三方组件的形式来实现,这些第三方组件通常具有一定的修改权限,当开发人员没有修改权限时,将无法对第三方组件的源代码进行修改。
为了方便发现代码中存在的缺陷并进行弥补,开发人员在编写代码的过程中,通过会在代码中设置一些日志打印点,并在该日志打印点出添加日志打印功能对应的源代码。比如,对于一些需要返回输出值的代码段,开发人员会在该代码段后添加日志打印方法,当程序运行至该日志打印方法时,即自动打印输出值。通过该日志打印方法,开发人员能够及时定位代码中的故障位置方便对其进行修正。
但是对于第三方组件来说,由于第三方组件的源代码设置有修改权限,开发人员无法直接在其源代码中设置日打印点,并添加相应的日志打印功能,导致第三方组件中发生故障时(比如输入第三方组件的非法参数导致第三方组件输出错误),开发人员无法通过日志进行故障定位。
请参考图1,其示出了本发明一个实施例提供的代码运行方法的方法流程图。该方法包括:
步骤101,获取第三方组件的源代码对应的第一字节码。
开发人员通过第三方组件实现某些功能时,一般采用库引用的方式引入第三方组件对应的jar包文件,该jar包文件中即包含第三方组件的源代码对应的字节码。
步骤103,在第一字节码中指定位置添加第二字节码,得到增强字节码,第二字节码根据自定义类的源代码编译得到,该自定义类用于实现代码调试功能。
开发人员预先编写用于实现代码调试功能的自定义类,使用编译器将该自定义类转换为第二字节码,并将该第二字节码添加到第一字节码中。由于此操作无需对第三方组件的源代码进行修改,因此,即使在没有第三方组件源代码修改权限的情况下,开发人员也能动态的在第三方组件中实现代码调试功能。
步骤105,使用JVM加载并运行该增强字节码。
计算机通过JVM加载增强字节码,并运行,即能够在第三方组件中实现代码调试功能。
综上所述,本实施例提供的代码运行方法,通过在使用JVM运行第三方组件之前,获取第三方组件的源代码对应的字节码,并将用于实现代码调试功能的自定义类的字节码添加到该第三方组件对应的字节码中,使得第三方组件具备代码调试功能;解决了开发人员在没有第三方组件源代码修改权限的情况下,无法通过在第三方组件中添加打印日志代码来实现日志打印功能的问题;达到了在不对第三方组件源代码进行修改的前提下,为第三方组件增加代码调试功能的效果。
请参考图2A,其示出了本发明另一个实施例提供的代码运行方法的方法流程图。该方法包括:
步骤201,对第三方组件的源代码进行编译,得到第三方组件对应的第一字节码。
开发人员通过第三方组件实现某些功能时,一般采用库引用的方式引入第三方组件对应的jar包文件,该jar包文件中即包含第三方组件的源代码对应的字节码。
步骤202,在第一字节码中指定位置添加第二字节码,得到增强字节码,第二字节码根据自定义类的源代码编译得到,该自定义类用于实现代码调试功能。
开发人员根据需要实现的代码测试功能,预先创建至少一个自定义类,并在该自定义类的类对象中定义并实现代码测试功能。比如,开发人员可以创建一个实现日志打印功能的自定义类,或创建一个实现断点调试功能的自定义类,本发明并不对代码调试所实现的功能进行限定。
与上述步骤201相似的,对于开发人员创建的自定义类,计算机通过编译器将该自定义类对应的源代码转换为第二字节码。
得到自定义类对应的第二字节码后,计算机即将该第二字节码添加到第一字节码的指定位置,从而得到功能增强后的第一字节码(即增强字节码)。其中,该指定位置指第三方组件对应方法中需要添加代码调试功能的位置,比如,该指定位置可以为第三方组件对应方法执行前或执行后。
作为一种可能的实施方式,计算机可以使用字节码操纵框架,将第二字节码插入到第一字节码的指定位置,其中该字节码操纵框架可以为ASM框架、Cglib框架、BCEL框架、JBET框架和Javassist框架中的至少一种,本发明实施例并不对计算机使用何种字节码操纵框架进行限定。
由于第三方组件的字节码没有修改权限,因此,通过字节码操纵技术,很容易在第三方组件中添加代码调试功能。开发人员可以根据实际需求,通过计算机实现代码调试功能的添加或删除,且无需对第三方组件的源代码进行任何修改,避免了对第三方组件造成的代码污染。
步骤203,将第一字节码替换为增强字节码。
经过上述步骤201和步骤202,计算机即可得到增强字节码。为了进一步实现增强字节码相应的功能(第三方组件原有功能以及添加的代码调试功能),计算机在使用JVM加载运行第三方组件对应第一字节码前,需要将第三方组件对应的第一字节码替换为该增强字节码。
如图2B所示,本步骤可以包括如下两种可能的实方式。
步骤203A,在JAVA程序构建过程中,通过Ant插件或Maven插件将第一字节码替换为增强字节码。
在构建JAVA程序过程中,计算机可以利用项目构建管理插件将第三方组件对应的第一字节码替换为增强字节码。比如,该项目构建管理插件可以为Ant插件或Maven插件等等,本发明并不对该项目构建管理插件的具体类型进行限定。
步骤203B,在JAVA程序运行过程中,使用java.lang.instrument包将第一字节码替换为增强字节码。
上述步骤203A提供的替换增强字节码的方法,应用于JAV程序构建阶段,即在JVM启动前即完成增强字节码的替换。在另一种可能的实施方式中,计算机也可以在JAVA程序运行过程中,使用java.lang.instrument包动态地将第一字节码替换为增强字节码。Java程序运行时会指定相应参数(javaagent),在JVM启动的时候添加一些代理(agent)。每个代理都是一个jar包,其清单(manifest)文件中会指定一个代理类,且该代理类会包含一个premain方法。JVM启动时,会首先执行该代理类中的premain方法,再执行Java程序本身的main方法,而在该premain方法中即可实现对增强字节码的替换。
需要说明的是,本实施例仅以上述两种可能的增强字节码方法为例进行示意性说明,计算机还可以在“JAVA编译程序编译JAVA源代码之后,JVM加载并运行字节码之前”这一阶段通过其他可能的方式完成增强字节码的替换,本实施例并不对此进行限定。
步骤204,使用JVM加载并运行该增强字节码。
完成增强字节码替换后,计算机即通过JVM加载并运行增强字节码,在实现第三方组件功能的同时,实现了代码调试功能。
综上所述,本实施例提供的代码运行方法,通过在使用JVM运行第三方组件之前,获取第三方组件的源代码对应的字节码,并将用于实现代码调试功能的自定义类的字节码添加到该第三方组件对应的字节码中,使得第三方组件具备代码调试功能;解决了开发人员在没有第三方组件源代码修改权限的情况下,无法通过在第三方组件中添加打印日志代码来实现日志打印功能的问题;达到了在不对第三方组件源代码进行修改的前提下,为第三方组件增加代码调试功能的效果。
本实施例中,通过使用Ant插件或Maven插件,在程序构建阶段即实现增强字节码的替换,或,通过引用java.lang.instrument包,在程序运行阶段实现增强字节码的动态替换,方便JVM直接加载并运行增强字节码,从而在第三方组件中实现代码调试功能。
请参考图3,其示出了本发明一个实施例提供的代码运行装置的结构方框图。该代码运行装置可以通过软件、硬件或者两者的结合实现成为配置有代码编译及运行环境的电子设备的全部或者一部分。该代码运行装置,包括:
编译模块310,用于获取第三方组件的源代码对应的第一字节码。
添加模块320,用于在第一字节码中指定位置添加第二字节码,得到增强字节码,第二字节码根据自定义类的源代码编译得到,自定义类用于实现代码调试功能。
运行模块330,用于使用JVM加载并运行增强字节码。
综上所述,本实施例提供的代码运行装置,通过在使用JVM运行第三方组件之前,获取第三方组件的源代码对应的字节码,并将用于实现代码调试功能的自定义类的字节码添加到该第三方组件对应的字节码中,使得第三方组件具备代码调试功能;解决了开发人员在没有第三方组件源代码修改权限的情况下,无法通过在第三方组件中添加打印日志代码来实现日志打印功能的问题;达到了在不对第三方组件源代码进行修改的前提下,为第三方组件增加代码调试功能的效果。
请参考图4,其示出了本发明另一个实施例提供的代码运行装置的结构方框图。该代码运行装置可以通过软件、硬件或者两者的结合实现成为配置有代码编译及运行环境的电子设备的全部或者一部分。该代码运行装置,包括:
编译模块410,用于获取第三方组件的源代码对应的第一字节码。
添加模块420,用于在第一字节码中指定位置添加第二字节码,得到增强字节码,第二字节码根据自定义类的源代码编译得到,自定义类用于实现代码调试功能。
运行模块430,用于使用JVM加载并运行增强字节码。
可选地,该装置,包括:
替换模块440,用于将第一字节码替换为增强字节码。
可选地,替换模块440,包括:
第一替换单元441,用于在JAVA程序构建过程中,通过Ant插件或Maven插件将第一字节码替换为增强字节码。
或,
第二替换单元442,用于在JAVA程序运行过程中,使用java.lang.instrument包将第一字节码替换为增强字节码。
可选地,代码调试功能包括日志打印功能和断点调试功能中的至少一种
可选地,添加模块420,具体用于:
使用预定字节码操纵框架,在第一字节码的指定位置添加第二字节码,预定字节码操纵框架包括ASM框架、Cglib框架、BCEL框架、JBET框架和Javassist框架中的至少一种。
综上所述,本实施例提供的代码运行装置,通过在使用JVM运行第三方组件之前,获取第三方组件的源代码对应的字节码,并将用于实现代码调试功能的自定义类的字节码添加到该第三方组件对应的字节码中,使得第三方组件具备代码调试功能;解决了开发人员在没有第三方组件源代码修改权限的情况下,无法通过在第三方组件中添加打印日志代码来实现日志打印功能的问题;达到了在不对第三方组件源代码进行修改的前提下,为第三方组件增加代码调试功能的效果。
本实施例中,通过使用Ant插件或Maven插件,在程序构建阶段即实现增强字节码的替换,或,通过引用java.lang.instrument包,在程序运行阶段实现增强字节码的动态替换,方便JVM直接加载并运行增强字节码,从而在第三方组件中实现代码调试功能。
需要说明的是:上述实施例提供的代码运行装置在运行代码时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将配置有代码编译及运行环境的电子设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的代码运行装置与代码运行方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图5示出了本发明一个实施例提供的代码运行装置的框图。该代码运行装置500可以是配置有代码编译及运行环境的计算机。具体来讲:
装置500包括中央处理单元(CPU)501、包括随机存取存储器(RAM)502和只读存储器(ROM)503的系统存储器504,以及连接系统存储器504和中央处理单元501的系统总线505。装置500还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)506,和用于存储操作系统513、应用程序514和其他程序模块515的大容量存储设备507。
基本输入/输出系统506包括有用于显示信息的显示器508和用于用户输入信息的诸如鼠标、键盘之类的输入设备509。其中显示器508和输入设备509都通过连接到系统总线505的输入输出控制器510连接到中央处理单元501。基本输入/输出系统506还可以包括输入输出控制器510以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器510还提供输出到显示屏、打印机或其他类型的输出设备。
大容量存储设备507通过连接到系统总线505的大容量存储控制器(未示出)连接到中央处理单元501。大容量存储设备507及其相关联的计算机可读介质为装置500提供非易失性存储。也就是说,大容量存储设备507可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知计算机存储介质不局限于上述几种。上述的系统存储器504和大容量存储设备507可以统称为存储器。
根据本发明的各种实施例,装置500还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即装置500可以通过连接在系统总线505上的网络接口单元511连接到网络512,或者说,也可以使用网络接口单元511来连接到其他类型的网络或远程计算机系统(未示出)。
上述存储器还包括一个或者一个以上的程序,一个或者一个以上程序存储于存储器中,被配置由CPU执行。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种代码运行方法,其特征在于,所述方法包括:
获取第三方组件的源代码对应的第一字节码;
在所述第一字节码中指定位置添加第二字节码,得到增强字节码,所述第二字节码根据自定义类的源代码编译得到,所述自定义类用于实现代码调试功能;
使用JAVA虚拟机JVM加载并运行所述增强字节码。
2.根据权利要求1所述的方法,其特征在于,所述使用JVM加载并运行所述增强字节码之前,包括:
将所述第一字节码替换为所述增强字节码。
3.根据权利要求2所述的方法,其特征在于,所述将所述第一字节码替换为所述增强字节码,包括:
在JAVA程序构建过程中,通过蚂蚁Ant插件或专家Maven插件将所述第一字节码替换为所述增强字节码;
或,
在JAVA程序运行过程中,使用java.lang.instrument包将所述第一字节码替换为所述增强字节码。
4.根据权利要求1至3任一所述的方法,其特征在于,
所述代码调试功能包括日志打印功能和断点调试功能中的至少一种。
5.根据权利要求1至3任一所述的方法,其特征在于,所述在所述第一字节码中指定位置添加第二字节码,得到增强字节码,包括:
使用预定字节码操纵框架,在所述第一字节码的指定位置添加所述第二字节码,所述预定字节码操纵框架包括ASM框架、Cglib框架、BCEL框架、JBET框架和Javassist框架中的至少一种。
6.一种代码运行装置,其特征在于,所述装置包括:
编译模块,用于获取第三方组件的源代码对应的第一字节码;
添加模块,用于在所述第一字节码中指定位置添加第二字节码,得到增强字节码,所述第二字节码根据自定义类的源代码编译得到,所述自定义类用于实现代码调试功能;
运行模块,用于使用JAVA虚拟机JVM加载并运行所述增强字节码。
7.根据权利要求6所述的装置,其特征在于,所述装置,包括:
替换模块,用于将所述第一字节码替换为所述增强字节码。
8.根据权利要求7所述的装置,其特征在于,所述替换模块,包括:
第一替换单元,用于在JAVA程序构建过程中,通过Ant插件或Maven插件将所述第一字节码替换为所述增强字节码;
或,
第二替换单元,用于在JAVA程序运行过程中,使用java.lang.instrument包将所述第一字节码替换为所述增强字节码。
9.根据权利要求6至8任一所述的装置,其特征在于,
所述代码调试功能包括日志打印功能和断点调试功能中的至少一种。
10.根据权利要求6至8任一所述的装置,其特征在于,所述添加模块,用于:
使用预定字节码操纵框架,在所述第一字节码的指定位置添加所述第二字节码,所述预定字节码操纵框架包括ASM框架、Cglib框架、BCEL框架、JBET框架和Javassist框架中的至少一种。
CN201610188994.3A 2016-03-29 2016-03-29 代码运行方法及装置 Active CN105808266B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610188994.3A CN105808266B (zh) 2016-03-29 2016-03-29 代码运行方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610188994.3A CN105808266B (zh) 2016-03-29 2016-03-29 代码运行方法及装置

Publications (2)

Publication Number Publication Date
CN105808266A CN105808266A (zh) 2016-07-27
CN105808266B true CN105808266B (zh) 2019-09-10

Family

ID=56455043

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610188994.3A Active CN105808266B (zh) 2016-03-29 2016-03-29 代码运行方法及装置

Country Status (1)

Country Link
CN (1) CN105808266B (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106445505A (zh) * 2016-08-31 2017-02-22 恒生电子股份有限公司 一种代码处理方法及装置
CN108228147B (zh) * 2016-12-15 2021-09-21 中国移动通信集团公司 一种性能数据日志获取方法及装置
CN108304195B (zh) * 2017-09-08 2021-04-27 武汉斗鱼网络科技有限公司 一种aop组件的实现方法、装置及电子设备
CN109471768B (zh) * 2017-09-08 2023-04-18 阿里巴巴集团控股有限公司 业务问题的监控方法、装置以及电子设备
CN110262841A (zh) * 2018-03-07 2019-09-20 北京京东尚科信息技术有限公司 一种对字节码进行增强的方法和装置
CN109508249B (zh) * 2018-11-15 2022-05-31 厦门美图之家科技有限公司 崩溃处理方法、装置及电子设备
CN109739824B (zh) * 2018-12-28 2021-05-04 斑马网络技术有限公司 日志获取方法及设备
CN111427738B (zh) * 2019-01-09 2024-04-05 阿里巴巴集团控股有限公司 展示方法、应用监控模块、字节码增强模块及展示系统
CN109885486A (zh) * 2019-01-23 2019-06-14 鑫涌算力信息科技(上海)有限公司 系统调试装置及方法
CN111782521B (zh) * 2020-06-29 2023-08-25 中国工商银行股份有限公司 一种打印自动化测试方法及装置
CN111930472B (zh) * 2020-08-19 2023-03-28 曙光信息产业(北京)有限公司 一种代码调试方法、装置、电子设备及存储介质
CN112445706A (zh) * 2020-11-27 2021-03-05 深圳前海微众银行股份有限公司 程序异常代码获取方法、装置、电子设备以及存储介质
CN113377674B (zh) * 2021-07-02 2024-03-08 北京奇艺世纪科技有限公司 一种日志代码添加方法及装置
CN115629992B (zh) * 2022-12-16 2023-04-07 云筑信息科技(成都)有限公司 一种对使用Spring技术栈构建的应用系统进行调试的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000000890A1 (de) * 1998-06-26 2000-01-06 Deutsche Telekom Ag Verfahren zur prüfung von java-bytecode-programmen auf sicherheitseigenschaften
KR20060000194A (ko) * 2004-06-28 2006-01-06 정민수 자바가상기계 성능 개선을 위한 전처리기 기술
CN101882190A (zh) * 2010-06-25 2010-11-10 清华大学 字节码中间表示程序的分模块形式化验证方法
CN104346148A (zh) * 2013-07-30 2015-02-11 阿里巴巴集团控股有限公司 获取程序性能消耗信息的方法、装置及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000000890A1 (de) * 1998-06-26 2000-01-06 Deutsche Telekom Ag Verfahren zur prüfung von java-bytecode-programmen auf sicherheitseigenschaften
KR20060000194A (ko) * 2004-06-28 2006-01-06 정민수 자바가상기계 성능 개선을 위한 전처리기 기술
CN101882190A (zh) * 2010-06-25 2010-11-10 清华大学 字节码中间表示程序的分模块形式化验证方法
CN104346148A (zh) * 2013-07-30 2015-02-11 阿里巴巴集团控股有限公司 获取程序性能消耗信息的方法、装置及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Java字节码增强;GavinCee;《http://blog.sina.com.cn/s/blog_790c59140102w7y3.html》;20151227;全文

Also Published As

Publication number Publication date
CN105808266A (zh) 2016-07-27

Similar Documents

Publication Publication Date Title
CN105808266B (zh) 代码运行方法及装置
Zhao et al. Formalizing the LLVM intermediate representation for verified program transformations
US7380242B2 (en) Compiler and software product for compiling intermediate language bytecodes into Java bytecodes
Wang et al. Formal specification and verification of smart contracts for azure blockchain
CN105164641A (zh) 扩展开发环境
Yu et al. Building certified libraries for PCC: Dynamic storage allocation
CN101379504B (zh) 用于复合应用的基于角色的访问控制管理的方法及系统
Chlipala From network interface to multithreaded web applications: A case study in modular program verification
Sewell et al. High-assurance timing analysis for a high-assurance real-time operating system
CN103440457A (zh) 基于进程模拟的二进制程序分析系统
Hasabnis et al. Extracting instruction semantics via symbolic execution of code generators
Arroyo et al. An user configurable clang static analyzer taint checker
Phung et al. P4SINC-an execution policy framework for IoT services in the edge
US20110209004A1 (en) Integrating templates into tests
CN113312046A (zh) 子应用页面处理方法、装置和计算机设备
Hansen et al. HAZOP analysis of UML-based software architecture descriptions of safety-critical systems
JP2009525509A (ja) 制御フロー保護機構
Blanchard et al. Logic against ghosts: comparison of two proof approaches for a list module
Butkevich et al. Compiler and tool support for debugging object protocols
CN115022312A (zh) 多智能合约引擎的实现方法、装置、电子设备及存储介质
Peterson et al. P4Cub: A Little Language for Big Routers
Ratiu et al. An integrated environment for Spin-based C code checking: Towards bringing model-driven code checking closer to practitioners
Pracner et al. Enabling code transformations with FermaT on simplified bytecode
Burtsev et al. Isolation in Rust: What is Missing?
CN103164325B (zh) 一种控制编码的方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20160727

Assignee: GUANGZHOU CUBESILI INFORMATION TECHNOLOGY Co.,Ltd.

Assignor: GUANGZHOU HUADUO NETWORK TECHNOLOGY Co.,Ltd.

Contract record no.: X2021980000101

Denomination of invention: Code running method and device

Granted publication date: 20190910

License type: Common License

Record date: 20210106

EE01 Entry into force of recordation of patent licensing contract