国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法及組件與流程

      文檔序號(hào):11250775閱讀:367來(lái)源:國(guó)知局
      一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法及組件與流程

      本申請(qǐng)涉及視頻直播領(lǐng)域,尤其涉及一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法及組件。



      背景技術(shù):

      目前,隨著網(wǎng)絡(luò)通信技術(shù)的進(jìn)步和寬帶網(wǎng)絡(luò)的提速,網(wǎng)絡(luò)直播得到了越來(lái)越多的發(fā)展和應(yīng)用。尤其在游戲直播領(lǐng)域,越來(lái)越多的觀眾會(huì)觀看游戲主播的直播。對(duì)于游戲直播,主播是通過(guò)使用直播平臺(tái)提供的直播軟件進(jìn)行直播。對(duì)于客戶端軟件,通常需要統(tǒng)計(jì)其軟件的性能瓶頸,從而提升軟件的性能,提高用戶的體驗(yàn)。如果是在軟件開(kāi)發(fā)的時(shí)候,比較容易的可以加入對(duì)每個(gè)函數(shù)的調(diào)用時(shí)間和調(diào)用次數(shù)進(jìn)行統(tǒng)計(jì),但是如果軟件已經(jīng)發(fā)布,則是沒(méi)有辦法來(lái)統(tǒng)計(jì)每個(gè)函數(shù)的調(diào)用時(shí)間和調(diào)用次數(shù)的。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明了提供了一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法及組件,以解決目前面臨的如果軟件已經(jīng)發(fā)布,則沒(méi)有辦法來(lái)統(tǒng)計(jì)每個(gè)函數(shù)的調(diào)用時(shí)間和調(diào)用次數(shù)的技術(shù)問(wèn)題。

      為解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法,所述方法應(yīng)用在統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的組件中,所述方法包括:

      在所述應(yīng)用程序運(yùn)行時(shí),利用所述組件中的鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)調(diào)用信息文件map文件中的所有函數(shù)的函數(shù)頭在預(yù)設(shè)時(shí)間內(nèi)各自的調(diào)用次數(shù),和所述所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻;其中,所述組件注入所述應(yīng)用程序的進(jìn)程中;

      利用所述鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)所述map文件中的所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻;

      基于所述map文件中的所述所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻以及所述所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻,確定出所述所有函數(shù)在所述預(yù)設(shè)時(shí)間內(nèi)的調(diào)用時(shí)間。

      為了避免發(fā)布之后的應(yīng)用程序無(wú)法監(jiān)控其函數(shù)調(diào)用情況(調(diào)用時(shí)間、調(diào)用次數(shù)等等),本發(fā)明通過(guò)上述方法在應(yīng)用程序運(yùn)行時(shí)對(duì)其進(jìn)行監(jiān)控,然后將該組件注入到運(yùn)行的應(yīng)用程序進(jìn)程中,該組件具有監(jiān)控應(yīng)用程序的所有函數(shù)調(diào)用情況的功能,并統(tǒng)計(jì)每個(gè)函數(shù)的調(diào)用次數(shù)和調(diào)用時(shí)間,最后將統(tǒng)計(jì)的結(jié)果輸出。

      優(yōu)選的,所述map文件中至少記錄了所述所有函數(shù)的函數(shù)名稱、函數(shù)地址,函數(shù)長(zhǎng)度、所有的全局變量、全局變量名的地址。有了map文件,本發(fā)明就可以直接調(diào)用map文件,進(jìn)而為對(duì)所有函數(shù)進(jìn)行監(jiān)控。

      優(yōu)選的,所述利用所述組件中的鉤子函數(shù)庫(kù)鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)調(diào)用信息文件map文件中的所有函數(shù)的函數(shù)頭在預(yù)設(shè)時(shí)間內(nèi)各自的調(diào)用次數(shù),和所述所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻之前,還包括:利用所述鉤子函數(shù)庫(kù)的鉤子函數(shù)監(jiān)控所述所有函數(shù)的函數(shù)頭。鉤子函數(shù)庫(kù)可以將自身的代碼“融入”被監(jiān)控的程序的進(jìn)程中,成為目標(biāo)進(jìn)程的一個(gè)部分,從而可以對(duì)程序進(jìn)行監(jiān)控,還可以在目標(biāo)代碼中加入自己的邏輯。

      優(yōu)選的,所述利用所述鉤子函數(shù)庫(kù)的鉤子函數(shù)監(jiān)控所述所有函數(shù)的函數(shù)頭,包括:獲取所述組件在終端設(shè)備的內(nèi)存中的起始地址;讀取所述map文件中的所有函數(shù)的函數(shù)名稱、函數(shù)地址;其中,所述所有函數(shù)的函數(shù)地址為各自相對(duì)于所述組件的函數(shù)地址;將所述所有函數(shù)的函數(shù)地址各自相對(duì)于所述組件的函數(shù)地址分別和所述組件在內(nèi)存中的起始地址求和,獲得所述所有函數(shù)各自的內(nèi)存地址;所述所有函數(shù)各自的內(nèi)存地址就是所述所有函數(shù)各自的函數(shù)頭;利用所述鉤子函數(shù)庫(kù)對(duì)所述所有函數(shù)各自的內(nèi)存地址進(jìn)行監(jiān)控。

      優(yōu)選的,所述將所述所有函數(shù)的函數(shù)地址各自相對(duì)于所述組件的函數(shù)地址分別和所述組件在內(nèi)存中的起始地址求和,獲得所述所有函數(shù)各自的內(nèi)存地址;所述所有函數(shù)各自的內(nèi)存地址就是所述所有函數(shù)各自的函數(shù)頭,包括:利用所述鉤子函數(shù)庫(kù)監(jiān)控所述所有函數(shù)從各自的內(nèi)存地址調(diào)用的調(diào)用次數(shù)和調(diào)用時(shí)刻。

      優(yōu)選的,所述利用所述鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)所述map文件中的所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻,包括:讀取所述所有函數(shù)的函數(shù)名稱、函數(shù)地址、函數(shù)長(zhǎng)度;將所述所有函數(shù)各自的函數(shù)地址和函數(shù)長(zhǎng)度求和,獲得所述所有函數(shù)各自的尾地址;利用所述鉤子函數(shù)庫(kù)對(duì)所述所有函數(shù)各自的尾地址進(jìn)行監(jiān)控,獲得所述所有函數(shù)各自的尾地址的調(diào)用時(shí)刻。

      本發(fā)明公開(kāi)了一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的組件,所述組件注入在所述應(yīng)用程序的進(jìn)程中,用以對(duì)所述應(yīng)用程序中的所有函數(shù)的調(diào)用時(shí)間和調(diào)用次數(shù)進(jìn)行監(jiān)控,包括:

      第一監(jiān)控模塊,用于在所述應(yīng)用程序運(yùn)行時(shí),利用所述組件中的鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)調(diào)用信息文件map文件中的所有函數(shù)的函數(shù)頭在預(yù)設(shè)時(shí)間內(nèi)各自的調(diào)用次數(shù),和所述所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻;其中,所述組件注入所述應(yīng)用程序的進(jìn)程中;

      第二監(jiān)控模塊,用于利用所述鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)所述map文件中的所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻;

      確定模塊,用于基于所述map文件中的所述所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻以及所述所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻,確定出所述所有函數(shù)在所述預(yù)設(shè)時(shí)間內(nèi)的調(diào)用時(shí)間。

      優(yōu)選的,所述map文件中至少記錄了所述所有函數(shù)的函數(shù)名稱、函數(shù)地址,函數(shù)長(zhǎng)度、所有的全局變量、全局變量名的地址。

      優(yōu)選的,所述組件還包括:

      第三監(jiān)控模塊,用于利用所述鉤子函數(shù)庫(kù)的鉤子函數(shù)監(jiān)控所述所有函數(shù)的函數(shù)頭。

      優(yōu)選的,所述第三監(jiān)控模塊,包括:

      獲取模塊,用于獲取所述組件在終端設(shè)備的內(nèi)存中的起始地址;

      讀取模塊,用于讀取所述map文件中的所有函數(shù)的函數(shù)名稱、函數(shù)地址;其中,所述所有函數(shù)的函數(shù)地址為各自相對(duì)于所述組件的函數(shù)地址;

      獲得模塊,用于將所述所有函數(shù)的函數(shù)地址各自相對(duì)于所述組件的函數(shù)地址分別和所述組件在內(nèi)存中的起始地址求和,獲得所述所有函數(shù)各自的內(nèi)存地址;所述所有函數(shù)各自的內(nèi)存地址就是所述所有函數(shù)各自的函數(shù)頭;

      監(jiān)控子模塊,用于利用所述鉤子函數(shù)庫(kù)對(duì)所述所有函數(shù)各自的內(nèi)存地址進(jìn)行監(jiān)控。

      通過(guò)本發(fā)明的一個(gè)或者多個(gè)技術(shù)方案,本發(fā)明具有以下有益效果或者優(yōu)點(diǎn):

      本發(fā)明公開(kāi)了一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法,為了避免發(fā)布之后的應(yīng)用程序無(wú)法監(jiān)控其函數(shù)調(diào)用情況,所述方法應(yīng)用在統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的組件中,用以監(jiān)控應(yīng)用程序的函數(shù)調(diào)用情況。在該應(yīng)用程序運(yùn)行時(shí),利用所述組件中的鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)調(diào)用信息文件map文件中的所有函數(shù)的函數(shù)頭在預(yù)設(shè)時(shí)間內(nèi)各自的調(diào)用次數(shù),和所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻;然后利用所述鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)所述map文件中的所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻;基于所述map文件中的所述所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻以及所述所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻,確定出所述所有函數(shù)在所述預(yù)設(shè)時(shí)間內(nèi)的調(diào)用時(shí)間。進(jìn)而,本發(fā)明可以在應(yīng)用程序運(yùn)行時(shí),實(shí)時(shí)統(tǒng)計(jì)函數(shù)的調(diào)用情況。

      附圖說(shuō)明

      圖1為本發(fā)明實(shí)施例中一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法的流程圖;

      圖2為本發(fā)明實(shí)施例中一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的組件的示意圖。

      具體實(shí)施方式

      本發(fā)明了提供了一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法及組件,為了避免發(fā)布之后的應(yīng)用程序無(wú)法監(jiān)控其函數(shù)調(diào)用情況(調(diào)用時(shí)間、調(diào)用次數(shù)等等),本發(fā)明編寫(xiě)了一個(gè)可以用于在應(yīng)用程序運(yùn)行時(shí)對(duì)其進(jìn)行監(jiān)控的組件,然后將該組件注入到運(yùn)行的應(yīng)用程序進(jìn)程中,該組件具有監(jiān)控應(yīng)用程序的所有函數(shù)調(diào)用情況的功能,并統(tǒng)計(jì)每個(gè)函數(shù)的調(diào)用次數(shù)和調(diào)用時(shí)間,最后將統(tǒng)計(jì)的結(jié)果輸出。所以后續(xù)的hook(鉤子函數(shù),用來(lái)監(jiān)控函數(shù)的調(diào)用情況)功能代碼都編寫(xiě)在這個(gè)組件中。組件注入的方式則有很多,可以是遠(yuǎn)程線程注入、消息鉤子注入等等。

      本發(fā)明的應(yīng)用程序可為任意應(yīng)用程序,例如直播視頻軟件、語(yǔ)音聊天軟件等等,對(duì)此本發(fā)明不做限制。

      為了使本申請(qǐng)所屬技術(shù)領(lǐng)域中的技術(shù)人員更清楚地理解本申請(qǐng),下面結(jié)合附圖,通過(guò)具體實(shí)施例對(duì)本申請(qǐng)技術(shù)方案作詳細(xì)描述。

      本發(fā)明公開(kāi)了一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法,所述方法應(yīng)用在統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的組件中。

      參看圖1,是本發(fā)明提供的一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法的流程圖,該方法包括:

      步驟11,在所述應(yīng)用程序運(yùn)行時(shí),利用所述組件中的鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)調(diào)用信息文件map文件中的所有函數(shù)的函數(shù)頭在預(yù)設(shè)時(shí)間內(nèi)各自的調(diào)用次數(shù),和所述所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻。

      在具體的實(shí)施過(guò)程中,本發(fā)明的組件注入在所述應(yīng)用程序的進(jìn)程中。故而,在應(yīng)用程序運(yùn)行時(shí),該組件即可利用組件中的鉤子函數(shù)庫(kù)對(duì)該應(yīng)用程序中的所有函數(shù)進(jìn)行監(jiān)控,進(jìn)而避免無(wú)法對(duì)發(fā)布后的軟件中的函數(shù)的調(diào)用時(shí)間、調(diào)用次數(shù)進(jìn)行監(jiān)控的漏洞。后續(xù)本發(fā)明會(huì)介紹應(yīng)用在組件中的統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的具體實(shí)施過(guò)程,即如何對(duì)應(yīng)用程序的所有函數(shù)進(jìn)行監(jiān)控統(tǒng)計(jì)。在此,本發(fā)明先介紹map文件的創(chuàng)建。

      map文件,是事先在使用編譯器生成軟件(即應(yīng)用程序)的執(zhí)行文件時(shí)加入生成的。在使用編譯器編譯軟件的代碼的時(shí)候,可以在編譯器選項(xiàng)中加入‘生成map文件’這一選項(xiàng),進(jìn)而編譯器則會(huì)根據(jù)開(kāi)發(fā)者的操作來(lái)生成map文件。

      其中,map文件實(shí)際是一個(gè)調(diào)用信息文件,其包含有該應(yīng)用程序中所有函數(shù)的函數(shù)名稱、函數(shù)地址(即:函數(shù)的相對(duì)于模塊的地址),函數(shù)長(zhǎng)度,所有的全局變量名,全局變量名的地址等。有了map文件,就具有了對(duì)應(yīng)于該模塊的所有函數(shù)的名稱,以及該函數(shù)在運(yùn)行時(shí)的內(nèi)存地址,以及函數(shù)的代碼的長(zhǎng)度信息。有了map文件,組件即可以調(diào)用map文件,進(jìn)而為對(duì)所有函數(shù)進(jìn)行監(jiān)控,通過(guò)使用鉤子函數(shù)將自身的代碼“融入”被監(jiān)控的程序的進(jìn)程中,成為目標(biāo)進(jìn)程的一個(gè)部分,從而可以對(duì)程序進(jìn)行監(jiān)控,還可以在目標(biāo)代碼中加入自己的邏輯。

      作為一種可選的實(shí)施方式,鉤子函數(shù)庫(kù)可采用detours庫(kù),detours庫(kù)是一個(gè)hook(監(jiān)控)工具庫(kù),里面包含了各類鉤子函數(shù),可滿足對(duì)任一函數(shù)進(jìn)行監(jiān)控的可能。

      下面介紹如何對(duì)應(yīng)用程序的所有函數(shù)進(jìn)行監(jiān)控統(tǒng)計(jì)。

      在此之前,需要利用所述鉤子函數(shù)庫(kù)的鉤子函數(shù)監(jiān)控所述所有函數(shù)的函數(shù)頭。

      在監(jiān)控所有函數(shù)的函數(shù)頭時(shí),本發(fā)明使用內(nèi)聯(lián)監(jiān)控方式,其原理是在函數(shù)的開(kāi)頭加入一個(gè)匯編的“jmp”指令,通過(guò)這個(gè)挑戰(zhàn)則可以跳轉(zhuǎn)到我們插入的代碼邏輯中,代碼邏輯是組件的組成代碼,運(yùn)行代碼邏輯即執(zhí)行該組件的功能,然后等插入的代碼邏輯執(zhí)行完成后,再跳轉(zhuǎn)到hook的函數(shù)接著其邏輯繼續(xù)執(zhí)行。本發(fā)明在插入的代碼邏輯中,加入了對(duì)函數(shù)的調(diào)用次數(shù)統(tǒng)計(jì)信息,用以對(duì)函數(shù)的調(diào)用次數(shù)進(jìn)行統(tǒng)計(jì)。例如,可以加入一個(gè)變量來(lái)統(tǒng)計(jì)函數(shù)的調(diào)用次數(shù),并且沒(méi)執(zhí)行一次則計(jì)數(shù)加1,最終統(tǒng)計(jì)完成時(shí),該變量的值則是該段統(tǒng)計(jì)時(shí)段內(nèi)函數(shù)的調(diào)用次數(shù)。

      另外,本發(fā)明也可以記錄下當(dāng)前調(diào)用的時(shí)刻,后續(xù)在函數(shù)尾進(jìn)行監(jiān)控時(shí)也會(huì)加入當(dāng)前調(diào)用的時(shí)刻,通過(guò)函數(shù)尾的時(shí)刻減去函數(shù)頭的時(shí)刻則可以得到監(jiān)控的這個(gè)函數(shù)在執(zhí)行一次所花費(fèi)的時(shí)間。

      本文使用微軟提供的開(kāi)源的內(nèi)聯(lián)監(jiān)控工具detours(detours是微軟開(kāi)發(fā)的一個(gè)hook工具庫(kù))來(lái)實(shí)現(xiàn)監(jiān)控功能。

      下面介紹具體的實(shí)施過(guò)程。

      第1步,獲取所述組件在終端設(shè)備的內(nèi)存中的起始地址。

      對(duì)于組件在內(nèi)存的加載起始地址每次都是不一樣的,所以需要先獲取組件在終端設(shè)備的內(nèi)存的起始地址。

      hmodulegetmodulehandle(lpctstrlpmodulename);

      通過(guò)調(diào)用windowsapi函數(shù)getmodulehandle來(lái)獲取組件的內(nèi)存起始地址。

      其中,參數(shù)pmodulename則傳入組件的名稱。

      其中,返回值hmodule則是組件的內(nèi)存起始地址。

      第2步,讀取所述map文件中的所有函數(shù)的函數(shù)名稱、函數(shù)地址。

      其中,所述所有函數(shù)的函數(shù)地址為各自相對(duì)于組件的函數(shù)地址。在map文件中會(huì)有所有函數(shù)的名稱及函數(shù)地址,通過(guò)讀取map文件的內(nèi)容則可以獲取到所有函數(shù)的名稱和函數(shù)地址。

      第3步,將所述所有函數(shù)的函數(shù)地址各自相對(duì)于所述組件的函數(shù)地址分別和所述組件在內(nèi)存中的起始地址求和,獲得所述所有函數(shù)各自的內(nèi)存地址。其中,所述所有函數(shù)各自的內(nèi)存地址就是所述所有函數(shù)各自的函數(shù)頭。

      第4步,利用所述鉤子函數(shù)庫(kù)對(duì)所述所有函數(shù)各自的內(nèi)存地址進(jìn)行監(jiān)控。

      故而,在調(diào)用時(shí),利用所述鉤子函數(shù)庫(kù)監(jiān)控所述所有函數(shù)從各自的內(nèi)存地址調(diào)用的調(diào)用次數(shù)和調(diào)用時(shí)刻。

      步驟12,利用所述鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)所述map文件中的所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻。

      在具體的實(shí)施過(guò)程中,利用所述鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)所述map文件中的所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻,包括:讀取所述所有函數(shù)的函數(shù)名稱、函數(shù)地址、函數(shù)長(zhǎng)度;

      將所述所有函數(shù)各自的函數(shù)地址和函數(shù)長(zhǎng)度求和,獲得所述所有函數(shù)各自的尾地址;

      利用所述鉤子函數(shù)庫(kù)對(duì)所述所有函數(shù)各自的尾地址進(jìn)行監(jiān)控,獲得所述所有函數(shù)各自的尾地址的調(diào)用時(shí)刻。

      步驟13,基于所述map文件中的所述所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻以及所述所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻,確定出所述所有函數(shù)在所述預(yù)設(shè)時(shí)間內(nèi)的調(diào)用時(shí)間。

      在對(duì)map中的所有函數(shù)的函數(shù)頭和函數(shù)尾進(jìn)行監(jiān)控后,并且在函數(shù)頭有計(jì)算每個(gè)函數(shù)頭的調(diào)用次數(shù)統(tǒng)計(jì),并且在函數(shù)頭和函數(shù)尾都有記錄當(dāng)前調(diào)用的時(shí)刻,通過(guò)對(duì)同一個(gè)函數(shù)的這2個(gè)時(shí)刻則可以計(jì)算出該函數(shù)執(zhí)行一次的時(shí)間。所以可以統(tǒng)計(jì)軟件在一段時(shí)間內(nèi)所有函數(shù)的執(zhí)行次數(shù)以及執(zhí)行時(shí)間,并且可以將統(tǒng)計(jì)結(jié)果輸出成文本的形式,從而可以方便的定位軟件的性能瓶頸等問(wèn)題。

      基于同一發(fā)明構(gòu)思,本發(fā)明還公開(kāi)了一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的組件,所述組件注入在所述應(yīng)用程序的進(jìn)程中,用以對(duì)所述應(yīng)用程序中的所有函數(shù)的調(diào)用時(shí)間和調(diào)用次數(shù)進(jìn)行監(jiān)控。

      參看圖2,本發(fā)明還公開(kāi)的一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的組件,包括:

      第一監(jiān)控模塊21,用于在所述應(yīng)用程序運(yùn)行時(shí),利用所述組件中的鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)調(diào)用信息文件map文件中的所有函數(shù)的函數(shù)頭在預(yù)設(shè)時(shí)間內(nèi)各自的調(diào)用次數(shù),和所述所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻;其中,所述組件注入所述應(yīng)用程序的進(jìn)程中;

      第二監(jiān)控模塊22,用于利用所述鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)所述map文件中的所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻;

      確定模塊23,用于基于所述map文件中的所述所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻以及所述所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻,確定出所述所有函數(shù)在所述預(yù)設(shè)時(shí)間內(nèi)的調(diào)用時(shí)間。

      作為一種可選的實(shí)施例,所述map文件中至少記錄了所述所有函數(shù)的函數(shù)名稱、函數(shù)地址,函數(shù)長(zhǎng)度、所有的全局變量、全局變量名的地址。

      作為一種可選的實(shí)施例,所述組件還包括:

      第三監(jiān)控模塊,用于利用所述鉤子函數(shù)庫(kù)的鉤子函數(shù)監(jiān)控所述所有函數(shù)的函數(shù)頭。

      作為一種可選的實(shí)施例,所述第三監(jiān)控模塊,包括:

      獲取模塊,用于獲取所述組件在終端設(shè)備的內(nèi)存中的起始地址;

      讀取模塊,用于讀取所述map文件中的所有函數(shù)的函數(shù)名稱、函數(shù)地址;其中,所述所有函數(shù)的函數(shù)地址為各自相對(duì)于所述組件的函數(shù)地址;

      獲得模塊,用于將所述所有函數(shù)的函數(shù)地址各自相對(duì)于所述組件的函數(shù)地址分別和所述組件在內(nèi)存中的起始地址求和,獲得所述所有函數(shù)各自的內(nèi)存地址;所述所有函數(shù)各自的內(nèi)存地址就是所述所有函數(shù)各自的函數(shù)頭;

      監(jiān)控子模塊,用于利用所述鉤子函數(shù)庫(kù)對(duì)所述所有函數(shù)各自的內(nèi)存地址進(jìn)行監(jiān)控。

      本文提供了一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法及組件,來(lái)對(duì)已經(jīng)發(fā)布的客戶端軟件來(lái)統(tǒng)計(jì)每個(gè)函數(shù)的調(diào)用次數(shù)及每個(gè)函數(shù)的調(diào)用時(shí)間統(tǒng)計(jì)。從而無(wú)需在軟件開(kāi)發(fā)的時(shí)候加入函數(shù)統(tǒng)計(jì)的功能。對(duì)于已經(jīng)發(fā)布的軟件通過(guò)使用本文的方法也可以進(jìn)行統(tǒng)計(jì)函數(shù)的調(diào)用次數(shù)及時(shí)間功能。

      通過(guò)本發(fā)明的一個(gè)或者多個(gè)實(shí)施例,本發(fā)明具有以下有益效果或者優(yōu)點(diǎn):

      本發(fā)明公開(kāi)了一種統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的方法,為了避免發(fā)布之后的應(yīng)用程序無(wú)法監(jiān)控其函數(shù)調(diào)用情況,所述方法應(yīng)用在統(tǒng)計(jì)應(yīng)用程序中的函數(shù)調(diào)用的組件中,用以監(jiān)控應(yīng)用程序的函數(shù)調(diào)用情況。在該應(yīng)用程序運(yùn)行時(shí),利用所述組件中的鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)調(diào)用信息文件map文件中的所有函數(shù)的函數(shù)頭在預(yù)設(shè)時(shí)間內(nèi)各自的調(diào)用次數(shù),和所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻;然后利用所述鉤子函數(shù)庫(kù)監(jiān)控統(tǒng)計(jì)所述map文件中的所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻;基于所述map文件中的所述所有函數(shù)的函數(shù)頭各自的調(diào)用時(shí)刻以及所述所有函數(shù)的函數(shù)尾各自的調(diào)用時(shí)刻,確定出所述所有函數(shù)在所述預(yù)設(shè)時(shí)間內(nèi)的調(diào)用時(shí)間。進(jìn)而,本發(fā)明可以在應(yīng)用程序運(yùn)行時(shí),實(shí)時(shí)統(tǒng)計(jì)函數(shù)的調(diào)用情況。

      盡管已描述了本申請(qǐng)的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的普通技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請(qǐng)范圍的所有變更和修改。

      顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本申請(qǐng)進(jìn)行各種改動(dòng)和變型而不脫離本申請(qǐng)的精神和范圍。這樣,倘若本申請(qǐng)的這些修改和變型屬于本申請(qǐng)權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請(qǐng)也意圖包含這些改動(dòng)和變型在內(nèi)。

      當(dāng)前第1頁(yè)1 2 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1