本公開(kāi)涉及計(jì)算機(jī)軟件,尤其涉及一種函數(shù)調(diào)用信息分析方法、裝置和存儲(chǔ)介質(zhì)。
背景技術(shù):
1、函數(shù)調(diào)用信息分析是分析程序、提升程序執(zhí)行效率的一種重要方法,當(dāng)前獲取函數(shù)調(diào)用信息的方式通常是利用gdb、valgrind等工具,或者是在源程序代碼中加入日志信息。gdb只能通過(guò)手動(dòng)調(diào)試命令查看棧信息,且無(wú)法針對(duì)所有斷點(diǎn)進(jìn)行全局分析;valgrind不能指定函數(shù)且收集的函數(shù)調(diào)用信息不夠豐富;而日志的方式需要在源程序代碼中加入大量額外的日志代碼,不僅沒(méi)有通用性且分析也很困難。可以看出當(dāng)前雖然有一些輔助函數(shù)調(diào)用信息分析的工具,但都只能滿足部分需求,都有各種各樣的缺點(diǎn),無(wú)法同時(shí)滿足可定制性、全局性,一旦程序達(dá)到一定的規(guī)模和復(fù)雜度后,這些輔助分析的工具很難分析出程序代碼的邏輯問(wèn)題和性能瓶頸。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本公開(kāi)提出了一種函數(shù)調(diào)用信息分析方法、裝置和存儲(chǔ)介質(zhì)。
2、根據(jù)本公開(kāi)的一方面,提供了一種函數(shù)調(diào)用信息分析方法。該方法包括:
3、獲取配置信息,配置信息用于指示待獲取函數(shù)調(diào)用信息的一個(gè)或多個(gè)第一目標(biāo)函數(shù);
4、根據(jù)配置信息運(yùn)行目標(biāo)程序,在運(yùn)行目標(biāo)程序的過(guò)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),得到第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息;
5、響應(yīng)于目標(biāo)程序運(yùn)行結(jié)束,對(duì)第二目標(biāo)函數(shù)的函數(shù)調(diào)用信息進(jìn)行分析,得到函數(shù)調(diào)用信息分析結(jié)果,第二目標(biāo)函數(shù)為一個(gè)或多個(gè)第一目標(biāo)函數(shù)中的部分或全部。
6、在一種可能的實(shí)現(xiàn)方式中,根據(jù)配置信息運(yùn)行目標(biāo)程序,在運(yùn)行目標(biāo)程序的過(guò)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),得到第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息,包括:
7、根據(jù)配置信息運(yùn)行目標(biāo)程序,在運(yùn)行目標(biāo)程序的過(guò)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),執(zhí)行第一目標(biāo)函數(shù)對(duì)應(yīng)的鉤子hook操作,得到第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息。
8、在一種可能的實(shí)現(xiàn)方式中,根據(jù)配置信息運(yùn)行目標(biāo)程序,在運(yùn)行目標(biāo)程序的過(guò)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),執(zhí)行第一目標(biāo)函數(shù)對(duì)應(yīng)的鉤子hook操作,得到第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息,包括:
9、在用于運(yùn)行目標(biāo)程序的目標(biāo)進(jìn)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),運(yùn)行自定義函數(shù)庫(kù)中與第一目標(biāo)函數(shù)關(guān)聯(lián)的自定義函數(shù),得到第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息。
10、在一種可能的實(shí)現(xiàn)方式中,目標(biāo)進(jìn)程在子進(jìn)程中通過(guò)預(yù)設(shè)的預(yù)加載環(huán)境變量啟動(dòng),子進(jìn)程在主進(jìn)程中通過(guò)系統(tǒng)調(diào)用創(chuàng)建。
11、在一種可能的實(shí)現(xiàn)方式中,配置信息還用于指示待獲取的函數(shù)調(diào)用信息的類(lèi)型,根據(jù)配置信息運(yùn)行目標(biāo)程序,在運(yùn)行目標(biāo)程序的過(guò)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),得到第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息,包括:
12、根據(jù)配置信息運(yùn)行目標(biāo)程序,在運(yùn)行目標(biāo)程序的過(guò)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),得到與待獲取的函數(shù)調(diào)用信息的類(lèi)型相對(duì)應(yīng)的第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息。
13、在一種可能的實(shí)現(xiàn)方式中,待獲取的函數(shù)調(diào)用信息的類(lèi)型包括以下中的一種或多種:進(jìn)程標(biāo)識(shí)、線程標(biāo)識(shí)、函數(shù)調(diào)用棧信息、函數(shù)執(zhí)行時(shí)間。
14、在一種可能的實(shí)現(xiàn)方式中,配置信息還用于指示第二目標(biāo)函數(shù)以及針對(duì)第二目標(biāo)函數(shù)的函數(shù)調(diào)用信息的分析方式,響應(yīng)于目標(biāo)程序運(yùn)行結(jié)束,對(duì)第二目標(biāo)函數(shù)的函數(shù)調(diào)用信息進(jìn)行分析,得到函數(shù)調(diào)用信息分析結(jié)果,包括:
15、響應(yīng)于目標(biāo)程序運(yùn)行結(jié)束,基于針對(duì)函數(shù)調(diào)用信息的分析方式對(duì)第二目標(biāo)函數(shù)的函數(shù)調(diào)用信息進(jìn)行分析,得到函數(shù)調(diào)用信息分析結(jié)果。
16、在一種可能的實(shí)現(xiàn)方式中,該方法還包括:
17、在運(yùn)行自定義函數(shù)庫(kù)中與第一目標(biāo)函數(shù)關(guān)聯(lián)的自定義函數(shù)的過(guò)程中,獲取第一目標(biāo)函數(shù)的指針以調(diào)用第一目標(biāo)函數(shù);
18、將得到的第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息通過(guò)自定義格式的文件寫(xiě)入存儲(chǔ)系統(tǒng)中;
19、響應(yīng)于目標(biāo)程序運(yùn)行結(jié)束,對(duì)第二目標(biāo)函數(shù)的函數(shù)調(diào)用信息進(jìn)行分析,得到函數(shù)調(diào)用信息分析結(jié)果,包括:
20、響應(yīng)于目標(biāo)程序運(yùn)行結(jié)束,從存儲(chǔ)系統(tǒng)中獲取包括第二目標(biāo)函數(shù)的函數(shù)調(diào)用信息的自定義格式的文件進(jìn)行分析,得到函數(shù)調(diào)用信息分析結(jié)果。
21、根據(jù)本公開(kāi)的另一方面,提供了一種函數(shù)調(diào)用信息分析裝置。該裝置包括:
22、第一獲取模塊,用于獲取配置信息,配置信息用于指示待獲取函數(shù)調(diào)用信息的一個(gè)或多個(gè)第一目標(biāo)函數(shù);
23、確定模塊,用于根據(jù)配置信息運(yùn)行目標(biāo)程序,在運(yùn)行目標(biāo)程序的過(guò)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),得到第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息;
24、分析模塊,用于響應(yīng)于目標(biāo)程序運(yùn)行結(jié)束,對(duì)第二目標(biāo)函數(shù)的函數(shù)調(diào)用信息進(jìn)行分析,得到函數(shù)調(diào)用信息分析結(jié)果,第二目標(biāo)函數(shù)為一個(gè)或多個(gè)第一目標(biāo)函數(shù)中的部分或全部。
25、在一種可能的實(shí)現(xiàn)方式中,確定模塊,用于:
26、根據(jù)配置信息運(yùn)行目標(biāo)程序,在運(yùn)行目標(biāo)程序的過(guò)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),執(zhí)行第一目標(biāo)函數(shù)對(duì)應(yīng)的鉤子hook操作,得到第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息。
27、在一種可能的實(shí)現(xiàn)方式中,根據(jù)配置信息運(yùn)行目標(biāo)程序,在運(yùn)行目標(biāo)程序的過(guò)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),執(zhí)行第一目標(biāo)函數(shù)對(duì)應(yīng)的鉤子hook操作,得到第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息,包括:
28、在用于運(yùn)行目標(biāo)程序的目標(biāo)進(jìn)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),運(yùn)行自定義函數(shù)庫(kù)中與第一目標(biāo)函數(shù)關(guān)聯(lián)的自定義函數(shù),得到第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息。
29、在一種可能的實(shí)現(xiàn)方式中,目標(biāo)進(jìn)程在子進(jìn)程中通過(guò)預(yù)設(shè)的預(yù)加載環(huán)境變量啟動(dòng),子進(jìn)程在主進(jìn)程中通過(guò)系統(tǒng)調(diào)用創(chuàng)建。
30、在一種可能的實(shí)現(xiàn)方式中,配置信息還用于指示待獲取的函數(shù)調(diào)用信息的類(lèi)型,確定模塊,用于:
31、根據(jù)配置信息運(yùn)行目標(biāo)程序,在運(yùn)行目標(biāo)程序的過(guò)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),得到與待獲取的函數(shù)調(diào)用信息的類(lèi)型相對(duì)應(yīng)的第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息。
32、在一種可能的實(shí)現(xiàn)方式中,待獲取的函數(shù)調(diào)用信息的類(lèi)型包括以下中的一種或多種:進(jìn)程標(biāo)識(shí)、線程標(biāo)識(shí)、函數(shù)調(diào)用棧信息、函數(shù)執(zhí)行時(shí)間。
33、在一種可能的實(shí)現(xiàn)方式中,配置信息還用于指示第二目標(biāo)函數(shù)以及針對(duì)第二目標(biāo)函數(shù)的函數(shù)調(diào)用信息的分析方式,分析模塊,用于:
34、響應(yīng)于目標(biāo)程序運(yùn)行結(jié)束,基于針對(duì)函數(shù)調(diào)用信息的分析方式對(duì)第二目標(biāo)函數(shù)的函數(shù)調(diào)用信息進(jìn)行分析,得到函數(shù)調(diào)用信息分析結(jié)果。
35、在一種可能的實(shí)現(xiàn)方式中,該裝置還包括:
36、第二獲取模塊,用于在運(yùn)行自定義函數(shù)庫(kù)中與第一目標(biāo)函數(shù)關(guān)聯(lián)的自定義函數(shù)的過(guò)程中,獲取第一目標(biāo)函數(shù)的指針以調(diào)用第一目標(biāo)函數(shù);
37、寫(xiě)入模塊,用于將得到的第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息通過(guò)自定義格式的文件寫(xiě)入存儲(chǔ)系統(tǒng)中;
38、分析模塊,用于:
39、響應(yīng)于目標(biāo)程序運(yùn)行結(jié)束,從存儲(chǔ)系統(tǒng)中獲取包括第二目標(biāo)函數(shù)的函數(shù)調(diào)用信息的自定義格式的文件進(jìn)行分析,得到函數(shù)調(diào)用信息分析結(jié)果。
40、根據(jù)本公開(kāi)的另一方面,提供了一種函數(shù)調(diào)用信息分析裝置,包括:處理器;用于存儲(chǔ)處理器可執(zhí)行指令的存儲(chǔ)器;其中,所述處理器被配置為在執(zhí)行所述存儲(chǔ)器存儲(chǔ)的指令時(shí),實(shí)現(xiàn)上述方法。
41、根據(jù)本公開(kāi)的另一方面,提供了一種非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序指令,其中,所述計(jì)算機(jī)程序指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)上述方法。
42、根據(jù)本公開(kāi)的另一方面,提供了一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)可讀代碼,或者承載有計(jì)算機(jī)可讀代碼的非易失性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),當(dāng)所述計(jì)算機(jī)可讀代碼在電子設(shè)備的處理器中運(yùn)行時(shí),所述電子設(shè)備中的處理器執(zhí)行上述方法。
43、根據(jù)本技術(shù)實(shí)施例,通過(guò)獲取用于指示待獲取函數(shù)調(diào)用信息的一個(gè)或多個(gè)第一目標(biāo)函數(shù)的配置信息,可以實(shí)現(xiàn)在獲取函數(shù)調(diào)用信息的過(guò)程中可以指定函數(shù),收集指定函數(shù)的調(diào)用信息,具有可定制性。通過(guò)根據(jù)配置信息運(yùn)行目標(biāo)程序,在運(yùn)行目標(biāo)程序的過(guò)程中響應(yīng)于調(diào)用第一目標(biāo)函數(shù),獲取第一目標(biāo)函數(shù)的函數(shù)調(diào)用信息,可以獲取豐富的函數(shù)調(diào)用信息,通過(guò)響應(yīng)于目標(biāo)程序運(yùn)行結(jié)束,對(duì)第二目標(biāo)函數(shù)的函數(shù)調(diào)用信息進(jìn)行分析,得到函數(shù)調(diào)用信息分析結(jié)果,可以實(shí)現(xiàn)針對(duì)所有斷點(diǎn)進(jìn)行全局分析,具有全局性。且在此過(guò)程中無(wú)需在目標(biāo)程序中加入額外的代碼,具有低侵入性和通用性,適用于大規(guī)模和高復(fù)雜度的程序,對(duì)于各種程序都可分析出目標(biāo)程序代碼的邏輯問(wèn)題和性能瓶頸。
44、根據(jù)下面參考附圖對(duì)示例性實(shí)施例的詳細(xì)說(shuō)明,本公開(kāi)的其它特征及方面將變得清楚。