CN116860639A - 内存泄漏的检测方法、检测装置、计算机设备及存储介质 - Google Patents

内存泄漏的检测方法、检测装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN116860639A
CN116860639A CN202310851020.9A CN202310851020A CN116860639A CN 116860639 A CN116860639 A CN 116860639A CN 202310851020 A CN202310851020 A CN 202310851020A CN 116860639 A CN116860639 A CN 116860639A
Authority
CN
China
Prior art keywords
target
call
reference count
call stack
count value
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
Application number
CN202310851020.9A
Other languages
English (en)
Other versions
CN116860639B (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.)
Shenzhen Yishi Huolala Technology Co Ltd
Original Assignee
Shenzhen Yishi Huolala 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 Shenzhen Yishi Huolala Technology Co Ltd filed Critical Shenzhen Yishi Huolala Technology Co Ltd
Priority to CN202310851020.9A priority Critical patent/CN116860639B/zh
Publication of CN116860639A publication Critical patent/CN116860639A/zh
Application granted granted Critical
Publication of CN116860639B publication Critical patent/CN116860639B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/3644Software debugging by instrumenting at runtime
    • 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/366Software debugging using diagnostics
    • 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)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请公开了一种内存泄漏的检测方法、检测装置、计算机设备及存储介质。内存泄漏的检测方法包括:获取用于对目标智能指针进行操作的目标接口;对目标接口进行监听,以拦截发送至目标接口的调用指令,调用指令用于调用目标接口对目标智能指针进行操作;基于调用指令,确定目标智能指针的引用计数值;基于调用指令,生成调用指令的调用栈,以及将调用栈存储至目标智能指针的调用栈列表中;基于引用计数值、调用栈列表,确定目标智能指针内存泄漏的检测结果。本申请实施方式的内存泄漏的检测方法、检测装置、计算机设备及存储介质,可以自动发现智能指针相关的内存泄漏问题,提高了内存泄漏的检测效率。

Description

内存泄漏的检测方法、检测装置、计算机设备及存储介质
技术领域
本申请涉及计算机技术领域,特别涉及一种内存泄漏的检测方法、检测装置、计算机设备及存储介质。
背景技术
在软件运行过程中,智能指针会在各模块/单元之间传递,在传递过程中如果使用不当可能会造成内存泄漏。由于智能指针在各模块/单元之间传递链路可能会很长,且不同智能指针之间之间嵌套引用的情况可能非常复杂,因此会使得内存泄漏的检测非常困难。
在检测内存泄漏时,一般是通过断点调试的方法来实现的,但断点调试需要由人工进行手动操作,使得内存泄漏的检测效率较低。
发明内容
为解决上述背景技术中的至少一个技术问题,本申请实施方式提供了一种内存泄漏的检测方法、检测装置、计算机设备及存储介质。
本申请实施方式提供一种内存泄漏的检测方法。所述内存泄漏的检测方法包括:
获取用于对目标智能指针进行操作的目标接口;
对所述目标接口进行监听,以拦截发送至所述目标接口的调用指令,所述调用指令用于调用所述目标接口对目标智能指针进行操作;
基于所述调用指令,确定所述目标智能指针的引用计数值;
基于所述调用指令,生成所述调用指令的调用栈,以及将所述调用栈存储至所述目标智能指针的调用栈列表中;
基于所述引用计数值、所述调用栈列表,确定所述目标智能指针内存泄漏的检测结果。
在某些实施方式中,所述对所述目标接口进行监听,以拦截发送至所述目标接口的调用指令,包括:
注册预设接口,并将所述预设接口与所述目标接口进行挂接;
基于所述预设接口与所述目标接口之间的挂接关系,对所述目标接口进行监听,以拦截发送至所述目标接口的调用指令。
在某些实施方式中,所述基于所述调用指令,确定所述目标智能指针的引用计数值,包括:
确定所述调用指令的调用类型;
在所述调用类型为智能指针的创建时,以所述目标智能指针的指针地址为键、所述目标智能指针的引用计数值为值,生成键值对,所述键值对中的引用计数值的取值为预设初始值;
在所述调用类型为智能指针的持有时,对所述键值对中的引用计数值进行加一操作,以调整所述键值对中的引用计数值的取值;
在所述调用类型为智能指针的释放时,对所述键值对中的引用计数值进行减一操作,以调整所述键值对中的引用计数值的取值。
在某些实施方式中,在所述对所述键值对中的引用计数值进行减一操作,以调整所述键值对中的引用计数值的取值之后,还包括:
若调整后的引用计数值的取值为0,删除所述键值对;
若调整后的引用计数值的取值不为0,执行所述基于所述调用指令,生成所述调用指令的调用栈,以及将所述调用栈存储至所述目标智能指针的调用栈列表中的步骤。
在某些实施方式中,所述将所述调用栈存储至所述目标智能指针的调用栈列表中,包括:
获取所述调用栈的操作执行时间;
基于所述操作执行时间,确定所述调用栈在所述调用栈列表中的次序,所述调用栈列表中包括按照历史操作执行时间的先后顺序进行排序的多个历史调用栈;
按照所述次序,将所述调用栈添加至所述目标智能指针的调用栈列表中。
在某些实施方式中,在所述将所述调用栈存储至所述目标智能指针的调用栈列表中之后,还包括:
基于所述调用指令,调用所述目标接口,以对所述目标智能指针进行操作,得到操作结果;
接收所述目标接口返回的所述操作结果;
向所述调用指令的源地址,返回所述操作结果。
在某些实施方式中,所述基于所述引用计数值、所述调用栈列表,确定所述目标智能指针内存泄漏的检测结果,包括:
响应于输出内存泄漏检测结果的指令,检测所述引用计数值的取值是否为零;
若所述引用计数值的取值不为零,基于所述目标智能指针的指针地址、所述引用计数值、所述调用栈列表,生成所述目标智能指针的使用记录;
输出所述使用记录,以供基于所述使用记录确定所述目标智能指针内存泄漏的检测结果。
本申请实施方式还提供一种内存泄漏的检测装置。所述内存泄漏的检测装置包括:
获取模块,用于获取用于对目标智能指针进行操作的目标接口;
监听拦截模块,用于对所述目标接口进行监听,以拦截发送至所述目标接口的调用指令,所述调用指令用于调用所述目标接口对目标智能指针进行操作;
确定模块,用于基于所述调用指令,确定所述目标智能指针的引用计数值;
生成模块,用于基于所述调用指令,生成所述调用指令的调用栈,以及将所述调用栈存储至所述目标智能指针的调用栈列表中;
处理模块,用于基于所述引用计数值、所述调用栈列表,确定所述目标智能指针内存泄漏的检测结果。
本申请实施方式的计算机设备包括:一个或多个处理器;存储器;及一个或多个计算机程序,其中,所述一个或多个计算机程序被存储在所述存储器中,并被配置为由所述一个或多个处理器执行,所述一个或多个计算程序配置用于:执行本申请任一实施方式所述的内存泄漏的检测方法。
本申请实施方式的非易失性计算机可读存储介质存储有计算机程序,当所述计算机程序被一个或多个处理器执行时,使得所述处理器执行本申请任一实施方式所述的内存泄漏的检测方法。
本申请实施方式的内存泄漏的检测方法、装置、计算机设备及可读存储介质中,通过对目标智能指针的目标接口进行监听,拦截发送至目标接口的调用指令,基于调用指令确定目标智能指针的引用计数值和调用栈,以确定目标智能指针内存泄漏的检测结果,从而自动发现智能指针相关的内存泄漏问题,提高了内存泄漏的检测效率。
本申请实施方式的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请的上述和/或附加的方面和优点可以从结合下面附图对实施方式的描述中将变得明显和容易理解,其中:
图1为本申请某些实施方式的内存泄漏的检测方法的流程示意图;
图2为本申请某些实施方式的内存泄漏的检测方法的流程示意图;
图3为本申请某些实施方式的内存泄漏的检测方法的流程示意图;
图4为本申请某些实施方式的内存泄漏的检测方法的流程示意图;
图5为本申请某些实施方式的内存泄漏的检测方法的流程示意图;
图6为本申请某些实施方式的内存泄漏的检测方法的流程示意图;
图7为本申请某些实施方式的内存泄漏的检测装置的模块示意图;
图8为本申请某些实施方式的计算机可读存储介质与处理器通信的示意图;
图9为本申请某些实施方式的计算机设备的示意图。
具体实施方式
下面详细描述本申请的实施方式,所述实施方式的示例在附图中示出,其中,相同或类似的标号自始至终表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本申请的实施方式,而不能理解为对本申请的实施方式的限制。
在软件运行过程中,智能指针会在各模块/单元之间传递,在传递过程中如果使用不当可能会造成内存泄漏。由于智能指针在各模块/单元之间传递链路可能会很长,且不同智能指针之间之间嵌套引用的情况可能非常复杂,因此会使得内存泄漏的检测非常困难。
相关技术中,对智能指针的内存泄漏的调查和跟踪多是采用断点调试的方法,但断点调试需要由人工进行手动操作,使得内存泄漏的检测效率较低。此外,断点调试需要对相关代码有访问权限,这对于调试第三方的代码库存在困难。断点调试还依赖于调试工具套件,需要调查人员的调试设备安装调试套件。最后断点调试可能存在人工疏漏的问题,调试成功与否依赖于调试人员对代码的熟识度,要求能找到调试的断点,并且对调试方法和手段有一定的要求。
基于此,本申请实施方式提供一种内存泄漏的检测方法。请参阅图1,内存泄漏的检测方法包括:
步骤01:获取用于对目标智能指针进行操作的目标接口;
本申请的实施例中,对目标智能指针进行的操作可以是目标智能指针的创建(create)、持有(retain)、释放(release)等,而目标接口则是用于被调用,从而执行对目标智能指针的操作,这样,目标智能指针就可在各程序(例如进程、线程等)之间传递。目标智能指针的创建也即目标智能指针的申请。
在本申请的一些实施例中,获取用于对目标智能指针进行操作的目标接口,可以包括:在预设的被跟踪程序开始执行时,从指定位置中查找被跟踪程序的目标接口。其中,指定位置可以是指定的进程地址空间,例如指定的进程地址空间中事先存储有该目标接口的接口信息,以便于在预设的被跟踪程序开始执行时可以获取到该目标接口。被跟踪程序在运行过程中,可通过调用目标接口来对目标智能指针进行操作。而被跟踪程序可基于实际需求事先设定,且被跟踪程序可同时存在至少一个,以便于针对指定的至少一个被跟踪程序的智能指针进行内存泄漏检测。至少一个被跟踪程序的智能指针中包括上述的目标智能指针。
步骤02:对目标接口进行监听,以拦截发送至目标接口的调用指令,调用指令用于调用目标接口对目标智能指针进行操作;
本申请的实施例中,调用指令可以是用于智能指针的创建的调用指令、用于智能指针的持有的调用指令、用于智能指针的释放的调用指令等,不同的调用指令用于调用目标接口对目标智能指针进行不同的操作。
在本申请的一些实施例中,请参阅图2,对目标接口进行监听,以拦截发送至目标接口的调用指令,可以包括:步骤021、注册(register)预设接口,并将预设接口与目标接口进行挂接;步骤022、基于预设接口与目标接口之间的挂接关系,对目标接口进行监听,以拦截发送至目标接口的调用指令。其中,目标接口提供有与其他接口进行挂接的功能,预设接口与目标接口之间的挂接可通过将目标接口的跳转地址修改为预设接口的地址来实现,这样,目标接口就可自动将发送至目标接口的调用指令,跳转至预设接口,实现对目标接口的监听和拦截。
在本申请的一些实施例中,用户可通过触发指令,随时开始和结束内存泄漏的检测,以便于在更多场景中灵活地监控内存泄漏。具体地,响应于用户触发的开始跟踪的指令,执行步骤02。响应于用户触发的结束跟踪的指令,结束对目标接口的监听和拦截。在结束对目标接口的监听和拦截的步骤中,具体是将目标接口的跳转地址修改为原地址,以卸载预设接口与目标接口之间的挂接关系,结束对目标接口的监听和拦截。原地址是指:在将目标接口的跳转地址修改为预设接口的地址之前,目标接口的跳转地址。用户触发的开始跟踪的指令和结束跟踪的指令可通过进程间通信的方式传递。
可以看出,本申请实施例中对于内存泄漏的检测,通过将外部程序(即本申请实施例中用于执行内存泄漏的检测方法的程序)的预设接口与目标接口的挂接即可实现,更大程度地减少了对被跟踪程序的修改,并且可以对该外部程序进行定制开发和独立迭代,不会对目前的内存管理方式产生影响。
步骤03:基于调用指令,确定目标智能指针的引用计数值;
本申请的实施例中,引用计数是计算机编程语言中的一种内存管理技术,是指将目标智能指针的资源(例如内存)的被引用次数保存起来,当被引用次数变为零时就将目标智能指针的资源释放的过程。
在本申请的一些实施例中,请参阅图3,基于调用指令,确定目标智能指针的引用计数值,可以包括:步骤031、确定调用指令的调用类型,调用类型可以包括智能指针的创建、智能指针的持有、智能指针的释放等;步骤032、在调用类型为智能指针的创建时,以目标智能指针的指针地址为键(key)、目标智能指针的引用计数值为值(value),生成键值对,键值对中的引用计数值的取值为预设初始值,预设初始值例如可以是1;步骤033、在调用类型为智能指针的持有时,对上述键值对中的引用计数值进行加一操作(即引用计数值的取值加1),以调整上述键值对中的引用计数值的取值;步骤034、在调用类型为智能指针的释放时,对上述键值对中的引用计数值进行减一操作(即引用计数值的取值减1),以调整目标上述键值对中的引用计数值的取值,从而记录下目标智能指针的使用次数。
其中,在生成上述键值对后,可将上述键值对插入至预设的映射表中,预设的映射表中存储有多个不同智能指针的不同键值对,以便于数据的管理。在将上述键值对插入至预设的映射表中后,可基于目标智能指针的指针地址,在预设的映射表中查找到目标智能指针的键值对,从而对目标智能指针的键值对中的引用计数值进行加一操作或者减一操作。
在进一步的实施例中,请参阅图4,在对键值对中的引用计数值进行减一操作,以调整键值对中的引用计数值的取值之后,还可以包括:步骤035、若调整后的引用计数值的取值为0,删除键值对;步骤036、若调整后的引用计数值的取值不为0,基于调用指令,生成调用指令的调用栈,以及将调用栈存储至目标智能指针的调用栈列表中。具体地,若调整后的引用计数值的取值为0,表明该目标智能指针的内存已经被完全释放,不存在内存泄漏的可能,因此可删除目标智能指针的键值对;若调整后的引用计数值的取值不为0,表明该目标智能指针的内存存在内存泄漏的可能,因此执行步骤04及其后续步骤。
步骤04:基于调用指令,生成调用指令的调用栈,以及将调用栈存储至目标智能指针的调用栈列表中;
本申请的实施例中,调用指令的调用栈是指调用指令的函数栈,可通过堆栈回溯的方式生成。调用指令的调用栈中记录了调用目标接口对目标智能指针进行操作的具体函数。
目标智能指的键值对还可包括目标智能指针的调用栈列表,即目标智能指的键值对具体是以目标智能指针的指针地址为键、目标智能指针的引用计数值和目标智能指针的调用栈列表为值。目标智能指针的调用栈列表中包括多个历史调用栈,历史调用栈即历史时刻生成的调用栈。
在本申请的一些实施例中,请参阅图5,将调用栈存储至目标智能指针的调用栈列表中,可以包括:步骤06、获取调用栈的操作执行时间,操作执行时间可以是目标智能指针基于调用指令进行操作的时间,或者调用栈的生成时间;步骤07、基于操作执行时间,确定调用栈在调用栈列表中的次序,调用栈列表中包括按照历史操作执行时间的先后顺序进行排序的多个历史调用栈;步骤08、按照次序,将调用栈添加至目标智能指针的调用栈列表中。这样,在将调用栈添加至目标智能指针的调用栈列表中后,调用栈列表中的所有调用栈(包括新添加的调用栈和历史调用栈)也均是按照历史操作执行时间的先后顺序进行排序的,实现对目标智能指针的使用记录的跟踪。目标智能指针的使用记录也即目标智能指针在各程序之间的传递链路。
在本申请的一些实施例中,在将调用栈存储至目标智能指针的调用栈列表中之后,还可以包括:基于调用指令,调用目标接口,以对目标智能指针进行操作,得到操作结果,从而保证拦截到的调用指令应当起到的调用作用仍正常生效;通过预设接口,接收目标接口返回的操作结果,其中,调用目标接口对目标智能指针进行操作后,目标接口会接收到反馈的操作结果,并基于预设接口与目标接口之间的挂接关系,将操作结果反馈至预设接口;向调用指令的源地址,返回操作结果,从而完成调用指令相关的完整操作流程。
步骤05:基于引用计数值、调用栈列表,确定目标智能指针内存泄漏的检测结果。
其中,目标智能指针内存泄漏的检测结果可包括目标智能指针是否存在内存泄漏和/或内存泄漏发生的位置(即泄漏根源)。本申请的实施例中,由于引用计数值是否为零,表征了目标智能指针存在内存泄漏的可能性,而调用栈列表记录了目标智能指针的完整使用记录,可用于判断内存泄漏发生的位置,因此可基于引用计数值、调用栈列表,进一步确定目标智能指针是否存在内存泄漏和/或内存泄漏发生的位置。
在本申请的一些实施例中,请参阅图6,基于引用计数值、调用栈列表,确定目标智能指针内存泄漏的检测结果,可以包括:步骤051、响应于输出内存泄漏检测结果的指令,检测引用计数值的取值是否为零,其中,输出内存泄漏检测结果的指令可由人工触发,并通过进程间通信的方式传递;步骤052、若引用计数值的取值不为零,基于目标智能指针的指针地址、引用计数值、调用栈列表,生成目标智能指针的使用记录;步骤053、输出使用记录,以供基于使用记录确定目标智能指针内存泄漏的检测结果。人工可基于输出的目标智能指针的使用记录,进一步确定目标智能指针是否存在内存泄漏,以及确认内存泄漏发生的位置(即泄漏根源),节省了人工调查内存泄漏的时间。
在本申请的一些实施例中,响应于输出内存泄漏检测结果的指令,还可遍历预设的映射表中的所有智能指针的键值对,确定出引用计数值的取值不为零的多个智能指针的键值对,并基于该多个智能指针的键值对中的指针地址、引用计数值、调用栈列表,生成该多个智能指针的使用记录,输出该多个智能指针的使用记录,从而同时实现对多个智能指针的内存泄漏检测。
在本申请的一些实施例中,在输出使用记录时,具体是将使用记录输出至预设磁盘中的一个预设文件中,以便于将该预设文件在本设备上阅读或传递到其他的设备上阅读,避免日志打印丢失的问题。
本申请实施方式的内存泄漏的检测方法,通过对目标智能指针的目标接口进行监听,拦截发送至目标接口的调用指令,基于调用指令确定目标智能指针的引用计数值和调用栈,以确定目标智能指针内存泄漏的检测结果,从而自动发现智能指针相关的内存泄漏问题,提高了内存泄漏的检测效率。
请参阅图7,本申请实施方式还提供一种内存泄漏的检测装置10。内存泄漏的检测装置10包括:获取模块11,用于获取用于对目标智能指针进行操作的目标接口;监听拦截模块12,用于对目标接口进行监听,以拦截发送至目标接口的调用指令,调用指令用于调用目标接口对目标智能指针进行操作;确定模块13,用于基于调用指令,确定目标智能指针的引用计数值;生成模块14,用于基于调用指令,生成调用指令的调用栈,以及将调用栈存储至目标智能指针的调用栈列表中;处理模块15,用于基于引用计数值、调用栈列表,确定目标智能指针内存泄漏的检测结果。
在某些实施方式中,监听拦截模块12具体用于:注册预设接口,并将预设接口与目标接口进行挂接;基于预设接口与目标接口之间的挂接关系,对目标接口进行监听,以拦截发送至目标接口的调用指令。
在某些实施方式中,确定模块13具体用于:确定调用指令的调用类型;在调用类型为智能指针的创建时,以目标智能指针的指针地址为键、目标智能指针的引用计数值为值,生成键值对,键值对中的引用计数值的取值为预设初始值;在调用类型为智能指针的持有时,对键值对中的引用计数值进行加一操作,以调整键值对中的引用计数值的取值;在调用类型为智能指针的释放时,对键值对中的引用计数值进行减一操作,以调整键值对中的引用计数值的取值。
在某些实施方式中,确定模块13还用于:在对键值对中的引用计数值进行减一操作,以调整键值对中的引用计数值的取值之后,若调整后的引用计数值的取值为0,删除键值对;若调整后的引用计数值的取值不为0,执行基于调用指令,生成调用指令的调用栈,以及将调用栈存储至目标智能指针的调用栈列表中的步骤。
在某些实施方式中,生成模块14还用于:获取调用栈的操作执行时间;基于操作执行时间,确定调用栈在调用栈列表中的次序,调用栈列表中包括按照历史操作执行时间的先后顺序进行排序的多个历史调用栈;按照次序,将调用栈添加至目标智能指针的调用栈列表中。
在某些实施方式中,生成模块14还用于:在将调用栈存储至目标智能指针的调用栈列表中之后,基于调用指令,调用目标接口,以对目标智能指针进行操作,得到操作结果;接收目标接口返回的操作结果;向调用指令的源地址,返回操作结果。
在某些实施方式中,处理模块15具体用于:响应于输出内存泄漏检测结果的指令,检测引用计数值的取值是否为零;若引用计数值的取值不为零,基于目标智能指针的指针地址、引用计数值、调用栈列表,生成目标智能指针的使用记录;输出使用记录,以供基于使用记录确定目标智能指针内存泄漏的检测结果。
需要说明的是,本申请实施方式的内存泄漏的检测装置10实施本申请任一实施方式的内存泄漏的检测方法时的实施细节及所达到的效果,可以参考上述对内存泄漏的检测方法的描述,在此不再赘述。
请参阅图8,本申请实施方式还提供一种计算机可读存储介质。计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现以上任一实施方式所述的内存泄漏的检测方法。其中,所述计算机可读存储介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(RandomAccess Memory,随即存储器)、EPROM(Erasable Programmable Read-OnlyMemory,可擦写可编程只读存储器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,存储设备包括由设备(例如,计算机、手机)以能够读的形式存储或传输信息的任何介质,可以是只读存储器,磁盘或光盘等。
本申请方法实施例的内容均适用于本存储介质实施例,本存储介质实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法达到的有益效果也相同,具体请参见方法实施例中的说明,在此不再赘述。
请参阅图9,本申请实施方式还提供一种计算机设备。本申请实施方式所述的计算机设备可以是服务器、个人计算机以及网络设备等设备。所述计算机设备包括一个或多个处理器、存储器、以及一个或多个计算机程序。其中一个或多个计算机程序被存储在存储器中并被配置为由一个或多个处理器执行。一个或多个计算机程序配置用于执行以上任一实施方式所述的内存泄漏的检测方法。
在本说明书的描述中,参考术语“在本申请的一些实施例中”、“一个实施方式”、“一些实施方式”、“示意性实施方式”、“示例”、“具体示例”或“一些示例”等的描述意指结合所述实施方式或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施方式或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施方式或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施方式或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
尽管上面已经示出和描述了本申请的实施方式,可以理解的是,上述实施方式是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施方式进行变化、修改、替换和变型。

Claims (10)

1.一种内存泄漏的检测方法,其特征在于,所述内存泄漏的检测方法包括:
获取用于对目标智能指针进行操作的目标接口;
对所述目标接口进行监听,以拦截发送至所述目标接口的调用指令,所述调用指令用于调用所述目标接口对目标智能指针进行操作;
基于所述调用指令,确定所述目标智能指针的引用计数值;
基于所述调用指令,生成所述调用指令的调用栈,以及将所述调用栈存储至所述目标智能指针的调用栈列表中;
基于所述引用计数值、所述调用栈列表,确定所述目标智能指针内存泄漏的检测结果。
2.根据权利要求1所述的内存泄漏的检测方法,其特征在于,所述对所述目标接口进行监听,以拦截发送至所述目标接口的调用指令,包括:
注册预设接口,并将所述预设接口与所述目标接口进行挂接;
基于所述预设接口与所述目标接口之间的挂接关系,对所述目标接口进行监听,以拦截发送至所述目标接口的调用指令。
3.根据权利要求1所述的内存泄漏的检测方法,其特征在于,所述基于所述调用指令,确定所述目标智能指针的引用计数值,包括:
确定所述调用指令的调用类型;
在所述调用类型为智能指针的创建时,以所述目标智能指针的指针地址为键、所述目标智能指针的引用计数值为值,生成键值对,所述键值对中的引用计数值的取值为预设初始值;
在所述调用类型为智能指针的持有时,对所述键值对中的引用计数值进行加一操作,以调整所述键值对中的引用计数值的取值;
在所述调用类型为智能指针的释放时,对所述键值对中的引用计数值进行减一操作,以调整所述键值对中的引用计数值的取值。
4.根据权利要求3所述的内存泄漏的检测方法,其特征在于,在所述对所述键值对中的引用计数值进行减一操作,以调整所述键值对中的引用计数值的取值之后,还包括:
若调整后的引用计数值的取值为0,删除所述键值对;
若调整后的引用计数值的取值不为0,执行所述基于所述调用指令,生成所述调用指令的调用栈,以及将所述调用栈存储至所述目标智能指针的调用栈列表中的步骤。
5.根据权利要求1所述的内存泄漏的检测方法,其特征在于,所述将所述调用栈存储至所述目标智能指针的调用栈列表中,包括:
获取所述调用栈的操作执行时间;
基于所述操作执行时间,确定所述调用栈在所述调用栈列表中的次序,所述调用栈列表中包括按照历史操作执行时间的先后顺序进行排序的多个历史调用栈;
按照所述次序,将所述调用栈添加至所述目标智能指针的调用栈列表中。
6.根据权利要求1所述的内存泄漏的检测方法,其特征在于,在所述将所述调用栈存储至所述目标智能指针的调用栈列表中之后,还包括:
基于所述调用指令,调用所述目标接口,以对所述目标智能指针进行操作,得到操作结果;
接收所述目标接口返回的所述操作结果;
向所述调用指令的源地址,返回所述操作结果。
7.根据权利要求1所述的内存泄漏的检测方法,其特征在于,所述基于所述引用计数值、所述调用栈列表,确定所述目标智能指针内存泄漏的检测结果,包括:
响应于输出内存泄漏检测结果的指令,检测所述引用计数值的取值是否为零;
若所述引用计数值的取值不为零,基于所述目标智能指针的指针地址、所述引用计数值、所述调用栈列表,生成所述目标智能指针的使用记录;
输出所述使用记录,以供基于所述使用记录确定所述目标智能指针内存泄漏的检测结果。
8.一种内存泄漏的检测装置,其特征在于,所述内存泄漏的检测装置包括:
获取模块,用于获取用于对目标智能指针进行操作的目标接口;
监听拦截模块,用于对所述目标接口进行监听,以拦截发送至所述目标接口的调用指令,所述调用指令用于调用所述目标接口对目标智能指针进行操作;
确定模块,用于基于所述调用指令,确定所述目标智能指针的引用计数值;
生成模块,用于基于所述调用指令,生成所述调用指令的调用栈,以及将所述调用栈存储至所述目标智能指针的调用栈列表中;
处理模块,用于基于所述引用计数值、所述调用栈列表,确定所述目标智能指针内存泄漏的检测结果。
9.一种计算机设备,其特征在于,包括:
一个或多个处理器;
存储器;及
一个或多个计算机程序,其中,所述一个或多个计算机程序被存储在所述存储器中,并被配置为由所述一个或多个处理器执行,所述一个或多个计算程序配置用于:执行权利要求1至7任意一项所述的内存泄漏的检测方法。
10.一种存储有计算机程序的非易失性计算机可读存储介质,其特征在于,当所述计算机程序被一个或多个处理器执行时,使得所述处理器执行权利要求1至7任意一项所述的内存泄漏的检测方法。
CN202310851020.9A 2023-07-11 2023-07-11 内存泄漏的检测方法、检测装置、计算机设备及存储介质 Active CN116860639B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310851020.9A CN116860639B (zh) 2023-07-11 2023-07-11 内存泄漏的检测方法、检测装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310851020.9A CN116860639B (zh) 2023-07-11 2023-07-11 内存泄漏的检测方法、检测装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN116860639A true CN116860639A (zh) 2023-10-10
CN116860639B CN116860639B (zh) 2024-03-29

Family

ID=88218541

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310851020.9A Active CN116860639B (zh) 2023-07-11 2023-07-11 内存泄漏的检测方法、检测装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN116860639B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101046755A (zh) * 2006-03-28 2007-10-03 郭明南 一种计算机自动内存管理的系统及方法
US20080294853A1 (en) * 2007-05-25 2008-11-27 Gururaja Kowlali Method and System for Pinpointing Memory Leaks
CN103309796A (zh) * 2012-03-09 2013-09-18 腾讯科技(深圳)有限公司 一种组件对象模型对象的监控方法和装置
CN109710425A (zh) * 2018-12-19 2019-05-03 北京金山安全软件有限公司 一种消息监听方法和装置
CN109710530A (zh) * 2018-12-28 2019-05-03 珠海西山居互动娱乐科技有限公司 一种检测对象的内存泄漏的方法及装置
US10725846B1 (en) * 2019-04-02 2020-07-28 Sap Se Reference debugging using associative registry
CN113032491A (zh) * 2021-04-07 2021-06-25 工银科技有限公司 实现静态数据同步的方法、装置、电子设备及介质
CN114546795A (zh) * 2021-12-27 2022-05-27 浙江大华技术股份有限公司 内存泄露检测方法、电子设备和计算机可读存储介质
CN116225905A (zh) * 2022-12-30 2023-06-06 海信视像科技股份有限公司 判空处理检测方法、判空处理模型训练方法及装置、介质

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101046755A (zh) * 2006-03-28 2007-10-03 郭明南 一种计算机自动内存管理的系统及方法
US20080294853A1 (en) * 2007-05-25 2008-11-27 Gururaja Kowlali Method and System for Pinpointing Memory Leaks
CN103309796A (zh) * 2012-03-09 2013-09-18 腾讯科技(深圳)有限公司 一种组件对象模型对象的监控方法和装置
CN109710425A (zh) * 2018-12-19 2019-05-03 北京金山安全软件有限公司 一种消息监听方法和装置
CN109710530A (zh) * 2018-12-28 2019-05-03 珠海西山居互动娱乐科技有限公司 一种检测对象的内存泄漏的方法及装置
US10725846B1 (en) * 2019-04-02 2020-07-28 Sap Se Reference debugging using associative registry
CN113032491A (zh) * 2021-04-07 2021-06-25 工银科技有限公司 实现静态数据同步的方法、装置、电子设备及介质
CN114546795A (zh) * 2021-12-27 2022-05-27 浙江大华技术股份有限公司 内存泄露检测方法、电子设备和计算机可读存储介质
CN116225905A (zh) * 2022-12-30 2023-06-06 海信视像科技股份有限公司 判空处理检测方法、判空处理模型训练方法及装置、介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
XUTONG MA等: "Detecting Memory-Related Bugs by Tracking Heap Memory Management of C++ Smart Pointers", 《2021 36TH IEEE/ACM INTERNATIONAL CONFERENCE ON AUTOMATED SOFTWARE ENGINEERING (ASE)》, 20 January 2022 (2022-01-20), pages 880 - 891 *
仵俊: "C/C++程序内存泄漏检测算法的研究", 《现代信息技术》, vol. 5, no. 22, 30 November 2021 (2021-11-30), pages 98 - 100 *
咖啡码农 ‍: "基础篇:智能指针与内存管理", Retrieved from the Internet <URL:https://zhuanlan.zhihu.com/p/141651776> *

Also Published As

Publication number Publication date
CN116860639B (zh) 2024-03-29

Similar Documents

Publication Publication Date Title
US8402443B2 (en) Method and system for automated analysis of the performance of remote method invocations in multi-tier applications using bytecode instrumentation
US8250543B2 (en) Software tracing
CN107066390B (zh) 一种动态内存泄漏检测方法及系统
CA2226224A1 (en) Fast traps for computer software instrumentation
CN109462507B (zh) 配置更新方法、装置、系统及电子设备
CN111966603B (zh) 内存泄露的检测方法及装置、可读存储介质及电子设备
CN115629992B (zh) 一种对使用Spring技术栈构建的应用系统进行调试的方法
CN112445686A (zh) 内存泄漏检测方法、装置以及计算机可读存储介质
CN111338759A (zh) 虚拟磁盘校验码生成方法、装置、设备及存储介质
CN113238815B (zh) 一种接口访问控制方法、装置、设备及存储介质
CN116860639B (zh) 内存泄漏的检测方法、检测装置、计算机设备及存储介质
CN110045952B (zh) 代码调用方法与装置
CN116450398A (zh) 异常回溯方法、装置、设备和介质
CN108491483B (zh) 一种远程监控程序运行状态的方法和装置
CN115952491A (zh) hook目标函数的方法、装置、电子设备及介质
CN112114987B (zh) 运行环境的异常检测方法、装置、智能终端及存储介质
CN115422008A (zh) 无侵入式的进程监控方法、装置、设备及存储介质
CN111984473B (zh) 一种内存快照数据获取方法及相关装置
CN114253825B (zh) 内存泄漏检测方法、装置、计算机设备和存储介质
CN110908869B (zh) 一种应用程序数据监控方法、装置、设备及储存介质
CN113986622A (zh) Sdk异常的自检方法、装置、介质和计算设备
CN112346994A (zh) 一种测试信息关联方法、装置、计算机设备及存储介质
CN112445692A (zh) 一种用例测试方法及终端
CN112199195B (zh) 进程资源处理方法及装置
CN116302365B (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