System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 文件描述符泄漏定位方法、装置、介质及设备制造方法及图纸_技高网

文件描述符泄漏定位方法、装置、介质及设备制造方法及图纸

技术编号:43355471 阅读:2 留言:0更新日期:2024-11-19 17:42
本公开涉及一种文件描述符泄漏定位方法、装置、介质及设备。其中,该方法包括:在应用程序出现运行错误的情况下,通过回溯工具追溯本地层堆栈;当打开文件返回文件描述符时,判断文件描述符对应的当前打开位置处的进程是否处于第一开发环境;在处于第一开发环境的情况下,调用第一开发环境对应的应用层堆栈;基于本地层堆栈和应用层堆栈,定位应用程序的源代码中存在文件描述符泄露的错误代码的位置信息。本公开技术方案能够降低针对文件描述符泄露的定位难度。

【技术实现步骤摘要】

本公开涉及计算机,尤其涉及一种文件描述符泄漏定位方法、装置、介质及设备


技术介绍

1、linux系统中的文件描述符(file descriptor,fd)用来唯一标识已经打开的文件。通常系统允许进程使用的文件描述符是有上限的,当文件描述符增加到上限值时,该进程无法再进行文件的打开或者创建操作。这里,将这种未对称使用文件描述符的打开函数和关闭函数导致进程打开的文件描述符持续增加的现象叫做文件描述符泄露。

2、当发生文件描述符泄漏时,需要通过调用堆栈来定位错误代码。但是,目前只能拿取到本地层堆栈,而仅有本地层堆栈很难定位发生文件描述符泄漏的错误代码。


技术实现思路

1、为了解决上述技术问题,本公开提供了一种文件描述符泄漏定位方法、装置、介质及设备,以降低定位发生文件描述符泄漏的错误代码的难度。

2、本公开提供了一种文件描述符泄漏定位方法,包括:

3、在应用程序出现运行错误的情况下,通过回溯工具追溯本地层堆栈;

4、当打开文件返回文件描述符时,判断所述文件描述符对应的当前打开位置处的进程是否处于第一开发环境;

5、在处于所述第一开发环境的情况下,调用所述第一开发环境对应的应用层堆栈;

6、基于所述本地层堆栈和所述应用层堆栈,定位所述应用程序的源代码中存在文件描述符泄露的错误代码的位置信息。

7、在一些实施例中,所述通过回溯工具追溯本地层堆栈,包括:

8、解析存在乱码的原始本地层堆栈;

9、通过回溯工具对所述原始本地层堆栈中的乱码进行修正,得到修正后的本地层堆栈;其中,所述回溯工具为根据回溯信息追踪代码的调用逻辑的工具。

10、在一些实施例中,所述解析存在乱码的原始本地层堆栈,包括:

11、基于预设的错误处理程序框架调用栈回溯函数,并通过所述栈回溯函数解析存在乱码的原始本地层堆栈;其中,所述错误处理程序框架用于保存代码中所有函数的调用堆栈的信息。

12、在一些实施例中,所述通过回溯工具对所述原始本地层堆栈中的乱码进行修正,包括:

13、基于回溯工具创建回溯实例;

14、调用所述回溯实例对所述原始本地层堆栈中存在的乱码进行修正,所述修正包括:替换和/或删除。

15、在一些实施例中,所述判断所述文件描述符的当前打开位置处的进程是否处于第一开发环境,包括:

16、基于钩子的方式拦截目标进程下的内核命令行文件;其中,所述目标进程为所述文件描述符的当前打开位置处的进程;

17、判断所述内核命令行文件的字符串是否包含表示本地进程的目标字符串;

18、在不包含所述目标字符串的情况下,确定所述目标进程处于第一开发环境。

19、在一些实施例中,所述方法还包括:

20、在所述内核命令行文件的字符串包含所述目标字符串的情况下,确定所述文件描述符的当前打开位置处的进程处于第二开发环境;

21、在所述第二开发环境下,定位所述本地层堆栈中发生文件描述符泄露的错误代码的位置信息。

22、在一些实施例中,所述调用所述第一开发环境对应的应用层堆栈,包括:

23、通过钩子的方式监听目标虚拟机,从所述目标虚拟机读取打开所述文件描述符的线程列表;

24、通过所述线程列表获取当前线程,并通过所述当前线程的堆栈跟踪工具调用所述第一开发环境对应的应用层堆栈。

25、在一些实施例中,所述基于所述本地层堆栈和所述应用层堆栈,定位所述应用程序的源代码中发生文件描述符泄露的错误代码的位置信息,包括:

26、将所述本地层堆栈和所述应用层堆栈组合为目标堆栈;

27、根据所述目标堆栈中的调用返回地址,确定发生错误的代码;

28、基于所述发生错误的代码,确定所述应用程序的源代码中发生文件描述符泄露的错误代码的位置信息。

29、本公开提供了一种文件描述符泄漏定位装置,包括:

30、本地层堆栈调用模块,用于在应用程序出现运行错误的情况下,通过回溯工具追溯本地层堆栈;

31、开发环境判断模块,用于当打开文件返回文件描述符时,判断所述文件描述符对应的当前打开位置处的进程是否处于第一开发环境;

32、应用层堆栈调用模块,用于在处于所述第一开发环境的情况下,调用所述第一开发环境对应的应用层堆栈;

33、第一定位模块,用于基于所述本地层堆栈和所述应用层堆栈,定位所述应用程序的源代码中存在文件描述符泄露的错误代码的位置信息。

34、本公开还提供了一种计算机可读存储介质,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行上述任一种方法的步骤。

35、本公开还提供了一种电子设备,包括:

36、一个或多个处理器;

37、存储器,用于存储一个或多个程序或指令;

38、所述处理器通过调用所述存储器存储的程序或指令,用于执行上述任一种方法的步骤。

39、本公开实施例提供的技术方案与现有技术相比具有如下优点:

40、本公开实施例提供的技术方案,在应用程序出现运行错误的情况下,先追溯本地层堆栈,其次在文件描述符对应的当前打开位置处的进程处于第一开发环境的情况下,调用第一开发环境对应的应用层堆栈,这样在本地层堆栈的基础上添加了应用层堆栈,增加了堆栈的完整性;在此基础上,基于本地层堆栈和应用层堆栈,能够更加容易和准确地定位应用程序的源代码中发生文件描述符泄露的错误代码的位置信息。因此,本技术方案通过调用本地层堆栈和应用层堆栈,使得定位文件描述符泄露更加简单明了,有效减少了定位所需时间。

本文档来自技高网
...

【技术保护点】

1.一种文件描述符泄漏定位方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述通过回溯工具追溯本地层堆栈,包括:

3.根据权利要求2所述的方法,其特征在于,所述解析存在乱码的原始本地层堆栈,包括:

4.根据权利要求2所述的方法,其特征在于,所述通过回溯工具对所述原始本地层堆栈中的乱码进行修正,包括:

5.根据权利要求1所述的方法,其特征在于,所述判断所述文件描述符的当前打开位置处的进程是否处于第一开发环境,包括:

6.根据权利要求5所述的方法,其特征在于,所述方法还包括:

7.根据权利要求1所述的方法,其特征在于,所述调用所述第一开发环境对应的应用层堆栈,包括:

8.根据权利要求1所述的方法,其特征在于,所述基于所述本地层堆栈和所述应用层堆栈,定位所述应用程序的源代码中发生文件描述符泄露的错误代码的位置信息,包括:

9.一种文件描述符泄漏定位装置,其特征在于,包括:

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如权利要求1至7任一项所述方法的步骤。

11.一种电子设备,其特征在于,包括:

...

【技术特征摘要】

1.一种文件描述符泄漏定位方法,其特征在于,包括:

2.根据权利要求1所述的方法,其特征在于,所述通过回溯工具追溯本地层堆栈,包括:

3.根据权利要求2所述的方法,其特征在于,所述解析存在乱码的原始本地层堆栈,包括:

4.根据权利要求2所述的方法,其特征在于,所述通过回溯工具对所述原始本地层堆栈中的乱码进行修正,包括:

5.根据权利要求1所述的方法,其特征在于,所述判断所述文件描述符的当前打开位置处的进程是否处于第一开发环境,包括:

6.根据权利要求5所述的方法,其特征在于,所述方法还包...

【专利技术属性】
技术研发人员:孙广山
申请(专利权)人:北京罗克维尔斯科技有限公司
类型:发明
国别省市:

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

1