亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

檢測(cè)內(nèi)存泄漏的方法、裝置及電子設(shè)備與流程

文檔序號(hào):11230361閱讀:551來源:國(guó)知局
檢測(cè)內(nèi)存泄漏的方法、裝置及電子設(shè)備與流程

本申請(qǐng)涉及軟件測(cè)試技術(shù)領(lǐng)域,具體而言,涉及檢測(cè)內(nèi)存泄漏的方法、裝置及電子設(shè)備。



背景技術(shù):

內(nèi)存泄漏是指程序里由于疏忽或錯(cuò)誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存。內(nèi)存泄漏會(huì)因?yàn)闇p少可用內(nèi)存的數(shù)量從而降低計(jì)算機(jī)的性能。最終,在最糟糕的情況下,過多的可用內(nèi)存被分配掉導(dǎo)致全部或部分設(shè)備停止正常工作,或者應(yīng)用程序崩潰。

在一些軟件中可能會(huì)有非常多的用戶界面,由于用戶界面通常會(huì)加載一些圖形和特效,當(dāng)程序的代碼寫得不規(guī)范時(shí),導(dǎo)致容易出現(xiàn)內(nèi)存泄漏。例如大型的手機(jī)游戲中,一般都會(huì)有非常多的用戶界面,玩家在玩游戲的過程中也會(huì)頻繁的打開和關(guān)閉這些用戶界面。當(dāng)玩家玩游戲的時(shí)間比較長(zhǎng),界面打開關(guān)閉頻繁時(shí),泄露的內(nèi)存總量也會(huì)增加,導(dǎo)致游戲有因內(nèi)存不足而閃退的風(fēng)險(xiǎn)。

當(dāng)前比較常見的檢測(cè)內(nèi)存泄漏的方式,主要是通過觀察游戲運(yùn)行時(shí)內(nèi)存的變化曲線,來獲得內(nèi)存的利用信息,當(dāng)內(nèi)存利用曲線持續(xù)升高時(shí),就可以認(rèn)為在游戲中存在內(nèi)存泄漏的問題。比如圖1中的內(nèi)存占用曲線就是有明顯的內(nèi)存泄漏問題。

但是這種方式極為低效和不方便,例如在游戲里通常會(huì)有上百個(gè)用戶界面,當(dāng)用戶界面比較多時(shí),手動(dòng)檢測(cè)的方式比較費(fèi)時(shí)費(fèi)力,且很多用戶界面藏得比較深,容易出現(xiàn)測(cè)試遺漏。



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

本申請(qǐng)公開檢測(cè)內(nèi)存泄漏的方法,以快捷地檢測(cè)軟件中用戶界面是否存在內(nèi)存泄露問題。

本發(fā)明的其他特性和優(yōu)點(diǎn)將通過下面的詳細(xì)描述變得顯然,或部分地通過本發(fā)明的實(shí)踐而習(xí)得。

根據(jù)本發(fā)明的第一方面,提供一種檢測(cè)內(nèi)存泄漏的方法,包括:

獲取待測(cè)的用戶界面的標(biāo)識(shí);

根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求,以使所述客戶端執(zhí)行打開和關(guān)閉所述用戶界面的操作;

獲取所述客戶端每次打開和關(guān)閉所述用戶界面時(shí)的內(nèi)存快照;

根據(jù)所述內(nèi)存快照上內(nèi)存數(shù)量的差異評(píng)估所述用戶界面是否內(nèi)存泄露。

根據(jù)一些實(shí)施例,根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求包括:通過腳本代碼根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求。

根據(jù)一些實(shí)施例,根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求包括:根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的遠(yuǎn)程過程調(diào)用請(qǐng)求。

根據(jù)一些實(shí)施例,根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的遠(yuǎn)程過程調(diào)用請(qǐng)求包括:使用websocket或socket根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的遠(yuǎn)程過程調(diào)用請(qǐng)求。

根據(jù)一些實(shí)施例,所述用戶界面的標(biāo)識(shí)包括所述用戶界面的名稱和所述用戶界面的引用路徑。

根據(jù)一些實(shí)施例,根據(jù)所述內(nèi)存快照上內(nèi)存數(shù)量的差異評(píng)估所述用戶界面是否內(nèi)存泄露包括:

對(duì)所述內(nèi)存快照上內(nèi)存數(shù)量的差異進(jìn)行統(tǒng)計(jì),根據(jù)統(tǒng)計(jì)結(jié)果評(píng)估所述用戶界面是否內(nèi)存泄露。

根據(jù)一些實(shí)施例,獲取待測(cè)的用戶界面的標(biāo)識(shí)之前還包括:遍歷所述被測(cè)軟件的用戶界面,依次將遍歷得到的用戶界面作為所述待測(cè)的用戶界面。

根據(jù)本發(fā)明的第二方面,提供一種檢測(cè)內(nèi)存泄漏的裝置,其包括:

標(biāo)識(shí)獲取單元,用于獲取待測(cè)的用戶界面的標(biāo)識(shí);

模擬請(qǐng)求單元,用于根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求,以使所述客戶端執(zhí)行打開和關(guān)閉所述用戶界面的操作;

內(nèi)存快照獲取單元,獲取所述客戶端每次打開和關(guān)閉所述用戶界面時(shí)的內(nèi)存快照;

泄露評(píng)估單元,用于根據(jù)所述內(nèi)存快照上內(nèi)存數(shù)量的差異評(píng)估所述用戶界面是否內(nèi)存泄露。

根據(jù)一些實(shí)施例,所述模擬請(qǐng)求單元用于:通過腳本代碼根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求。

根據(jù)一些實(shí)施例,所述模擬請(qǐng)求單元用于:根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的遠(yuǎn)程過程調(diào)用請(qǐng)求。

根據(jù)一些實(shí)施例,所述模擬請(qǐng)求單元用于:使用websocket或socket根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的遠(yuǎn)程過程調(diào)用請(qǐng)求。

根據(jù)一些實(shí)施例,所述用戶界面的標(biāo)識(shí)包括所述用戶界面的名稱和所述用戶界面的引用路徑。

根據(jù)一些實(shí)施例,所述泄露評(píng)估單元用于:

對(duì)所述內(nèi)存快照上內(nèi)存數(shù)量的差異進(jìn)行統(tǒng)計(jì),根據(jù)統(tǒng)計(jì)結(jié)果評(píng)估所述用戶界面是否內(nèi)存泄露。

根據(jù)一些實(shí)施例,所述裝置還包括遍歷單元,用于在獲取待測(cè)的用戶界面的標(biāo)識(shí)之前,遍歷所述被測(cè)軟件的用戶界面,依次將遍歷得到的用戶界面作為所述待測(cè)的用戶界面。

根據(jù)本發(fā)明的第三方面,提供一種電子設(shè)備,包括:處理器;存儲(chǔ)器,存儲(chǔ)用于處理器控制如第一方面所述操作的指令。

本申請(qǐng)的實(shí)施例提供的技術(shù)方案可以包括以下有益效果:

首先,當(dāng)內(nèi)存曲線持續(xù)升高時(shí),只能知道存在內(nèi)存泄漏問題,但并不能定位到究竟是哪里產(chǎn)生了內(nèi)存泄漏;其次,通常每個(gè)ui平均占用的內(nèi)存都比較少,大概在幾百k左右,單獨(dú)查看某個(gè)用戶界面是否存在內(nèi)存泄漏通常并不明顯,通常需要打開關(guān)閉很多次后才能看到較明顯的內(nèi)存變化;另外,游戲里通常有上百個(gè)用戶界面,如果不能使用自動(dòng)化的方法會(huì)比較費(fèi)時(shí)費(fèi)力,且容易出現(xiàn)測(cè)試遺漏。

本實(shí)施例提供的技術(shù)方案通過根據(jù)待測(cè)的用戶界面的標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求,以在所述客戶端執(zhí)行打開和關(guān)閉所述用戶界面的操作后獲取內(nèi)存快照,根據(jù)所述內(nèi)存快照上內(nèi)存數(shù)量的差異評(píng)估所述用戶界面是否內(nèi)存泄露,能準(zhǔn)確定位到存在內(nèi)存泄露的用戶界面,能提高內(nèi)存泄露的測(cè)試效率,能避免漏測(cè)。

應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性的,并不能限制本發(fā)明。

附圖說明

通過參照附圖詳細(xì)描述其示例實(shí)施例,本發(fā)明的上述和其它特征及優(yōu)點(diǎn)將變得更加明顯。

圖1示出了存在內(nèi)存泄露問題時(shí)的內(nèi)存占用曲線的示意圖;

圖2示出了根據(jù)本發(fā)明一實(shí)施例的檢測(cè)內(nèi)存泄漏的方法;

圖3示出了根據(jù)本發(fā)明另一實(shí)施例的檢測(cè)內(nèi)存泄漏的方法;

圖4示出了根據(jù)本發(fā)明另一實(shí)施例的檢測(cè)內(nèi)存泄漏的架構(gòu)示意圖;

圖5示出了根據(jù)本發(fā)明另一實(shí)施例的檢測(cè)內(nèi)存泄漏的裝置的框圖;

圖6示出了根據(jù)本發(fā)明一實(shí)施例的電子設(shè)備。

具體實(shí)施方式

現(xiàn)在將參考附圖更全面地描述示例實(shí)施例。然而,示例實(shí)施例能夠以多種形式實(shí)施,且不應(yīng)被理解為限于在此闡述的實(shí)施例;相反,提供這些實(shí)施例使得本發(fā)明將全面和完整,并將示例實(shí)施例的構(gòu)思全面地傳達(dá)給本領(lǐng)域的技術(shù)人員。在圖中相同的附圖標(biāo)記表示相同或類似的部分,因而將省略對(duì)它們的重復(fù)描述。

此外,所描述的特征、結(jié)構(gòu)或特性可以以任何合適的方式結(jié)合在一個(gè)或更多實(shí)施例中。在下面的描述中,提供許多具體細(xì)節(jié)從而給出對(duì)本發(fā)明的實(shí)施例的充分理解。然而,本領(lǐng)域技術(shù)人員將意識(shí)到,可以實(shí)踐本發(fā)明的技術(shù)方案而沒有特定細(xì)節(jié)中的一個(gè)或更多,或者可以采用其它的方法、組元、裝置、步驟等。在其它情況下,不詳細(xì)示出或描述公知方法、裝置、實(shí)現(xiàn)或者操作以避免模糊本發(fā)明的各方面。

附圖中所示的方框圖僅僅是功能實(shí)體,不一定必須與物理上獨(dú)立的實(shí)體相對(duì)應(yīng)。即,可以采用軟件形式來實(shí)現(xiàn)這些功能實(shí)體,或在一個(gè)或多個(gè)硬件模塊或集成電路中實(shí)現(xiàn)這些功能實(shí)體,或在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實(shí)現(xiàn)這些功能實(shí)體。

附圖中所示的流程圖僅是示例性說明,不是必須包括所有的內(nèi)容和操作/步驟,也不是必須按所描述的順序執(zhí)行。例如,有的操作/步驟還可以分解,而有的操作/步驟可以合并或部分合并,因此實(shí)際執(zhí)行的順序有可能根據(jù)實(shí)際情況改變。

圖2示出了根據(jù)本發(fā)明一實(shí)施例的檢測(cè)內(nèi)存泄漏的方法,本實(shí)施例可適用于檢測(cè)包括用戶界面的軟件中的用戶界面是否存在內(nèi)存泄露的情況,如圖2所示,本實(shí)施例所述的檢測(cè)內(nèi)存泄漏的方法包括:

在步驟s210中,獲取待測(cè)的用戶界面的標(biāo)識(shí)。

其中,所述用戶界面的標(biāo)識(shí)用于區(qū)分被測(cè)軟件中待測(cè)的用戶界面,例如可以是用戶界面的名稱,也可以是用戶界面的引用路徑。

在步驟s220中,根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求,以使所述客戶端執(zhí)行打開和關(guān)閉所述用戶界面的操作。

其中,根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求,可通過具體腳本代碼實(shí)現(xiàn)。

所述請(qǐng)求可為遠(yuǎn)程過程調(diào)用請(qǐng)求,例如可使用websocket或socket實(shí)現(xiàn)所述遠(yuǎn)程過程調(diào)用的通信。

需要說明的是,步驟s210中所述待測(cè)的用戶界面是指來自本步驟中所述被測(cè)軟件中的用戶界面。本實(shí)施例的技術(shù)方案用于檢測(cè)一個(gè)待測(cè)的用戶界面是否存在內(nèi)存泄漏的情況,依據(jù)本實(shí)施例的方法,可對(duì)該被測(cè)軟件中的部分或全部用戶界面分別作為待測(cè)的用戶界面逐一進(jìn)行檢測(cè)。

在步驟s230中,獲取所述客戶端每次打開和關(guān)閉所述用戶界面時(shí)的內(nèi)存快照。

在步驟s240中,根據(jù)所述內(nèi)存快照上內(nèi)存數(shù)量的差異評(píng)估所述用戶界面是否內(nèi)存泄露。

例如可對(duì)所述內(nèi)存快照上內(nèi)存數(shù)量的差異進(jìn)行統(tǒng)計(jì),根據(jù)統(tǒng)計(jì)結(jié)果評(píng)估所述用戶界面是否內(nèi)存泄露。

需要說明的是,獲取待測(cè)的用戶界面的標(biāo)識(shí)可通過遍歷所述被測(cè)軟件的用戶界面,依次將遍歷得到的用戶界面作為所述待測(cè)的用戶界面。

本實(shí)施例提供的技術(shù)方案通過根據(jù)待測(cè)的用戶界面的標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求,以在所述客戶端執(zhí)行打開和關(guān)閉所述用戶界面的操作后獲取內(nèi)存快照,根據(jù)所述內(nèi)存快照上內(nèi)存數(shù)量的差異評(píng)估所述用戶界面是否內(nèi)存泄露,能準(zhǔn)確定位到存在內(nèi)存泄露的用戶界面,能提高內(nèi)存泄露的測(cè)試效率,能避免漏測(cè)。

圖3示出了根據(jù)本發(fā)明另一實(shí)施例的檢測(cè)內(nèi)存泄漏的方法,如圖3所示,本實(shí)施例所述的檢測(cè)內(nèi)存泄漏的方法包括:

在步驟s310中,遍歷所述被測(cè)軟件的用戶界面,依次將遍歷得到的用戶界面作為所述待測(cè)的用戶界面。

例如,遍歷游戲內(nèi)所有用戶界面,得到所有用戶界面的名稱和引用路徑。例如,從游戲項(xiàng)目中獲取到游戲中所有的用戶界面的名稱或引用路徑,以便于接下來循環(huán)遍歷所有用戶界面來模擬玩家打開和關(guān)閉用戶界面的操作。由于不同的項(xiàng)目對(duì)用戶界面的組織方式各不相同,因此這一步驟沒有通用的技術(shù)解決方式,比如可以將所有的用戶界面導(dǎo)出為以下鍵值對(duì)的方式以方便外部腳本來訪問,其中“鍵”為用戶界面的名稱,“值”為該用戶界面在游戲中的引用路徑:

login="login.login.login"

login_windows="login.login_windows.loginwindows"

login_gonggao="login.gonggao.gonggaologin"

gonggao="login.gonggao.gonggao"

joystick="dungeon.player_joystick.playerjoystick"

pc_skill_panel="skills.skill_panel_pc.skillpanelpc"

skill_panel="skills.skill_panel_new.skillpanel"

jump_panel="jump_panel.jump_panel.jumppanel"

在步驟s320中,獲取待測(cè)的用戶界面的標(biāo)識(shí)。

在步驟s330中,根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求,以使所述客戶端執(zhí)行打開和關(guān)閉所述用戶界面的操作。

編寫測(cè)試腳本,遍歷所有獲得的用戶界面名稱,向游戲客戶端循環(huán)發(fā)送遠(yuǎn)程過程調(diào)用rpc請(qǐng)求,模擬玩家打開和關(guān)閉游戲用戶界面操作。游戲客戶端接收到請(qǐng)求后,通過該名稱獲取到對(duì)應(yīng)的用戶界面的引用路徑,進(jìn)行打開和關(guān)閉用戶界面的操作。

例如,編寫外部腳本,循環(huán)遍歷導(dǎo)出的所有用戶界面,向游戲客戶端中發(fā)送打開和關(guān)閉用戶界面的操作指令,來模擬玩家打開和關(guān)閉用戶界面的操作。

由于直接向游戲客戶端發(fā)送指令實(shí)現(xiàn)難度比較大,比如需要知道游戲客戶端的通信格式和加密方式等。因此本申請(qǐng)通過在游戲客戶端中內(nèi)嵌一個(gè)rpc客戶端的方式來實(shí)現(xiàn)rpc請(qǐng)求的接收,免去了對(duì)游戲本身通信協(xié)議和加密的依賴,并通過rpc服務(wù)端向rpc客戶端發(fā)送請(qǐng)求。其中rpc服務(wù)端和rpc客戶端的實(shí)現(xiàn)方式?jīng)]有特別限定,可以直接使用socket來實(shí)現(xiàn)通信,也可以使用websocket來實(shí)現(xiàn)通信,本申請(qǐng)?jiān)趯?shí)現(xiàn)時(shí)使用websocket來實(shí)現(xiàn)rpc通信,相關(guān)實(shí)現(xiàn)的核心python代碼如下所示:

在游戲客戶端中,內(nèi)嵌一個(gè)rpc的客戶端來接收發(fā)送過來的指令,并在游戲中啟動(dòng)實(shí)際的打開和關(guān)閉用戶界面操作,核心python代碼如下所示:

通過上述步驟,可以實(shí)現(xiàn)自動(dòng)化打開和關(guān)閉用戶界面的操作,下面就需要使用objgraph來判斷在多次開關(guān)用戶界面后,該用戶界面是否存在內(nèi)存泄漏。在實(shí)現(xiàn)方式上,需要在每次關(guān)閉用戶界面時(shí),使用objgraph.typestats()函數(shù)來獲取到當(dāng)前內(nèi)存對(duì)象的狀態(tài),即內(nèi)存快照,因此需要修改游戲中關(guān)閉用戶界面的邏輯,加上內(nèi)存統(tǒng)計(jì)的代碼,核心代碼如下所示:

在步驟s340中,獲取所述客戶端每次打開和關(guān)閉所述用戶界面時(shí)的內(nèi)存快照。

在游戲客戶端的用戶界面管理器中,使用objgraph來搜集內(nèi)存使用數(shù)據(jù),具體為:

a)每次打開關(guān)閉用戶界面時(shí),會(huì)調(diào)用一次gc.collect()函數(shù),該函數(shù)會(huì)將不使用的內(nèi)存對(duì)象清理掉。然后調(diào)用objgraph.typestats()函數(shù),該函數(shù)是將未被gc清理掉的對(duì)象數(shù)據(jù)搜集出來,得到的結(jié)果可以看作是當(dāng)前操作(打開關(guān)閉用戶界面操作)后的一份內(nèi)存快照。

b)通過多次打開關(guān)閉用戶界面,就能得到每次操作下的內(nèi)存快照數(shù)據(jù)。通過對(duì)比計(jì)算每次內(nèi)存快照之間的python對(duì)象的差別,當(dāng)差值大于0時(shí),就表示存在內(nèi)存泄露。

在步驟s350中,根據(jù)所述內(nèi)存快照上內(nèi)存數(shù)量的差異評(píng)估所述用戶界面是否內(nèi)存泄露,返回步驟s320。

例如每個(gè)用戶界面的打開和關(guān)閉會(huì)重復(fù)5次,取平均值作為內(nèi)存泄露嚴(yán)重程度的評(píng)估。

可以實(shí)現(xiàn)打開關(guān)閉用戶界面后,通過統(tǒng)計(jì)內(nèi)存快照上內(nèi)存數(shù)量的差異,來統(tǒng)計(jì)每個(gè)用戶界面是否出現(xiàn)內(nèi)存泄漏,并將結(jié)果寫入到一個(gè)臨時(shí)文件中。通過將步驟1,2,3組合,就實(shí)現(xiàn)了游戲內(nèi)用戶界面內(nèi)存泄漏的自動(dòng)化檢測(cè),并生成測(cè)試報(bào)告。比如以下的樣例測(cè)試結(jié)果,其中左邊的字符串表示打開關(guān)閉用戶界面所在的路徑,后面的數(shù)字表示泄露的內(nèi)存數(shù)量。由于內(nèi)存回收會(huì)有一定的時(shí)間延遲,因此還是會(huì)有出現(xiàn)部分泄露的內(nèi)存數(shù)量其數(shù)值大于0的情況,因此需要測(cè)試(打開關(guān)閉)多次,查看平均情況。例如,將泄露的內(nèi)存數(shù)量的平均值一旦超過兩位數(shù)時(shí),也就是平均值介于10~20會(huì)啟動(dòng)程序進(jìn)行檢查,但這種情況并不能完全確定是內(nèi)存泄漏問題,只有多次測(cè)試的內(nèi)存泄露數(shù)量其平均值都大20的情況下,才會(huì)確定為內(nèi)存泄漏。所以平均值的閾值可設(shè)定為10,其可根據(jù)需求進(jìn)行具體設(shè)置,本公開不限于此,小于10即可以忽略不計(jì),大于10就需要進(jìn)一步檢測(cè)。

例如,以下的樣例測(cè)試結(jié)果表示該界面不存在內(nèi)存泄露情況:

set(['action.action_panel.actionfloat'])0

set(['action.action_panel.actionfloat'])0

set(['action.action_panel.actionfloat'])4

set(['action.action_panel.actionfloat'])0

set(['task.all_tasks_panel.alltaskpanel'])1

set(['task.all_tasks_panel.alltaskpanel'])4

set(['task.all_tasks_panel.alltaskpanel'])0

set(['task.all_tasks_panel.alltaskpanel'])0

又如,以下的樣例測(cè)試結(jié)果表示該界面存在內(nèi)存泄露情況,需要查看代碼并修復(fù)。

set(['equip.equip_dazao.equipdazao'])529

set(['equip.equip_dazao.equipdazao'])536

set(['equip.equip_dazao.equipdazao'])537

set(['equip.equip_dazao.equipdazao'])530

set(['bag.auto_food_setting.autofoodsetting'])692

set(['bag.auto_food_setting.autofoodsetting'])692

set(['bag.auto_food_setting.autofoodsetting'])689

set(['bag.auto_food_setting.autofoodsetting'])692

本實(shí)施例的技術(shù)方案能準(zhǔn)確定位到存在內(nèi)存泄露的用戶界面,能提高內(nèi)存泄露的測(cè)試效率,能避免漏測(cè)。

圖5示出了根據(jù)本發(fā)明一實(shí)施例的檢測(cè)內(nèi)存泄漏的裝置的框圖,如圖5所示,本實(shí)施例所述的檢測(cè)內(nèi)存泄漏的裝置包括標(biāo)識(shí)獲取單元510、模擬請(qǐng)求單元520、內(nèi)存快照獲取單元530、以及泄露評(píng)估單元540。

該標(biāo)識(shí)獲取單元510被配置為,用于獲取待測(cè)的用戶界面的標(biāo)識(shí);

該模擬請(qǐng)求單元520被配置為,用于根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求,以使所述客戶端執(zhí)行打開和關(guān)閉所述用戶界面的操作;

該內(nèi)存快照獲取單元530被配置為,獲取所述客戶端每次打開和關(guān)閉所述用戶界面時(shí)的內(nèi)存快照;

該泄露評(píng)估單元540被配置為,用于根據(jù)所述內(nèi)存快照上內(nèi)存數(shù)量的差異評(píng)估所述用戶界面是否內(nèi)存泄露。

根據(jù)一些實(shí)施例,所述模擬請(qǐng)求單元520用于:通過腳本代碼根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求。

根據(jù)一些實(shí)施例,所述模擬請(qǐng)求單元520用于:根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的遠(yuǎn)程過程調(diào)用請(qǐng)求。

根據(jù)一些實(shí)施例,所述模擬請(qǐng)求單元520用于:使用websocket或socket根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的遠(yuǎn)程過程調(diào)用請(qǐng)求。

根據(jù)一些實(shí)施例,所述用戶界面的標(biāo)識(shí)包括所述用戶界面的名稱和所述用戶界面的引用路徑。

根據(jù)一些實(shí)施例,所述泄露評(píng)估單元540用于:

對(duì)所述內(nèi)存快照上內(nèi)存數(shù)量的差異進(jìn)行統(tǒng)計(jì),根據(jù)統(tǒng)計(jì)結(jié)果評(píng)估所述用戶界面是否內(nèi)存泄露。

根據(jù)一些實(shí)施例,所述裝置還包括遍歷單元(圖5中未示出),用于在獲取待測(cè)的用戶界面的標(biāo)識(shí)之前,遍歷所述被測(cè)軟件的用戶界面,依次將遍歷得到的用戶界面作為所述待測(cè)的用戶界面。

關(guān)于上述實(shí)施例中的裝置,其中各個(gè)單元執(zhí)行操作的具體方式已經(jīng)在有關(guān)該方法的實(shí)施例中進(jìn)行了詳細(xì)描述,此處將不做詳細(xì)闡述說明。

本實(shí)施例提供的檢測(cè)內(nèi)存泄漏的裝置可執(zhí)行本發(fā)明方法實(shí)施例所提供的檢測(cè)內(nèi)存泄漏的方法,具備執(zhí)行方法相應(yīng)的功能模塊和有益效果。

圖6示出了根據(jù)本發(fā)明一實(shí)施例的電子設(shè)備,如圖6所示,電子設(shè)備600可包括處理器610、存儲(chǔ)器620、發(fā)射器630及接收器640。

存儲(chǔ)器620可存儲(chǔ)用于處理器610控制操作處理的指令。存儲(chǔ)器620可包括易失性或非易失性存儲(chǔ)器,如靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)、電可擦除可編程只讀存儲(chǔ)器(eeprom)、可擦除可編程只讀存儲(chǔ)器(eprom)、可編程只讀存儲(chǔ)器(prom)、只讀存儲(chǔ)器(rom)等,本發(fā)明對(duì)此沒有限制。

處理器610可調(diào)用存儲(chǔ)器620中存儲(chǔ)的指令控制相關(guān)操作。根據(jù)一實(shí)施例,存儲(chǔ)器620存儲(chǔ)用于處理器610控制以下操作的指令:

獲取待測(cè)的用戶界面的標(biāo)識(shí);

根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求,以使所述客戶端執(zhí)行打開和關(guān)閉所述用戶界面的操作;

獲取所述客戶端每次打開和關(guān)閉所述用戶界面時(shí)的內(nèi)存快照;

根據(jù)所述內(nèi)存快照上內(nèi)存數(shù)量的差異評(píng)估所述用戶界面是否內(nèi)存泄露。

易于理解,存儲(chǔ)器620還可存儲(chǔ)用于處理器610控制根據(jù)本發(fā)明實(shí)施例的其他操作的指令,這里不再贅述。

處理器610還可控制發(fā)射器630和接收器640進(jìn)行信號(hào)收發(fā)等。

通過以上的詳細(xì)描述,本領(lǐng)域的技術(shù)人員易于理解,根據(jù)本發(fā)明實(shí)施例的系統(tǒng)和方法具有以下優(yōu)點(diǎn)中的一個(gè)或多個(gè)。

根據(jù)本發(fā)明的實(shí)施例,根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求包括:通過腳本代碼根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求。

根據(jù)本發(fā)明的一些實(shí)施例,根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求包括:根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的遠(yuǎn)程過程調(diào)用請(qǐng)求。

根據(jù)一些實(shí)施例,本發(fā)明還提供一種非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),例如包括指令的存儲(chǔ)器,上述指令可由裝置的處理器執(zhí)行以完成上述方法。例如,非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是rom、隨機(jī)存取存儲(chǔ)器(ram)、cd-rom、磁帶、軟盤和光數(shù)據(jù)存儲(chǔ)設(shè)備等。當(dāng)存儲(chǔ)介質(zhì)中的指令由終端的處理器執(zhí)行時(shí),使得終端能夠執(zhí)行下述方法:獲取待測(cè)的用戶界面的標(biāo)識(shí);根據(jù)所述標(biāo)識(shí)向被測(cè)軟件的客戶端循環(huán)發(fā)送用于模擬玩家打開和關(guān)閉所述用戶界面的請(qǐng)求,以使所述客戶端執(zhí)行打開和關(guān)閉所述用戶界面的操作;獲取所述客戶端每次打開和關(guān)閉所述用戶界面時(shí)的內(nèi)存快照;根據(jù)所述內(nèi)存快照上內(nèi)存數(shù)量的差異評(píng)估所述用戶界面是否內(nèi)存泄露。

本領(lǐng)域技術(shù)人員可以理解,附圖只是示例實(shí)施例的示意圖,附圖中的模塊或流程并不一定是實(shí)施本發(fā)明所必須的,因此不能用于限制本發(fā)明的保護(hù)范圍。

本領(lǐng)域技術(shù)人員可以理解上述各模塊可以按照實(shí)施例的描述分布于裝置中,也可以進(jìn)行相應(yīng)變化唯一不同于本實(shí)施例的一個(gè)或多個(gè)裝置中。上述實(shí)施例的模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。

以上具體地示出和描述了本發(fā)明的示例性實(shí)施例。應(yīng)該理解,本發(fā)明不限于所公開的實(shí)施例,相反,本發(fā)明意圖涵蓋包含在所附權(quán)利要求的精神和范圍內(nèi)的各種修改和等效布置。

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