一种监控栈内存泄露的方法、装置、介质和电子设备制造方法及图纸

技术编号:26478445 阅读:17 留言:0更新日期:2020-11-25 19:22
本公开提供了一种监控栈内存泄露的方法、装置、介质和电子设备。所述方法包括:在第一线程被劫持的即时退出函数中,获取当前退出状态;当所述当前退出状态为连接状态时,查询当前应用中是否存在对应所述第一线程的等待退出信息;当不存在所述等待退出信息时,确定所述第一线程的栈内存泄露异常。本公开通过劫持即时退出函数,并从即时退出函数中监控线程的栈内存泄露情况,当释放栈内存信息的处理方式不符合语法规则时,则提示栈内存泄露信息。解决了不合理的程序撰写导致栈内存泄漏,进而应用崩溃的问题。

【技术实现步骤摘要】
一种监控栈内存泄露的方法、装置、介质和电子设备
本公开涉及计算机
,具体而言,涉及一种监控栈内存泄露的方法、装置、介质和电子设备。
技术介绍
在计算机技术中,任务,包括用户对计算机操作时的各个动作及所对应的响应事件。例如,鼠标单击、右击、打开一个对话框、关闭一个文件、启动一个程序。总之任务是一个很宽泛的概念,它是由很多个进程相互作用,才能完成。线程,是操作系统技术中的术语,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。一条线程是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,每条线程并行执行不同的任务。软件开发过程中,复杂繁重的任务一般由一个或者多个独立线程完成。因此任务和线程存在一种对应关系。但是,由于对线程不合理的应用,导致栈内存泄漏,最终导致程序崩溃。而这种栈内存泄漏问题,在崩溃现场中是很难被发现,因此,排查非常困难。
技术实现思路
提供该
技术实现思路
部分以便以简要的形式介绍构思,这些构思将在后面的具体实施方式部分被详细描述。该
技术实现思路
部分并不旨在标识要求保护的技术方案的关键特征或必要特征,也不旨在用于限制所要求的保护的技术方案的范围。本公开的目的在于提供一种监控栈内存泄露的方法、装置、介质和电子设备,能够解决上述提到的至少一个技术问题。具体方案如下:根据本公开的具体实施方式,第一方面,本公开提供一种监控栈内存泄露的方法,包括:在第一线程被劫持的即时退出函数中,获取当前退出状态;当所述当前退出状态为连接状态时,查询当前应用中是否存在对应所述第一线程的等待退出信息;当不存在所述等待退出信息时,确定所述第一线程的栈内存泄露异常。根据本公开的具体实施方式,第二方面,本公开提供一种监控栈内存泄露的装置,包括:获取单元,用于在第一线程被劫持的即时退出函数中,获取当前退出状态;查询单元,用于当所述当前退出状态为连接状态时,查询当前应用中是否存在对应所述第一线程的等待退出信息;确定单元,用于当不存在所述等待退出信息时,确定所述第一线程的栈内存泄露异常。根据本公开的具体实施方式,第三方面,本公开提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第一方面任一项所述监控栈内存泄露的方法。根据本公开的具体实施方式,第四方面,本公开提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如第一方面任一项所述监控栈内存泄露的方法。本公开实施例的上述方案与现有技术相比,至少具有以下有益效果:本公开提供了一种监控栈内存泄露的方法、装置、介质和电子设备。本公开通过劫持即时退出函数,并从即时退出函数中监控线程的栈内存泄露情况,当释放栈内存信息的处理方式不符合语法规则时,则提示栈内存泄露信息。解决了不合理的程序撰写导致栈内存泄漏,进而应用崩溃的问题。附图说明结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。在附图中:图1示出了根据本公开实施例的监控栈内存泄露的方法的流程图;图2示出了根据本公开实施例的监控栈内存泄露的装置的单元框图;图3示出了根据本公开的实施例的电子设备连接结构示意图。具体实施方式下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。下面结合附图详细说明本公开的可选实施例。对本公开提供的第一实施例,即一种监控栈内存泄露的方法的实施例。下面结合图1对本公开实施例进行详细说明。步骤S101,在第一线程被劫持的即时退出函数中,获取当前退出状态。线程,是操作系统技术中的术语,是操作系统能够进行运算调度的最小单位,它被包涵在一个应用之中,是应用中的实际运作单位。一条线程是应用中一个单一顺序的控制流,一个应用中可以并行多个线程,每条线程并行执行不同的任务。即时退出函数应用于线程中,其作用是立即退出调用即时退出函数的线程。在类UNIX(UNIX、Linux、安卓)操作系统中,即时退出函数以pthread_exit表示,创建线程函数以pthread_create表示。当应用pthread_create函数创建线程时,也会为该线程在内存中创建对应的栈内存。需要根据两种不同的退出状态采用不同释放该栈内存的方式。当前应用的退出状态为分离状态(即PTHREAD_CREATE_DETACHED)时,在该线程中通过pthread_exit函数即可释放对应的栈内存;当前应用的退出状态为连接状态(即PTHREAD_CREATE_JOINABLE)时,还需要通过其他线程调用等待退出函数(即pthread_join函数)释放指定线程的栈内存。pthread_join函数以阻塞的方式等待指定的线程结束。当被等待线程返回后,被等待线程的栈内存被pthread_join函数收回。如果被等待线程已经结束,则pthread_join函数会立即收回被等待线程的栈内存。但是,很多开发者常常疏忽上述的应用规则,导致栈内存泄露。本公开实施例通过钩子技术劫持即时退出函数,以便监控栈内存泄露是否安全。之所以劫持pthread_exit函数是因为pthread_exit函数是一个系统函数,其具体代码是不对外开放的。劫持pthread_exit函数后可以在劫持函数中增加开发者希望本文档来自技高网...

【技术保护点】
1.一种监控栈内存泄露的方法,其特征在于,包括:/n在第一线程被劫持的即时退出函数中,获取当前退出状态;/n当所述当前退出状态为连接状态时,查询当前应用中是否存在对应所述第一线程的等待退出信息;/n当不存在所述等待退出信息时,确定所述第一线程的栈内存泄露异常。/n

【技术特征摘要】
1.一种监控栈内存泄露的方法,其特征在于,包括:
在第一线程被劫持的即时退出函数中,获取当前退出状态;
当所述当前退出状态为连接状态时,查询当前应用中是否存在对应所述第一线程的等待退出信息;
当不存在所述等待退出信息时,确定所述第一线程的栈内存泄露异常。


2.根据权利要求1所述的方法,其特征在于,所述查询当前应用中是否存在对应所述第一线程的等待退出信息,包括:
获取所述第一线程的唯一线程身份信息;
基于所述唯一线程身份信息查询当前应用的退出状态信息集中是否存在对应的等待退出信息。


3.根据权利要求2所述的方法,其特征在于,在所述获取当前退出状态前,还包括:
在被劫持的等待退出函数中,从创建线程函数的输出参数中获取所述第一线程的唯一线程身份信息;
将所述唯一线程身份信息和所述等待退出信息保存到所述退出状态信息集中。


4.根据权利要求1所述的方法,其特征在于,在所述获取当前退出状态后,还包括:
当所述当前退出状态为分离状态时,确定所述第一线程的栈内存正常。


5.根据权利要求1所述的方法,其特征在于,在所述当所述当前退出状态为连接状态时,查询当前应用中是否存在对应所述第一线程的等待退出信息后,还包括:
当存在所述等待退出信息时,确定所述第一线程...

【专利技术属性】
技术研发人员:朴英敏
申请(专利权)人:北京字节跳动网络技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1