CN115981611A - 使用生成记录的代码插入的软件对象识别 - Google Patents
使用生成记录的代码插入的软件对象识别 Download PDFInfo
- Publication number
- CN115981611A CN115981611A CN202211263820.0A CN202211263820A CN115981611A CN 115981611 A CN115981611 A CN 115981611A CN 202211263820 A CN202211263820 A CN 202211263820A CN 115981611 A CN115981611 A CN 115981611A
- Authority
- CN
- China
- Prior art keywords
- computer
- code
- execution
- existing
- 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.)
- Pending
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
- 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/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- 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/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及使用生成记录的代码插入的软件对象识别。使用代码转换工具将可执行代码的一部分插入到现有可执行代码中,现有可执行代码包括类的现有构造器,现有构造器在被执行时实例化类的对象。在现有构造器的执行期间,使得执行该部分,该执行生成记录,该记录包括对象的执行跟踪数据。
Description
技术领域
本发明总体上涉及一种用于软件对象识别的方法、系统和计算机程序产品。更具体地,本发明涉及一种用于使用生成记录的代码插入的软件对象执行识别的方法、系统和计算机程序产品。
背景技术
在面向对象的编程语言(如Java)中,类是用于创建一个或多个软件对象或简单地创建对象的模板或蓝图。(Java是Oracle公司在美国和其他国家/地区的注册商标。)由此,对象是类的实例。类包括一个或多个构造器。构造器是实例化类的对象的方法或函数。类通常包括多于一个的构造器,其中每个构造器实例化该类的不同对象。例如,类可以包括适应不同数量和类型的调用参数的构造器。
当从系统的内存池或堆中分配内存、但是在不再需要时没有释放内存时,发生内存泄漏。因为系统的内存池不是无限的,所以当操作系统或语言运行时环境执行时,内存泄漏导致内存池随时间耗尽,当进程不再能够分配它们运行所需的内存时,这可能导致执行速度变慢和错误。为了防止内存泄漏相关的内存耗尽,操作系统或语言运行时通常包括称为垃圾收集器的软件,其尝试回收不再被引用的所分配的内存。然而,垃圾收集经常被配置为以比其他正在执行的应用低的优先级执行,并且在具有太多内存泄漏的繁忙系统中,垃圾收集器可能无法跟上,从而导致速度变慢和错误。
调用栈是存储关于计算机程序的活动方法、函数或子例程的信息的数据结构。调用栈记录每个活动方法在该方法结束执行时应当将控制返回到的地址。调用栈通常还存储与方法执行相关的数据,诸如方法的调用和返回参数。由此,调用栈是包括一组方法的执行跟踪数据的记录的示例。
发明内容
说明性实施例提供了一种方法、系统和计算机程序产品。一个实施例包括一种方法,该方法使用代码转换工具将可执行代码的一部分插入到现有可执行代码中,所述现有可执行代码包括类的现有构造器,所述现有构造器在被执行时实例化所述类的对象。一个实施例在所述现有构造器的执行期间,使得执行所述部分,所述执行生成记录,所述记录包括所述对象的执行跟踪数据。
一个实施例包括一种计算机可用程序产品。所述计算机可用程序产品包括一个或多个计算机可读存储设备以及存储在所述一个或多个存储设备中的至少一个存储设备上的程序指令。
一个实施例包括一种计算机系统。所述计算机系统包括:一个或多个处理器;一个或多个计算机可读存储器;一个或多个计算机可读存储设备;以及程序指令,所述程序指令存储在所述一个或多个存储设备中的至少一个存储设备上以用于由所述一个或多个处理器中的至少一个处理器经由所述一个或多个存储器中的至少一个存储器执行。
附图说明
在所附权利要求书中阐述了被认为是本发明特征的某些新颖特征。然而,当结合附图阅读时,通过参考说明性实施例的以下详细描述,将最好地理解本发明本身及其优选使用模式、进一步目的和优点,其中:
图1描绘了其中可以实现说明性实施例的数据处理系统网络的框图;
图2描绘了其中可以实现说明性实施例的数据处理系统的框图;
图3描绘了根据说明性实施例的用于使用生成记录的代码插入的软件对象执行识别的示例配置的框图;
图4描绘了根据说明性实施例的使用生成记录的代码插入的软件对象执行识别的示例;
图5描绘了根据说明性实施例的使用生成记录的代码插入的软件对象执行识别的继续示例;
图6描绘了根据说明性实施例的用于使用生成记录的代码插入的软件对象执行识别的示例过程的流程图;
图7描绘了根据本发明的实施例的云计算环境;以及
图8描绘了根据本发明的实施例的抽象模型层。
具体实施方式
说明性实施例认识到,解决内存泄漏的一种方法是确定哪个方法在哪个执行线程中将内存分配给对象并且没有释放所分配的内存。然而,某些类由许多组件和服务所使用。结果,尽管一种内存分析工具能够列出已被标记为准备好用于在正在执行的操作系统或运行时环境内的垃圾收集的对象,但调用该列表中的对象的代码可能在数百个调用栈之一中。分析人员将需要检查每个调用栈以确定特定内存泄漏的源。此外,分配对象的线程可能已经完成执行并且使它的调用栈被移除,从而使得特定内存泄露的源是不可追踪的。另一软件分析工具监视现有应用代码的执行并且在对象被实例化时记录调用栈数据。然而,监视执行以及生成和存储跟踪数据产生不可接受的性能影响。此外,所产生的数据包括包含该对象的所有调用栈,并且分析人员将需要检查每个调用栈以帮助确定泄露源。除了调用栈之外,执行记录也遭受相同的问题。
说明性实施例还认识到,解决内存泄漏的另一种方法是将附加的源代码插入到应用的可疑的类或执行路径中,以生成用于跟踪执行路径的输出。然而,分析人员不太可能访问应用的源代码,并且即使应用的源代码可用,分析人员也不太可能对应用足够熟悉以将附加的源代码插入到提供有用结果的位置中。
因此,说明性实施例认识到,存在以下未被满足的需要:具体地,通过识别未被正确释放的特定已分配对象的执行记录(诸如调用栈),改进内存泄漏识别,而无需人类访问源代码。
说明性实施例认识到,目前可用的工具或解决方案没有解决这些需求或没有为这些需求提供充分的解决方案。用于描述本发明的说明性实施例通常应对并解决了与使用生成记录的代码插入的软件对象执行识别相关的上述问题和其他问题。
实施例可以被实现为软件应用。实现实施例的应用可被配置为现有软件分析系统的修改、结合现有软件分析系统操作的单独应用、独立应用或它们的某种组合。
具体地,一些说明性实施例提供了一种方法,该方法使用代码转换工具将可执行代码的一部分插入到现有可执行代码中并且在现有构造器的执行期间引起该部分的执行。
一个实施例使用代码转换工具将可执行代码的一部分插入到现有可执行代码中。当前可用的代码转换工具的一个非限制性实例是在Java的一些版本中实现的ClassFileTransformer接口,运行时代理可以使用该接口将现有的Java代码转换成不同的Java代码。由此,被实现为分析Java代码的一个实施例向代理提供一个或多个要修改的类的列表和要插入到类中的代码,并且代理使用ClassFileTransformer接口将所提供的代码插入到所列出的类中。其他代码转换工具可用于其他软件语言。例如,其他软件语言的一些实现方式支持面向方面的编程,这是一种支持向现有代码添加附加行为而不修改代码本身的编程技术。相反,规范指定要修改哪个代码和修改是什么。
在一个实施例中,现有可执行代码是构造器,其是实例化类的对象的方法。在另一实施例中,现有代码不是构造器,而是在对象执行期间被执行的代码。然而,在对象执行期间执行附加的、插入的代码可能对现有代码或使用该代码的正在执行的应用具有性能影响,而将附加的代码插入到构造器中不太可能影响性能。在一个实施例中,所执行代码的所插入部分是在被调用时生成实例化对象的执行跟踪数据的记录的方法。在一个实施例中,该方法是不能从类及其对象外部调用的私有方法。在一个实施例中,记录是私有的数据结构,因此在类及其对象外部不可访问。在一个实施例中,记录包括在对象被实例化时的当前调用栈。在另一实施例中,记录包括当前调用栈和包括附加数据的异常对象两者。其他记录(包括对象的其他数据或对象的执行环境)也是可能的并且在说明性实施例的范围内被考虑。此外,所插入的代码不需要在方法内。
一旦该部分已经被插入,则在该部分被插入其中的代码被执行时,一个实施例使得执行被插入的部分。由此,如果该部分被插入到构造器中,则当构造器被执行以实例化对象时,该部分被执行。如果该部分被插入到非构造器代码中,则在非构造器代码被执行时,该部分被执行。
一旦插入部分已被执行并且生成了执行跟踪数据,用户可以使用内存分析器或其他工具来检查所生成的跟踪数据。例如,工具当前可用于检查所记录的调用栈的内容并确定对应于每个地址的对象。结果是包括调用了内存泄漏对象的对象的经解码调用栈,从而促进对内存泄漏的调试。
在涉及软件执行分析的工作的技术领域中当前可用的方法中,没有提供本文描述的使用生成记录的代码插入的软件对象执行识别的方式。本文描述的实施例的方法(当被实现为在设备或数据处理系统上执行时)包括在使用代码转换工具将可执行代码的一部分插入到现有可执行代码中并在该现有构造器的执行期间引起该部分的执行时该设备或数据处理系统的功能的实质性进步。
仅作为示例,相对于特定类型的类、对象、运行时代理、工具、可执行代码部分、测量、设备、数据处理系统、环境、组件和应用来描述说明性实施例。这些和其他类似产物的任何特定表现不旨在限制本发明。在说明性实施例的范围内,可以选择这些和其他类似产物的任何合适的表现。
此外,可以相对于任何类型的数据、数据源或通过数据网络对数据源的访问来实现说明性实施例。在本发明的范围内,任何类型的数据存储设备可以在数据处理系统本地或通过数据网络将数据提供给本发明的实施例。在说明性实施例的范围内,在使用移动设备描述实施例的情况下,适于与移动设备一起使用的任何类型的数据存储设备可在移动设备本地或通过数据网络将数据提供给此类实施例。
仅使用特定代码、设计、架构、协议、布局、示意图以及工具作为实例来描述说明性实施例,并且不限于说明性实施例。此外,为了描述的清楚,在一些情况下仅作为实例而使用特定软件、工具和数据处理环境来描述说明性实施例。说明性实施例可以结合其他可比较的或相似用途的结构、系统、应用或架构而使用。例如,在本发明的范围内,其他可比较的移动设备、结构、系统、应用或架构可以与本发明的这种实施例结合使用。说明性实施例可以以硬件、软件或它们的组合来实现。
本公开中的示例仅用于描述的清晰,并且不限于说明性实施例。附加的数据、操作、动作、任务、活动和操纵将从本公开想到,并且在说明性实施例的范围内设想相同的数据、操作、动作、任务、活动和操纵。
本文列出的任何优点仅是实例并且不旨在限于说明性实施例。通过特定的说明性实施例可以实现另外的或不同的优点。此外,特定说明性实施例可具有上文所列的优点中的一些优点、全部优点或没有上述优点。
将理解,尽管本公开包括有关云计算的详细描述,但是本文叙述的教导的实现不限于云计算环境。相反,本发明的实施例能够结合现在已知或以后开发的任何其它类型的计算环境来实现。
云计算是一种服务交付模式,用于对共享的可配置计算资源池进行方便、按需的网络访问。可配置计算资源是能够以最小的管理成本或与服务提供者进行最少的交互就能快速部署和释放的资源,例如可以是网络、网络带宽、服务器、处理、内存、存储、应用、虚拟机和服务。这种云模式可以包括至少五个特征、至少三个服务模型和至少四个部署模型。
特征如下:
按需自助式服务:云的消费者在无需与服务提供者进行人为交互的情况下能够单方面自动地按需部署诸如服务器时间和网络存储等的计算能力。
广泛的网络接入:计算能力可以通过标准机制在网络上获取,这种标准机制促进了通过不同种类的瘦客户机平台或厚客户机平台(例如移动电话、膝上型电脑、个人数字助理PDA)对云的使用。
资源池:提供者的计算资源被归入资源池并通过多租户(multi-tenant)模式服务于多重消费者,其中按需将不同的实体资源和虚拟资源动态地分配和再分配。一般情况下,消费者不能控制或甚至并不知晓所提供的资源的确切位置,但可以在较高抽象程度上指定位置(例如国家、州或数据中心),因此具有位置无关性。
迅速弹性:能够迅速、有弹性地(有时是自动地)部署计算能力,以实现快速扩展,并且能迅速释放来快速缩小。在消费者看来,用于部署的可用计算能力往往显得是无限的,并能在任意时候都能获取任意数量的计算能力。
可测量的服务:云系统通过利用适于服务类型(例如存储、处理、带宽和活跃用户帐号)的某种抽象程度的计量能力,自动地控制和优化资源效用。可以监测、控制和报告资源使用情况,为服务提供者和消费者双方提供透明度。
服务模型如下:
软件即服务(SaaS):向消费者提供的能力是使用提供者在云基础架构上运行的应用。可以通过诸如网络浏览器的瘦客户机接口(例如基于网络的电子邮件)从各种客户机设备访问应用。除了有限的特定于用户的应用配置设置外,消费者既不管理也不控制包括网络、服务器、操作系统、存储、乃至单个应用能力等的底层云基础架构。
平台即服务(PaaS):向消费者提供的能力是在云基础架构上部署消费者创建或获得的应用,这些应用利用提供者支持的程序设计语言和工具创建。消费者既不管理也不控制包括网络、服务器、操作系统或存储的底层云基础架构,但对其部署的应用具有控制权,对应用托管环境配置可能也具有控制权。
基础架构即服务(IaaS):向消费者提供的能力是消费者能够在其中部署并运行包括操作系统和应用的任意软件的处理、存储、网络和其他基础计算资源。消费者既不管理也不控制底层的云基础架构,但是对操作系统、存储和其部署的应用具有控制权,对选择的网络组件(例如主机防火墙)可能具有有限的控制权。
部署模型如下:
私有云:云基础架构单独为某个组织运行。云基础架构可以由该组织或第三方管理并且可以存在于该组织内部或外部。
共同体云:云基础架构被若干组织共享并支持有共同利害关系(例如任务使命、安全要求、政策和合规考虑)的特定共同体。共同体云可以由共同体内的多个组织或第三方管理并且可以存在于该共同体内部或外部。
公共云:云基础架构向公众或大型产业群提供并由出售云服务的组织拥有。
混合云:云基础架构由两个或更多部署模型的云(私有云、共同体云或公共云)组成,这些云依然是独特的实体,但是通过使数据和应用能够移植的标准化技术或私有技术(例如用于云之间的负载平衡的云突发流量分担技术)绑定在一起。
云计算环境是面向服务的,特点集中在无状态性、低耦接性、模块性和语意的互操作性。云计算的核心是包含互连节点网络的基础架构。
参考附图并且具体地参考图1和图2,这些图是其中可以实现说明性实施例的数据处理环境的示例图。图1和图2仅是示例,并不旨在断言或暗示关于其中可以实现不同实施例的环境的任何限制。特定实现方式可以基于以下描述对所描绘的环境做出许多修改。
图1描绘了其中可以实现说明性实施例的数据处理系统网络的框图。数据处理环境100是其中可以实现说明性实施例的计算机网络。数据处理环境100包括网络102。网络102是用于提供在数据处理环境100内连接在一起的不同设备和计算机之间的通信链路的介质。网络102可以包括诸如有线、无线通信链路或光缆之类的连接。
客户机或服务器仅是连接到网络102的特定数据处理系统的示例角色,并且不旨在排除这些数据处理系统的其他配置或角色。服务器104和服务器106与存储单元108一起耦接到网络102。软件应用可以在数据处理环境100中的任何计算机上执行。客户机110、112和114也耦接到网络102。数据处理系统(诸如服务器104或106或客户机110、112或114)可以包含数据并且可以具有在其上执行的软件应用或软件工具。
仅作为实例,并且不暗示对这种架构的任何限制,图1描绘了在实施例的实例实现方式中可用的特定组件。例如,服务器104和106以及客户机110、112、114仅作为示例被描绘为服务器和客户机,而不暗示对客户机-服务器架构的限制。作为另一个示例,实施例可以如所示那样跨多个数据处理系统和数据网络分布,而另一个实施例可以在说明性实施例的范围内在单个数据处理系统上实现。数据处理系统104、106、110、112和114还表示集群、分区和适于实现实施例的其他配置中的示例节点。
设备132是本文描述的设备的实例。例如,设备132可以采取智能电话、平板计算机、膝上型计算机、固定或便携式形式的客户机110、可穿戴计算设备或任何其他合适的设备的形式。被描述为在图1中的另一数据处理系统中执行的任何软件应用可被配置为以类似方式在设备132中执行。在图1中的另一个数据处理系统中存储或产生的任何数据或信息可以被配置为以类似的方式在设备132中存储或产生。
应用105实现本文描述的实施例。应用105在服务器104和106、客户机110、112和114以及设备132中的任一个中执行。
服务器104和106、存储单元108、客户机110、112和114、以及设备132可以使用有线连接、无线通信协议、或其他合适的数据连接来耦接至网络102。客户机110、112和114可以是例如个人计算机或网络计算机。
在所描绘的示例中,服务器104可以向客户机110、112和114提供数据,如引导文件、操作系统映像和应用。在该示例中,客户机110、112和114可以是服务器104的客户机。客户机110、112、114或其某种组合可以包括它们自己的数据、引导文件、操作系统映像和应用。数据处理环境100可以包括未示出的附加的服务器、客户机和其他设备。
在所描绘的示例中,数据处理环境100可以是因特网。网络102可以表示使用传输控制协议/网际协议(TCP/IP)和其它协议来彼此通信的网络和网关的集合。在因特网的核心是主节点或主机计算机之间的数据通信链路的主干,包括路由数据和消息的数千个商业、政府、教育和其它计算机系统。当然,数据处理环境100也可以被实现为许多不同类型的网络,例如内联网、局域网(LAN)或广域网(WAN)。图1旨在作为示例,而不是作为对不同说明性实施例的体系结构限制。
除了其他用途之外,数据处理环境100可以用于实现其中可以实现说明性实施例的客户机-服务器环境。客户机-服务器环境使得软件应用和数据能够分布在网络上,以便应用通过使用客户机数据处理系统与服务器数据处理系统之间的交互性来工作。数据处理环境100还可以采用面向服务的体系结构,其中分布在网络上的可互操作的软件组件可以被打包在一起作为一致的业务应用。数据处理环境100还可以采取云的形式,并且采用服务交付的云计算模型以实现对可配置计算资源(例如,网络、网络带宽、服务器、处理、存储器、存储、应用、虚拟机和服务)的共享池的方便的按需网络访问,这些可配置计算资源可以以最小的管理成本或与服务提供者进行最少的交互来被快速供应和释放。
参见图2,此图描绘了可以实现说明性实施例的数据处理系统的框图。数据处理系统200是计算机的示例,例如图1中的服务器104和106、或客户机110、112和114、或另一类型的设备(用于示例性实施例的实现处理的计算机可用程序代码或指令可以位于其中)。
数据处理系统200还代表数据处理系统或其中的配置,例如图1中的数据处理系统132,实现说明性实施例的处理的计算机可用程序代码或指令可以位于其中。数据处理系统200仅作为示例被描述为计算机并且不限于此。在不脱离在此描述的数据处理系统200的操作和功能的一般描述的情况下,以诸如图1中的设备132的其他设备的形式的实现可以诸如通过添加触摸接口来修改数据处理系统200,以及甚至从数据处理系统200中去除某些描绘的组件。
在所描绘的示例中,数据处理系统200采用集线器体系结构,包括北桥和存储器控制器集线器(NB/MCH)202以及南桥和输入/输出(I/O)控制器集线器(SB/ICH)204。处理单元206、主存储器208和图形处理器210耦接到北桥和存储器控制器集线器(NB/MCH)202。处理单元206可以包含一个或多个处理器,并且可以使用一个或多个异构处理器系统来实现。处理单元206可以是多核处理器。在特定实现中,图形处理器210可以通过加速图形端口(AGP)耦接到NB/MCH 202。
在所描绘的示例中,局域网(LAN)适配器212耦接到南桥和I/O控制器集线器(SB/ICH)204。音频适配器216、键盘和鼠标适配器220、调制解调器222、只读存储器(ROM)224、通用串行总线(USB)和其它端口232、以及PCI/PCIe设备234通过总线238耦接到南桥和I/O控制器集线器204。硬盘驱动器(HDD)或固态驱动器(SSD)226和CD-ROM 230通过总线240耦接到南桥和I/O控制器集线器204。PCI/PCIe设备234可以包括例如以太网适配器、附加卡和用于笔记本计算机的PC卡。PCI使用卡总线控制器,而PCIe不使用。ROM 224可以是例如闪存二进制输入输出系统(BIOS)。硬盘驱动器226和CD-ROM 230可使用例如集成驱动电子(IDE)、串行高级技术附件(SATA)接口或诸如外部SATA(eSATA)和微SATA(mSATA)的变体。超级I/O(SIO)设备236可以通过总线238耦接到南桥和I/O控制器集线器(SB/ICH)204。
存储器(例如主存储器208、ROM 224或闪存(未示出))是计算机可用存储设备的一些示例。硬盘驱动器或固态驱动器226、CD-ROM230和其它类似可用的设备是包括计算机可用存储介质的计算机可用存储设备的一些示例。
操作系统在处理单元206上运行。操作系统协调并提供对图2中的数据处理系统200内的各种组件的控制。操作系统可以是用于任何类型的计算平台(包括但不限于服务器系统、个人计算机和移动设备)的商业上可用的操作系统。面向对象或其它类型的编程系统可以与操作系统一起操作,并且提供从在数据处理系统200上执行的程序或应用对操作系统的调用。
用于操作系统、面向对象的编程系统以及诸如图1中的应用105的应用或程序的指令位于存储设备上,诸如采取硬盘驱动器226上的代码226A的形式,以及可以被加载到诸如主存储器208的一个或多个存储器中的至少一个中以便由处理单元206执行。说明性实施例的过程可以由处理单元206使用计算机实现的指令来执行,这些指令可以位于存储器中,例如主存储器208、只读存储器224,或者位于一个或多个外围设备中。
此外,在一种情况下,代码226A可以通过网络201A从远程系统201B下载,其中类似的代码201C被存储在存储设备201D上。在另一种情况下,代码226A可以通过网络201A下载到远程系统201B,其中所下载的代码201C被存储在存储设备201D上。
图1-2中的硬件可以根据实现而变化。除了图1-2中描述的硬件之外,或者作为图1-2中描述的硬件的替代,可以使用诸如闪存、等效的非易失性存储器或光盘驱动器等的其它内部硬件或外围设备。此外,说明性实施例的过程可以被应用于多处理器数据处理系统。
在一些说明性示例中,数据处理系统200可以是个人数字助理(PDA),其通常配置有闪存以提供用于存储操作系统文件和/或用户生成的数据的非易失性存储器。总线系统可以包括一个或多个总线,例如系统总线、I/O总线和PCI总线。当然,总线系统可以使用任何类型的通信结构或体系结构来实现,这些通信结构或体系结构提供在附接到该结构或体系结构的不同组件或设备之间的数据传输。
通信单元可以包括一个或多个用于发送和接收数据的设备,例如调制解调器或网络适配器。存储器可以是例如主存储器208或高速缓存,诸如在北桥和存储器控制器集线器202中找到的高速缓存。处理单元可以包括一个或多个处理器或CPU。
图1-2中所描述的示例和上述示例不意味着暗示体系结构限制。例如,数据处理系统200除了采取移动或可穿戴设备的形式之外,还可以是平板计算机、膝上型计算机或电话设备。
在计算机或数据处理系统被描述为虚拟机、虚拟设备或虚拟组件的情况下,虚拟机、虚拟设备或虚拟组件使用数据处理系统200中所描绘的一些或所有组件的虚拟化表现来以数据处理系统200的方式操作。例如,在虚拟机、虚拟设备或虚拟组件中,处理单元206被表现为主机数据处理系统中可用的所有或一些数量的硬件处理单元206的虚拟化实例,主存储器208被表现为主机数据处理系统中可用的主存储器208的所有或一些部分的虚拟化实例,以及盘226被表现为主机数据处理系统中可用的盘226的所有或一些部分的虚拟化实例。在这种情况下,主机数据处理系统由数据处理系统200表示。
参考图3,该图描绘了根据说明性实施例的用于使用生成记录的代码插入的软件对象执行识别的示例配置的框图。应用300是图1中的应用105的实例,并且在图1中的服务器104和106、客户机110、112和114以及设备132中的任一个中执行。
代码插入模块310使用代码转换工具将可执行代码的一部分插入到现有可执行代码中。在被实现为分析Java代码的模块310的一个实现方式中,模块310向代理提供要修改的一个或多个类的列表和要被插入到类中的代码,并且代理使用ClassFileTransformer接口将所提供的代码插入到所列出的类中。
在模块310的一个实现方式中,现有可执行代码是构造器。在模块310的另一实现方式中,现有代码不是构造器,而是在对象执行期间被执行的代码。在模块310的一个实现方式中,所执行代码的所插入部分是在被调用时生成实例化对象的执行跟踪数据的记录的方法。在模块310的一个实现方式中,记录是私有的数据结构,因此在类及其对象外部不可访问。在模块310的一个实现方式中,记录包括在对象被实例化时的当前调用栈。在模块310的另一实现方式中,记录包括当前调用栈和包括附加数据的异常对象两者。
一旦该部分已经被插入,则执行记录生成模块320在该部分被插入其中的代码被执行时,使得执行被插入的部分。由此,如果该部分被插入到构造器中,则当构造器被执行以实例化对象时,该部分被执行。如果该部分被插入到非构造器代码中,则在非构造器代码被执行时,该部分被执行。
参考图4,该图描绘了根据说明性实施例的使用生成记录的代码插入的软件对象执行识别的示例。该实例可使用图3中的应用300来执行。
原始代码410是包括ABC类的构造器412和414的伪代码。构造器412和414都实例化ABC对象的实例;构造器412实例化没有输入参量(argument)的ABC对象的实例,而构造器414实例化具有字符串作为输入参量的ABC对象的实例。
修改后的代码420描绘了原始代码410的伪代码,其中插入了附加执行的代码。具体而言,构造器412和414各自包括执行跟踪代码424、对setCallstackTrace()方法的方法调用。方法定义422定义了setCallstackTrace()方法,使得构造器能够调用该方法。生成记录的代码426包括setCallstackTrace()方法的代码,该方法调用称为Exception()的方法,Exception()将当前调用栈存储在ABC对象的数据中。由此,当构造器412或414中的任一个被调用以实例化对象ABC时,构造器调用setCallstackTrace()方法,从而生成当前调用栈的记录。
参考图5,该图描绘了根据说明性实施例的使用生成记录的代码插入的软件对象执行识别的继续示例。
具体地,图5描绘了通过执行图4的修改后的代码420中所描绘的示例伪代码而生成的记录的分析。跟踪输出510描绘了执行跟踪和内存分析的示例,包括堆大小550和调用栈对象位置520。调用栈530描绘了调用栈对象位置520处的数据,其中所描绘的值是调用栈的数据,包括可执行代码的示例地址。分析工具已被用于检查调用栈530的内容并确定对应于每个地址的对象。结果是解码后的调用栈540,其包括调用了内存泄漏对象的对象,从而促进内存泄漏的调试。
参考图6,该图描绘了根据说明性实施例的用于使用生成记录的代码插入的软件对象执行识别的示例过程的流程图。过程600可以在图3中的应用300中实现。
在框602中,该应用使用代码转换工具将可执行代码的一部分插入到现有构造器中,该现有构造器在被执行时实例化类的对象。在框604中,应用在现有构造器的执行期间使得执行所插入的部分,该执行生成包括对象的执行跟踪数据的记录。然后应用结束。
现在参考图7,其中描绘了说明性的云计算环境50。如图所示,云计算环境50包括云计算消费者使用的本地计算设备可以与其相通信的一个或多个云计算节点10,本地计算设备例如可以是个人数字助理(PDA)或移动电话54A,台式电脑54B、笔记本电脑54C和/或汽车计算机系统54N。节点10之间可以相互通信。可以在如上所述的诸如私有云、共同体云、公共云或混合云或者它们的组合的一个或者多个网络中将云计算节点10进行物理或虚拟分组(图中未显示)。这样,云的消费者无需在本地计算设备上维护资源就能请求云计算环境50提供的基础架构即服务、平台即服务和/或软件即服务。应当理解,所显示的各类计算设备54A-N仅仅是说明性的,云计算节点10以及云计算环境50可以与任意类型网络上和/或网络可寻址连接的任意类型的计算设备(例如使用网络浏览器)通信。
现在参见图8,其中显示了云计算环境50(图7)提供的一组功能抽象层。首先应当理解,所示的组件、层以及功能都仅仅是说明性的,本发明的实施例不限于此。如图8所示,提供下列层和对应功能:
硬件和软件层60包括硬件和软件组件。硬件组件的示例包括:主机61;基于RISC(精简指令集计算机)架构的服务器62;服务器63;刀片服务器64;存储设备65;以及网络和联网组件66。在一些实施例中,软件组件包括网络应用服务器软件67和数据库软件68。
虚拟化层70提供一个抽象层,该层可以提供下列虚拟实体的示例:虚拟服务器71;虚拟存储72;虚拟网络73,包括虚拟专用网络;虚拟应用和操作系统74;以及虚拟客户端75。
在一个示例中,管理层80可以提供下述功能:资源供应功能81:提供用于在云计算环境中执行任务的计算资源和其它资源的动态获取;计量和定价功能82:在云计算环境内对资源的使用进行成本跟踪,并为此提供帐单和发票。在一个例子中,这些资源可以包括应用软件许可。安全功能:为云的消费者和任务提供身份认证,为数据和其它资源提供保护。用户门户功能83:为消费者和系统管理员提供对云计算环境的访问。服务水平管理功能84:提供云计算资源的分配和管理,以满足必需的服务水平。服务水平协议(SLA)计划和履行功能85:为根据SLA预测的对云计算资源未来需求提供预先安排和供应。
工作负载层90提供可以利用云计算环境的功能的示例。可以从该层提供的工作负载和功能的示例包括:地图绘制与导航91;软件开发及生命周期管理92;虚拟教室的教学提供93;数据分析处理94;交易处理95;以及基于累积漏洞风险评估的应用选择96。
因此,在说明性实施例中提供了用于使用生成记录的代码插入的软件对象执行识别和其他相关特征、功能或操作的计算机实现的方法、系统或装置、以及计算机程序产品。在关于一种类型的设备描述实施例或其一部分的情况下,计算机实现的方法、系统或装置、计算机程序产品或其一部分被适配或配置成与该类型的设备的适合且相当的表现一起使用。
在实施例被描述为在应用中实现的情况下,在说明性实施例的范围内,可以设想在软件即服务(SaaS)模型中的应用的交付。在SaaS模型中,通过在云基础设施中执行应用,向用户提供实现实施例的应用的能力。用户可以通过诸如web浏览器(例如,基于web的电子邮件)或其他轻量客户端应用之类的瘦客户端接口使用各种客户端设备来访问应用。用户不管理或控制底层云基础设施,包括网络、服务器、操作系统或云基础设施的存储。在一些情况下,用户甚至可能不管理或控制SaaS应用的能力。在一些其它情况下,应用的SaaS实施方式可允许有限的用户特定应用配置设定的可能例外。
本发明可以是任何可能的技术细节集成度的系统、方法和/或计算机程序产品。计算机程序产品可包括其上具有用于使处理器执行本发明的各方面的计算机可读程序指令的计算机可读存储介质(或多个介质)。
计算机可读存储介质可为可保留和存储供指令执行装置使用的指令的有形装置。计算机可读存储介质可以是,例如但不限于,电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或者上述的任意合适的组合。计算机可读存储介质的更具体示例的非穷尽列表包括以下各项:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式紧凑盘只读存储器(CD-ROM)、数字通用盘(DVD)、记忆棒、软盘、诸如穿孔卡之类的机械编码设备或具有记录在其上的指令的槽中的凸出结构、以及上述各项的任何合适的组合。如本文所使用的计算机可读存储介质不应被解释为暂时性信号本身,例如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,穿过光纤电缆的光脉冲)或通过电线发射的电信号。
本文中所描述的计算机可读程序指令可以经由网络(例如,互联网、局域网、广域网和/或无线网络)从计算机可读存储介质下载到相应的计算/处理设备,或者下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口接收来自网络的计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路的配置数据、或以一种或多种程序设计语言的任何组合编写的源代码或目标代码,这些程序设计语言包括面向对象的程序设计语言(诸如Smalltalk、C++等)和过程程序设计语言(诸如“C”程序设计语言或类似程序设计语言)。计算机可读程序指令可以完全地在用户计算机上执行、部分在用户计算机上执行、作为独立软件包执行、部分在用户计算机上部分在远程计算机上执行或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接至用户计算机,或者可连接至外部计算机(例如,使用互联网服务提供商通过互联网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可以通过利用计算机可读程序指令的状态信息来使电子电路个性化来执行计算机可读程序指令,以便执行本发明的各方面。
下面将参考根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可被提供给计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现在流程图和/或框图的或多个框中指定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置、和/或其他设备以特定方式工作,从而,其中存储有指令的计算机可读存储介质包括包含实现流程图和/或框图中的或多个方框中规定的功能/动作的方面的指令的制造品。
也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的处理,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图中的或多个方框中规定的功能/动作。
附图中的流程图和框图示出了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。对此,流程图或框图中的每个框可表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些备选实现中,框中标注的功能可以不按照图中标注的顺序发生。例如,连续示出的两个方框实际上可以作为一个步骤完成,同时、基本上同时、以部分或完全时间上重叠的方式执行,或者方框有时可以以相反的顺序执行,这取决于所涉及的功能。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作或执行专用硬件与计算机指令的组合的专用的基于硬件的系统来实现。
Claims (8)
1.一种计算机实现的方法,包括:
使用代码转换工具将可执行代码的一部分插入到现有可执行代码中,所述现有可执行代码包括类的现有构造器,所述现有构造器在被执行时实例化所述类的对象;以及
在所述现有构造器的执行期间,使得执行所述部分,所述执行生成记录,所述记录包括所述对象的执行跟踪数据。
2.根据权利要求1所述的计算机实现的方法,其中,所述记录对所述类是私有的。
3.根据权利要求1所述的计算机实现的方法,其中,所述记录包括所述对象的调用栈。
4.根据权利要求3所述的计算机实现的方法,其中,所述记录进一步包括所述对象的数据。
5.根据权利要求1所述的计算机实现的方法,其中,所述部分包括当被调用时生成所述记录的方法。
6.根据权利要求5所述的计算机实现的方法,其中,所述方法是私有方法。
7.一种用于软件对象执行识别的计算机程序产品,所述计算机程序产品包括程序指令,所述程序指令包括实现根据权利要求1-6中任一项所述的步骤的程序指令。
8.一种计算机系统,包括:一个或多个处理器;一个或多个计算机可读存储器;一个或多个计算机可读存储介质;以及程序指令,所述程序指令存储在所述一个或多个存储介质中的至少一个存储介质上以用于由所述一个或多个处理器中的至少一个处理器经由所述一个或多个存储器中的至少一个存储器执行,所存储的程序指令包括用于实现根据权利要求1-6中任一项所述的步骤的程序指令。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/502670 | 2021-10-15 | ||
US17/502,670 US11789845B2 (en) | 2021-10-15 | 2021-10-15 | Software object identification using record generating code insertion |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115981611A true CN115981611A (zh) | 2023-04-18 |
Family
ID=85958322
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211263820.0A Pending CN115981611A (zh) | 2021-10-15 | 2022-10-11 | 使用生成记录的代码插入的软件对象识别 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11789845B2 (zh) |
CN (1) | CN115981611A (zh) |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7624381B1 (en) * | 2004-10-19 | 2009-11-24 | Sun Microsystems, Inc. | Portable detection of start and completion of object construction |
US7565645B2 (en) * | 2005-01-18 | 2009-07-21 | Lenovo (Singapore) Pte Ltd. | Method and apparatus for marking code for data versioning |
US20060200806A1 (en) * | 2005-03-07 | 2006-09-07 | Tasinga Khan M | Apparatus, system, and method for trace insertion |
GB0515405D0 (en) * | 2005-07-27 | 2005-08-31 | Ibm | Memory leak detection |
CN101339533B (zh) | 2007-07-04 | 2012-10-10 | 国际商业机器公司 | 基于分区的诊断Java系统的内存泄漏的方法及装置 |
US8607197B2 (en) * | 2007-08-28 | 2013-12-10 | International Business Machines Corporation | Displaying HTTP session entry and exit points |
US10108475B2 (en) | 2014-08-20 | 2018-10-23 | Oracle International Corporation | Pattern analysis for triaging memory leaks |
JP6447348B2 (ja) | 2015-05-01 | 2019-01-09 | 富士通株式会社 | ダンプデータ管理プログラム、ダンプデータ管理方法、およびダンプデータ管理装置 |
CN112100022B (zh) | 2020-08-14 | 2022-02-15 | 北京航空航天大学 | 一种安卓系统上监测Java对象内存泄漏时即时记录对象分配点的方法 |
-
2021
- 2021-10-15 US US17/502,670 patent/US11789845B2/en active Active
-
2022
- 2022-10-11 CN CN202211263820.0A patent/CN115981611A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230121795A1 (en) | 2023-04-20 |
US11789845B2 (en) | 2023-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11902251B2 (en) | Socket transferring for HPC networks using kernel tracing | |
US10048954B2 (en) | Accelerating software builds | |
CN115968469A (zh) | 用于可共享应用快照的编译策略 | |
US11243868B2 (en) | Application containerization based on trace information | |
CN112348302A (zh) | 具有无状态协调器的可扩展工作流引擎 | |
US20180253292A1 (en) | Building deployment packages that reference versions of files to be deployed | |
US20180107723A1 (en) | Content oriented analysis of dumps | |
US9519566B2 (en) | Modeling memory use of applications | |
US11249760B2 (en) | Parameter management between programs | |
US11656888B2 (en) | Performing an application snapshot using process virtual machine resources | |
WO2022199324A1 (en) | Run-time communications protocol parameter adjustment in containerized applications | |
US11640281B2 (en) | Tool for introspection in object-oriented source code | |
US11516094B2 (en) | Service remediation plan generation | |
US11789845B2 (en) | Software object identification using record generating code insertion | |
US10296331B2 (en) | Log-based software porting | |
US20230409716A1 (en) | Shared library customization | |
US20230229586A1 (en) | Environment specific software test failure analysis | |
CN112148935B (zh) | 用于多实例的nbmp功能执行的方法和装置 | |
US11971805B2 (en) | Intelligent automated feature toggle system using annotations | |
US11860980B2 (en) | Cognitive method to split monolithic architecture into microservice architecture | |
US11693977B2 (en) | Software defined data security layer | |
US20230409385A1 (en) | Debugging by predict accessing information | |
CN115935380A (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 |