本申请涉及计算机,具体而言,涉及一种函数调用链确定方法及相关装置。
背景技术:
1、前端页面的长任务指的是浏览器主线程中执行时间较长的任务,例如执行时长超过50毫秒的任务。目前,对长任务的监听一直是一个技术难点。
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、为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
1.一种函数调用链确定方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述在待检测任务执行完成的情况下,获取前端执行信息和待检测任务的时间参数,包括:
3.根据权利要求1所述的方法,其特征在于,所述前端执行信息包括样本数组和栈数组,所述样本数组中包括多个任务样本,所述栈数组中包括多个栈,且每个所述栈对应至少一个任务样本;
4.根据权利要求3所述的方法,其特征在于,所述时间参数包括执行起始时间和第一执行时长,所述根据所述时间参数从所述样本数组中确定所述待检测任务对应的目标任务样本,包括:
5.根据权利要求3所述的方法,其特征在于,所述前端执行信息还包括帧数组,所述帧数组中包括多个帧,且每个帧对应一个栈;
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
7.根据权利要求6所述的方法,其特征在于,所述根据所述时间参数和所述前端执行信息,计算可信度参数,包括:
8.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机程序,所述处理器可执行所述计算机程序以实现权利要求1-7任一项所述的方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-7任一项所述的方法。
10.一种程序产品,其特征在于,所述程序产品被处理器执行时,实现如权利要求1-7任一项所述的方法。