欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種程序異常的監(jiān)控方法和裝置制造方法

文檔序號(hào):6625583閱讀:486來源:國知局
一種程序異常的監(jiān)控方法和裝置制造方法
【專利摘要】本發(fā)明實(shí)施例公開了一種程序異常的監(jiān)控方法,包括:向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息;若預(yù)設(shè)時(shí)間內(nèi)未收到所述通信窗口反饋的響應(yīng)消息,確定所述被監(jiān)控程序運(yùn)行異常;獲取所述被監(jiān)控程序的堆棧信息;根據(jù)所述堆棧信息生成異常日志文件。本發(fā)明實(shí)施例還公開了一種程序異常的監(jiān)控裝置。采用本發(fā)明,能在程序發(fā)生異常時(shí)保留現(xiàn)場數(shù)據(jù)。
【專利說明】一種程序異常的監(jiān)控方法和裝置

【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件測試領(lǐng)域,尤其涉及一種程序異常的監(jiān)控方法和裝置。

【背景技術(shù)】
[0002]在程序的運(yùn)行過程中,由于程序本身的設(shè)計(jì)或外部負(fù)載的問題經(jīng)常會(huì)發(fā)生異常,例如程序存在Bug造成CPU占用率過高或者讀寫操作過于頻繁造成界面卡頓或退出等異常情況,這些異常有時(shí)在程序測試階段很難發(fā)現(xiàn),需要在實(shí)際使用中由用戶來反饋異常信息,軟件設(shè)計(jì)人員根據(jù)反饋的異常信息分析異常原因。然而程序在運(yùn)行過程中發(fā)生異常的時(shí)間是隨機(jī)的,當(dāng)用戶反饋程序的異常信息,程序的現(xiàn)場數(shù)據(jù)已難以保留,軟件設(shè)計(jì)人員又很難重現(xiàn)程序發(fā)生異常的現(xiàn)場數(shù)據(jù)。


【發(fā)明內(nèi)容】

[0003]本發(fā)明實(shí)施例所要解決的技術(shù)問題在于,提供一種程序異常的監(jiān)控方法。可在程序發(fā)生異常時(shí)保留現(xiàn)場數(shù)據(jù)。
[0004]為了解決上述技術(shù)問題,本發(fā)明實(shí)施例提供了一種程序異常的監(jiān)控方法,包括:
[0005]向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息;
[0006]若預(yù)設(shè)時(shí)間內(nèi)未收到所述通信窗口反饋的響應(yīng)消息,確定所述被監(jiān)控程序運(yùn)行異常;
[0007]獲取所述被監(jiān)控程序的堆棧信息;
[0008]根據(jù)所述堆棧信息生成異常日志文件。
[0009]相應(yīng)地,本發(fā)明實(shí)施例還提供了一種程序異常的監(jiān)控裝置,包括:
[0010]發(fā)送模塊,用于向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息;
[0011]確定模塊,用于若預(yù)設(shè)時(shí)間內(nèi)未收到所述通信窗口反饋的響應(yīng)消息,確定所述被監(jiān)控程序運(yùn)行異常;
[0012]獲取模塊,用于獲取所述被監(jiān)控程序的堆棧信息;
[0013]生成模塊,用于根據(jù)所述堆棧信息生成異常日志文件。
[0014]實(shí)施本發(fā)明實(shí)施例,具有如下有益效果:
[0015]通過向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息,在預(yù)設(shè)的時(shí)長內(nèi)未收到通信窗口反饋的響應(yīng)消息,確定被監(jiān)控程序發(fā)生異常,獲取被監(jiān)控程序的堆棧信息并根據(jù)堆棧信息生成異常日志文件,這樣可以自動(dòng)監(jiān)控被監(jiān)控程序發(fā)生的異常,并在發(fā)生異常時(shí)獲取被監(jiān)控程序的現(xiàn)場數(shù)據(jù),便于分析和確定被監(jiān)控程序的異常原因。

【專利附圖】

【附圖說明】
[0016]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0017]圖1是本發(fā)明第一實(shí)施例提供的一種程序異常的監(jiān)控方法的流程示意圖;
[0018]圖2是本發(fā)明第二實(shí)施例提供的一種程序異常的監(jiān)控方法的流程示意圖;
[0019]圖3是圖1和圖2中注入DLL的示意圖;
[0020]圖4是圖1和圖2中創(chuàng)建通信窗口和監(jiān)控線程的示意圖;
[0021]圖5是本發(fā)明實(shí)施例的一種程序異常的監(jiān)控方法的示例示意圖;
[0022]圖6是本發(fā)明第一實(shí)施例提供的注意程序一種的監(jiān)控裝置的結(jié)構(gòu)示意圖;
[0023]圖7是本發(fā)明第二實(shí)施例提供的一種程序異常的監(jiān)控裝置的結(jié)構(gòu)示意圖;
[0024]圖8是圖7中獲取|旲塊的結(jié)構(gòu)不意圖;
[0025]圖9是本發(fā)明第三實(shí)施例提供的一種程序異常的監(jiān)控裝置的結(jié)構(gòu)示意圖。

【具體實(shí)施方式】
[0026]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0027]本發(fā)明實(shí)施例提供的程序異常的監(jiān)控方法可以應(yīng)用于軟件測試、軟件調(diào)試或軟件維護(hù)的場景,例如,使被監(jiān)控程序處于正常工作環(huán)境,不間斷的運(yùn)行被監(jiān)控程序程序,向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息,如果預(yù)設(shè)時(shí)長內(nèi)未接收到通信窗口根據(jù)探測消息返回的響應(yīng)消息,確定被監(jiān)控程序發(fā)生異常,此時(shí)獲取被監(jiān)控程序當(dāng)前的堆棧消息,根據(jù)堆棧信息生成異常日志文件。這樣可以自動(dòng)監(jiān)控被監(jiān)控程序發(fā)生的異常,并在發(fā)生異常時(shí)獲取被監(jiān)控程序的現(xiàn)場數(shù)據(jù),便于分析和確定被監(jiān)控程序的異常原因,為被監(jiān)控程序的改進(jìn)提供依據(jù)。
[0028]本發(fā)明實(shí)施例涉及的監(jiān)控裝置可以包括:計(jì)算機(jī)、平板電腦、智能手機(jī)、筆記本電腦、掌上電腦以及移動(dòng)互聯(lián)網(wǎng)設(shè)備(MID)等終端設(shè)備。
[0029]參見圖1,為本發(fā)明實(shí)施例一提供的一種程序異常的監(jiān)控方法的流程示意圖,在本發(fā)明實(shí)施例中,所述方法包括:
[0030]S101、向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息。
[0031]具體的,被監(jiān)控程序預(yù)先關(guān)聯(lián)有一個(gè)通信窗口,監(jiān)控裝置向通信窗口發(fā)送探測消息,通信窗口可以為被監(jiān)控程序主窗口之外設(shè)置的一個(gè)后臺(tái)的窗口,不影響被監(jiān)控程序正常運(yùn)行??蛇x的,監(jiān)控裝置可以根據(jù)預(yù)設(shè)的時(shí)間周期向通信窗口發(fā)送探測消息,探測消息的類型本發(fā)明不作限制。
[0032]S102、若預(yù)設(shè)時(shí)間內(nèi)未收到通信窗口反饋的響應(yīng)消息,確定被監(jiān)控程序運(yùn)行異常。
[0033]具體的,如果被監(jiān)控程序運(yùn)行正常,被監(jiān)控程序關(guān)聯(lián)的通信窗口在接收到探測消息后,會(huì)在預(yù)設(shè)時(shí)間內(nèi)向監(jiān)控裝置反饋響應(yīng)消息;如果被監(jiān)控程序運(yùn)行異常,被監(jiān)控程序關(guān)聯(lián)的通信窗口在接收到探測消息后,無法向監(jiān)控裝置反饋響應(yīng)消息或反饋響應(yīng)消息超時(shí),監(jiān)控裝置在預(yù)設(shè)時(shí)長被未接收到響應(yīng)消息,則確定被監(jiān)控程序運(yùn)行異常。
[0034]S103、獲取被監(jiān)控程序的堆棧信息。
[0035]具體的,堆棧信息中包括被監(jiān)控程序調(diào)用函數(shù)的調(diào)用記錄和當(dāng)前的程序指針地址,監(jiān)控裝置在確定被監(jiān)控程序發(fā)生異常時(shí),獲取被監(jiān)控程序當(dāng)前的堆棧信息。
[0036]S104、根據(jù)堆棧信息生成異常日志文件。
[0037]具體的,監(jiān)控裝置根據(jù)獲取的堆棧信息生成異常日志文件,日常日志文件中保存有被監(jiān)控程序發(fā)生異常時(shí)的堆棧信息,軟件分析人員可以根據(jù)異常日志文件分析被監(jiān)控程序的異常原因。
[0038]實(shí)施本發(fā)明的實(shí)施例,通過向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息,在預(yù)設(shè)的時(shí)長內(nèi)未收到通信窗口反饋的響應(yīng)消息,確定被監(jiān)控程序發(fā)生異常,獲取被監(jiān)控程序的堆棧信息并根據(jù)堆棧信息生成異常日志文件,這樣可以自動(dòng)監(jiān)控被監(jiān)控程序發(fā)生的異常,并在發(fā)生異常時(shí)獲取被監(jiān)控程序的現(xiàn)場數(shù)據(jù),便于分析和確定被監(jiān)控程序的異常原因。
[0039]參見圖2-圖4,為本發(fā)明第二實(shí)施例提供的一種程序異常的監(jiān)控方法的流程示意圖,包括:
[0040]S201、生成動(dòng)態(tài)鏈接庫DLL,并向被監(jiān)控程序注入DLL。
[0041]具體的,DLL(Dynamic Link Library,動(dòng)態(tài)鏈接庫,簡稱DLL)是一個(gè)可由多個(gè)程序同時(shí)使用的代碼和數(shù)據(jù)的庫,這樣有助于不同程序間共享數(shù)據(jù)和資源。如圖3所示,監(jiān)控裝置生成DLL,并向被監(jiān)控程序注入DLL,DLL包括已被編譯和鏈接的通信窗口創(chuàng)建函數(shù),通信窗口創(chuàng)建函數(shù)不屬于被監(jiān)控程序的可執(zhí)行代碼,被監(jiān)控程序的進(jìn)程可以在DLL中調(diào)用通信窗口創(chuàng)建函數(shù)。
[0042]S202、加載DLL以創(chuàng)建與被監(jiān)控程序關(guān)聯(lián)的通信窗口。
[0043]具體的,監(jiān)控裝置加載S201創(chuàng)建的DLL后,調(diào)用DLL中的通信窗口創(chuàng)建函數(shù)以創(chuàng)建與被監(jiān)控程序關(guān)聯(lián)的通信窗口。優(yōu)選的,通信窗口為透明的通信窗口。
[0044]S203、校驗(yàn)被監(jiān)控程序是否完整。
[0045]具體的,如果被監(jiān)控程序的代碼發(fā)生篡改時(shí)(如代碼新增或刪除或更改),被監(jiān)控程序就無法保證其功能的完整性,在運(yùn)行時(shí)會(huì)發(fā)生無法預(yù)測的異常,因此在被監(jiān)控程序運(yùn)行之前需要校驗(yàn)其完整性,在本發(fā)明的實(shí)施例中,校驗(yàn)的方法可以是:采用哈希算法計(jì)算被監(jiān)控程序的哈希值,將計(jì)算得到的哈希值與被監(jiān)控程序的初始哈希值進(jìn)行比較,初始哈希值是指被監(jiān)控程序處于完整狀態(tài)時(shí)計(jì)算得到的哈希值,如果二者相等,則表明被監(jiān)控程序是完整的,否則,表明被監(jiān)控程序發(fā)生篡改。需要說明的是,哈希算法可以是MD5、MD4和SHA-1等算法,本發(fā)明不作限制。
[0046]S204、創(chuàng)建監(jiān)控線程,監(jiān)控線程用于監(jiān)控被監(jiān)控程序的運(yùn)行過程。
[0047]具體的,監(jiān)控裝置在被監(jiān)控線程的主線程下創(chuàng)建一個(gè)監(jiān)控線程,監(jiān)控線程用于監(jiān)控被監(jiān)控程序的運(yùn)行過程。
[0048]示例性的是,被監(jiān)控程序在運(yùn)行時(shí)主線程為thread main,監(jiān)控裝置在thread A下創(chuàng)建一個(gè)監(jiān)控線程thread monitor, thread monitor用于監(jiān)控和記錄被監(jiān)控程序運(yùn)行過程中產(chǎn)生的數(shù)據(jù)。
[0049]S205、指示監(jiān)控線程向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息。
[0050]具體的,監(jiān)控裝置指示監(jiān)控線程向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息,監(jiān)控裝置可以指示監(jiān)控線程根據(jù)預(yù)設(shè)的時(shí)間周期向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消肩、O
[0051]S206、若預(yù)設(shè)時(shí)間內(nèi)未收到通信窗口反饋的響應(yīng)消息,確定被監(jiān)控程序運(yùn)行異常。
[0052]具體的,如圖4所示,監(jiān)控裝置與通信窗口之間建立跨進(jìn)程連接,如果被監(jiān)控程序運(yùn)行正常,被監(jiān)控程序關(guān)聯(lián)的通信窗口在接收到探測消息后,會(huì)在預(yù)設(shè)時(shí)間內(nèi)向監(jiān)控裝置反饋響應(yīng)消息;如果被監(jiān)控程序運(yùn)行異常,被監(jiān)控程序關(guān)聯(lián)的通信窗口在接收到探測消息后,無法向監(jiān)控裝置反饋響應(yīng)消息或反饋響應(yīng)消息超時(shí),監(jiān)控裝置在預(yù)設(shè)時(shí)長被未接收到響應(yīng)消息,則確定被監(jiān)控程序運(yùn)行異常。
[0053]示例性的,預(yù)設(shè)時(shí)間為0.5ms,監(jiān)控裝置向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息后,若監(jiān)控裝置在0.5ms內(nèi)未接收到通信窗口根據(jù)探測消息反饋的響應(yīng)消息,表明被監(jiān)控程序發(fā)生異常,無法正常工作。
[0054]S207、查詢被監(jiān)控程序的調(diào)試接口并調(diào)用性能分析工具通過調(diào)試接口獲取被監(jiān)控程序的堆棧信息。
[0055]具體,被監(jiān)控程序預(yù)先設(shè)置有一個(gè)調(diào)試接口,監(jiān)控裝置查詢被監(jiān)控程序的調(diào)試接口并調(diào)用性能分析工具通過調(diào)試接口獲取被監(jiān)控程序的堆棧信息,堆棧信息中包括被監(jiān)控程序調(diào)用函數(shù)的調(diào)用記錄和當(dāng)前的程序指針地址,監(jiān)控裝置在確定被監(jiān)控程序發(fā)生異常時(shí),獲取被監(jiān)控程序當(dāng)前的堆棧信息。需要說明的是,性能分析工具根據(jù)操作系統(tǒng)的類型選擇,例如,在Windows操作系統(tǒng)中,性能分析工具包括xperf或其他性能分析工具,在Linux操作系統(tǒng)中,性能分析工具包括vmstat。
[0056]S208、根據(jù)堆棧信息生成異常日志文件。
[0057]具體的,監(jiān)控裝置根據(jù)堆棧信息生成預(yù)設(shè)格式的異常日志文件,并將異常日志文件保存至指定的路徑,異常日志文件的格式可以是事件追蹤日志ETL格式或Dump格式。
[0058]S209、解析異常日志文件,獲取被監(jiān)控程序的異常信息。
[0059]具體的,監(jiān)控裝置從指定的路徑中獲取并解析異常日志文件,異常日志文件中存儲(chǔ)有被監(jiān)控程序發(fā)生異常時(shí)的堆棧信息,堆棧信息中包括被監(jiān)控程序調(diào)用函數(shù)的順序記錄和被監(jiān)控程序發(fā)生異常時(shí)的程序指針地址。
[0060]示例性的,監(jiān)控裝置確定被監(jiān)控程序發(fā)生異常時(shí),監(jiān)控裝置將發(fā)生異常時(shí)被監(jiān)控程序調(diào)用的函數(shù)的調(diào)用記錄打印出來,其中,最后調(diào)用的函數(shù)最先打印出來,最先調(diào)用的最后打印出來,最新打印出來的函數(shù)為被監(jiān)控程序發(fā)生異常時(shí)調(diào)用的函數(shù),這樣軟件分析人員根據(jù)調(diào)用記錄很容易定位到發(fā)生異常的函數(shù)。
[0061]例如,被監(jiān)控程序的main O函數(shù)依次調(diào)用了 a()函數(shù)和b()函數(shù),其中b()函數(shù)又調(diào)用了 c()函數(shù),如果被監(jiān)控程序在調(diào)用c O函數(shù)時(shí)發(fā)生異常,則打印出來的調(diào)用記錄如下:
[0062]c()函數(shù):被監(jiān)控程序發(fā)生異常時(shí)調(diào)用的函數(shù);
[0063]b ()函數(shù):c ()函數(shù)方法調(diào)用的函數(shù);
[0064]main O函數(shù):b()函數(shù)調(diào)用的函數(shù)。
[0065]S210、根據(jù)被監(jiān)控程序的異常信息,定位被監(jiān)控程序的發(fā)生異常時(shí)的代碼行。
[0066]具體的,監(jiān)控裝置根據(jù)異常信息中的調(diào)用記錄定位到被監(jiān)控程序發(fā)生異常是調(diào)用的函數(shù),并根據(jù)程序指針地址定位到該函數(shù)中的代碼行。實(shí)施本發(fā)明的實(shí)施例,通過向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息,在預(yù)設(shè)的時(shí)長內(nèi)未收到通信窗口反饋的響應(yīng)消息,確定被監(jiān)控程序發(fā)生異常,獲取被監(jiān)控程序的堆棧信息并根據(jù)堆棧信息生成異常日志文件,這樣可以自動(dòng)監(jiān)控被監(jiān)控程序發(fā)生的異常,并在發(fā)生異常時(shí)獲取被監(jiān)控程序的現(xiàn)場數(shù)據(jù),便于分析和確定被監(jiān)控程序的異常原因。
[0067]下面結(jié)合圖5以一個(gè)具體的實(shí)例對圖2提供的程序異常的監(jiān)控方法進(jìn)行說明。圖2的被監(jiān)控軟件為即時(shí)聊天軟件,即時(shí)聊天軟件可以為文本聊天軟件或語音聊天軟件,標(biāo)號(hào)3的窗口為即時(shí)聊天軟件的聊天窗口,標(biāo)號(hào)4對應(yīng)的窗口為與即時(shí)聊天軟件關(guān)聯(lián)的通信窗口,通信窗口可以在后臺(tái)運(yùn)行或?yàn)橐粋€(gè)透明的窗口,對用戶不可見。當(dāng)即時(shí)通信軟件接收到開啟指定聯(lián)系人的聊天窗口的指令時(shí),生成并顯示聊天窗口。
[0068]監(jiān)控裝置生成動(dòng)態(tài)鏈接庫DLL,向即時(shí)通信軟件注入DLL,監(jiān)控裝置加載DLL創(chuàng)建與被監(jiān)控窗口關(guān)聯(lián)的通信窗口 4。監(jiān)控裝置校驗(yàn)即時(shí)通信軟件是否完整,校驗(yàn)的方法可以為采用哈希值算法來校驗(yàn),當(dāng)校驗(yàn)通過后,監(jiān)聽程序在即時(shí)通信軟件的主線程main thread下創(chuàng)建監(jiān)控線程monitor thread,監(jiān)控線程用于監(jiān)控即時(shí)通信軟件的運(yùn)行過程,監(jiān)控裝置指示監(jiān)控線程向通信窗口 4發(fā)送sounding message探測消息,假設(shè)預(yù)設(shè)時(shí)間為1ms,監(jiān)控裝置若在1ms內(nèi)未收到通信窗口 4根據(jù)探測消息返回的響應(yīng)消息response message,確定即時(shí)通信軟件發(fā)生異常(例如:聊天窗口 3發(fā)生卡頓現(xiàn)象,無法及時(shí)響應(yīng)操作指令)。監(jiān)控裝置查詢即時(shí)聊天軟件的調(diào)試接口并調(diào)用性能分析工具通過調(diào)試接口獲取即時(shí)聊天軟件當(dāng)前的堆棧信息,堆棧信息中包括即時(shí)通信軟件調(diào)用的函數(shù)的順序列表,這個(gè)堆棧信息即為即時(shí)通信軟件發(fā)生異常時(shí)的現(xiàn)場數(shù)據(jù),監(jiān)控裝置根據(jù)堆棧信息生成異常日志文件供后續(xù)查詢,監(jiān)控裝置解析異常日志文件,獲得即時(shí)通信軟件的異常信息,定位到監(jiān)控軟件發(fā)生異常時(shí)的代碼行。
[0069]參加圖6,為本發(fā)明第一實(shí)施例提供的一種程序異常的監(jiān)控裝置的結(jié)構(gòu)示意圖,在本發(fā)明實(shí)施例中,所述監(jiān)控裝置包括發(fā)送模塊10、確定模塊11、獲取模塊12和生成模塊13。
[0070]發(fā)送模塊10,用于向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息。
[0071]具體的,被監(jiān)控程序預(yù)先關(guān)聯(lián)有一個(gè)通信窗口,發(fā)送模塊10向通信窗口發(fā)送探測消息,通信窗口可以為被監(jiān)控程序主窗口之外設(shè)置的一個(gè)后臺(tái)的窗口,不影響被監(jiān)控程序正常運(yùn)行。可選的,發(fā)送模塊10可以根據(jù)預(yù)設(shè)的時(shí)間周期向通信窗口發(fā)送探測消息,探測消息的類型本發(fā)明不作限制。
[0072]確定模塊11,用于若預(yù)設(shè)時(shí)間內(nèi)未收到所述通信窗口反饋的響應(yīng)消息,確定所述被監(jiān)控程序運(yùn)行異常。
[0073]具體的,如果被監(jiān)控程序運(yùn)行正常,被監(jiān)控程序關(guān)聯(lián)的通信窗口在接收到探測消息后,會(huì)在預(yù)設(shè)時(shí)間內(nèi)向確定模塊11反饋響應(yīng)消息;如果被監(jiān)控程序運(yùn)行異常,被監(jiān)控程序關(guān)聯(lián)的通信窗口在接收到探測消息后,無法向確定模塊11反饋響應(yīng)消息或反饋響應(yīng)消息超時(shí),確定模塊11在預(yù)設(shè)時(shí)長被未接收到響應(yīng)消息,則確定被監(jiān)控程序運(yùn)行異常。
[0074]獲取模塊12,用于獲取所述被監(jiān)控程序的堆棧信息。
[0075]具體的,堆棧信息中包括被監(jiān)控程序調(diào)用函數(shù)的調(diào)用記錄和當(dāng)前的程序指針地址,獲取模塊12在確定被監(jiān)控程序發(fā)生異常時(shí),獲取被監(jiān)控程序當(dāng)前的堆棧信息。
[0076]生成模塊13,用于根據(jù)所述堆棧信息生成異常日志文件。
[0077]具體的,生成模塊13根據(jù)獲取的堆棧信息生成異常日志文件,日常日志文件中保存有被監(jiān)控程序發(fā)生異常時(shí)的堆棧信息,軟件分析人員可以根據(jù)異常日志文件分析被監(jiān)控程序的異常原因。
[0078]實(shí)施本發(fā)明的實(shí)施例,通過向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息,在預(yù)設(shè)的時(shí)長內(nèi)未收到通信窗口反饋的響應(yīng)消息,確定被監(jiān)控程序發(fā)生異常,獲取被監(jiān)控程序的堆棧信息并根據(jù)堆棧信息生成異常日志文件,這樣可以自動(dòng)監(jiān)控被監(jiān)控程序發(fā)生的異常,并在發(fā)生異常時(shí)獲取被監(jiān)控程序的現(xiàn)場數(shù)據(jù),便于分析和確定被監(jiān)控程序的異常原因。
[0079]進(jìn)一步的,參見圖7和圖8,為本發(fā)明第二實(shí)施例提供的一種程序異常的監(jiān)控裝置的結(jié)構(gòu)示意圖,在本發(fā)明實(shí)施例中,所述監(jiān)控裝置除包括發(fā)生模塊10、確定模塊11、獲取模塊12和生成模塊13之外,還包括:注入模塊15、加載模塊14、校驗(yàn)?zāi)K16、解析模塊17和定位模塊18。
[0080]注入模塊15,用于生成動(dòng)態(tài)鏈接庫DLL,并向所述被監(jiān)控程序注入所述DLL。
[0081]加載模塊14,用于加載所述DLL以創(chuàng)建與所述被監(jiān)控程序關(guān)聯(lián)的通信窗口。
[0082]校驗(yàn)?zāi)K16,用于校驗(yàn)所述被監(jiān)控程序的完整性,若校驗(yàn)完整性成功,執(zhí)行所述向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息。
[0083]解析模塊17,用于解析所述異常日志文件,獲得所述被監(jiān)控程序的異常信息。
[0084]定位模塊18,用于根據(jù)所述被監(jiān)控程序的異常信息,定位所述被監(jiān)控程序的發(fā)生異常時(shí)的代碼行。
[0085]可選的,獲取模塊12包括查詢單元121和調(diào)用單元122。
[0086]查詢單元121,用于查詢所述被監(jiān)控程序的調(diào)試接口。
[0087]調(diào)用單元122,用于調(diào)用性能分析工具通過所述調(diào)試接口獲取所述被監(jiān)控程序的堆棧信息。
[0088]本發(fā)明實(shí)施例和方法實(shí)施例二屬于同一構(gòu)思,其帶來的技術(shù)效果也相同,具體請參照方法實(shí)施例二的描述,此處不再贅述。
[0089]參見圖9,本發(fā)明第三實(shí)施例提供了一種監(jiān)控裝置的結(jié)構(gòu)示意圖。如圖8所示,所述軟件測試設(shè)備1000可以包括:至少一個(gè)處理器1001,例如CPU,至少一個(gè)網(wǎng)絡(luò)接口 1004,用戶接口 1003,存儲(chǔ)器1005,至少一個(gè)通信總線1002。其中,通信總線1002用于實(shí)現(xiàn)這些組件之間的連接通信。其中,用戶接口 1003可以包括顯示屏(Display)、鍵盤(Keyboard),可選用戶接口 1003還可以包括標(biāo)準(zhǔn)的有線接口、無線接口。網(wǎng)絡(luò)接口 1004可選的可以包括標(biāo)準(zhǔn)的有線接口、無線接口(如W1-FI接口)。存儲(chǔ)器1005可以是高速RAM存儲(chǔ)器,也可以是非不穩(wěn)定的存儲(chǔ)器(non-volatile memory),例如至少一個(gè)磁盤存儲(chǔ)器。存儲(chǔ)器1005可選的還可以是至少一個(gè)位于遠(yuǎn)離前述處理器1001的存儲(chǔ)裝置。如圖8所示,作為一種計(jì)算機(jī)存儲(chǔ)介質(zhì)的存儲(chǔ)器1005中可以包括操作系統(tǒng)、網(wǎng)絡(luò)通信模塊、用戶接口模塊以及應(yīng)用程序。
[0090]在圖8所示的監(jiān)控裝置1000中,處理器1001可以用于調(diào)用存儲(chǔ)器1005中存儲(chǔ)的軟件測試應(yīng)用程序,并具體執(zhí)行以下步驟:
[0091]向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息;
[0092]若預(yù)設(shè)時(shí)間內(nèi)未收到所述通信窗口反饋的響應(yīng)消息,確定所述被監(jiān)控程序運(yùn)行異常;
[0093]獲取所述被監(jiān)控程序的堆棧信息;
[0094]根據(jù)所述堆棧信息生成異常日志文件。
[0095]在本發(fā)明的一些實(shí)施例中,處理器1001還用于執(zhí)行:
[0096]生成動(dòng)態(tài)鏈接庫DLL,并向所述被監(jiān)控程序注入所述DLL ;
[0097]加載所述DLL以創(chuàng)建與所述被監(jiān)控程序關(guān)聯(lián)的通信窗口。
[0098]在本發(fā)明的一些實(shí)施例中,處理器1001執(zhí)行所述向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息包括:
[0099]創(chuàng)建監(jiān)控線程,所述監(jiān)控線程用于監(jiān)控所述被監(jiān)控程序的運(yùn)行過程;
[0100]指示所述監(jiān)控線程向所述被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息。
[0101]在本發(fā)明的一些實(shí)施例中,處理器1001還用于執(zhí)行:
[0102]校驗(yàn)所述被監(jiān)控程序的完整性,若校驗(yàn)完整性成功,執(zhí)行所述向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息。
[0103]在本發(fā)明的一些實(shí)施例中,處理器1001執(zhí)行所述獲取所述被監(jiān)控程序的堆棧信息包括:
[0104]查詢所述被監(jiān)控程序的調(diào)試接口 ;
[0105]調(diào)用性能分析工具通過所述調(diào)試接口獲取所述被監(jiān)控程序的堆棧信息。
[0106]在本發(fā)明的一些實(shí)施例中,處理器1001還用于執(zhí)行:解析所述異常日志文件,獲得所述被監(jiān)控程序的異常信息;
[0107]根據(jù)所述被監(jiān)控程序的異常信息,定位所述被監(jiān)控程序的發(fā)生異常時(shí)的代碼行。
[0108]在本發(fā)明的一些實(shí)施例中,所述通信窗口為透明的通信窗口。
[0109]在本發(fā)明的一些實(shí)施例中,所述異常日志文件的格式包括事件追蹤日志ETL格式或Dump格式。
[0110]實(shí)施本發(fā)明的實(shí)施例,通過向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息,在預(yù)設(shè)的時(shí)長內(nèi)未收到通信窗口反饋的響應(yīng)消息,確定被監(jiān)控程序發(fā)生異常,獲取被監(jiān)控程序的堆棧信息并根據(jù)堆棧信息生成異常日志文件,這樣可以自動(dòng)監(jiān)控被監(jiān)控程序發(fā)生的異常,并在發(fā)生異常時(shí)獲取被監(jiān)控程序的現(xiàn)場數(shù)據(jù),便于分析和確定被監(jiān)控程序的異常原因。
[0111]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory, ROM)或隨機(jī)存儲(chǔ)記憶體(Random AccessMemory, RAM)等。
[0112]以上所揭露的僅為本發(fā)明一種較佳實(shí)施例而已,當(dāng)然不能以此來限定本發(fā)明之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分流程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于發(fā)明所涵蓋的范圍。
【權(quán)利要求】
1.一種程序異常的監(jiān)控方法,其特征在于,包括: 向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息; 若預(yù)設(shè)時(shí)間內(nèi)未收到所述通信窗口反饋的響應(yīng)消息,確定所述被監(jiān)控程序運(yùn)行異常; 獲取所述被監(jiān)控程序的堆棧信息; 根據(jù)所述堆棧信息生成異常日志文件。
2.如權(quán)利要求1所述的方法,其特征在于,所述向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息之前,還包括: 生成動(dòng)態(tài)鏈接庫DLL,并向所述被監(jiān)控程序注入所述DLL ; 加載所述DLL以創(chuàng)建與所述被監(jiān)控程序關(guān)聯(lián)的通信窗口。
3.如權(quán)利要求1或2所述的方法,其特征在于,所述向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息包括: 創(chuàng)建監(jiān)控線程,所述監(jiān)控線程用于監(jiān)控所述被監(jiān)控程序的運(yùn)行過程; 指示所述監(jiān)控線程向所述被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息。
4.如權(quán)利要求3所述的方法,其特征在于,所述向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息之前,還包括: 校驗(yàn)所述被監(jiān)控程序的完整性,若校驗(yàn)完整性成功,執(zhí)行所述向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息。
5.如權(quán)利要求4所述的方法,其特征在于,所述獲取所述被監(jiān)控程序的堆棧信息包括: 查詢所述被監(jiān)控程序的調(diào)試接口; 調(diào)用性能分析工具通過所述調(diào)試接口獲取所述被監(jiān)控程序的堆棧信息。
6.如權(quán)利要求5所述的方法,其特征在于,所述根據(jù)所述堆棧信息生成異常日志文件之后,還包括: 解析所述異常日志文件,獲得所述被監(jiān)控程序的異常信息; 根據(jù)所述被監(jiān)控程序的異常信息,定位所述被監(jiān)控程序的發(fā)生異常時(shí)的代碼行。
7.如權(quán)利要求1-6任意一項(xiàng)所述的方法,其特征在于,所述通信窗口為透明的通信窗□。
8.如權(quán)利要求7所述的方法,其特征在于,所述異常日志文件的格式包括事件追蹤日志ETL格式或Dump格式。
9.一種程序異常的監(jiān)控裝置,其特征在于,包括: 發(fā)送模塊,用于向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息; 確定模塊,用于若預(yù)設(shè)時(shí)間內(nèi)未收到所述通信窗口反饋的響應(yīng)消息,確定所述被監(jiān)控程序運(yùn)行異常; 獲取模塊,用于獲取所述被監(jiān)控程序的堆棧信息; 生成模塊,用于根據(jù)所述堆棧信息生成異常日志文件。
10.如權(quán)利要求9所述的裝置,其特征在于,還包括: 注入模塊,用于生成動(dòng)態(tài)鏈接庫DLL,并向所述被監(jiān)控程序注入所述DLL ; 加載模塊,用于加載所述DLL以創(chuàng)建與所述被監(jiān)控程序關(guān)聯(lián)的通信窗口。
11.如權(quán)利要求10所述的裝置,其特征在于,還包括: 校驗(yàn)?zāi)K,用于校驗(yàn)所述被監(jiān)控程序的完整性,若校驗(yàn)完整性成功,執(zhí)行所述向被監(jiān)控程序關(guān)聯(lián)的通信窗口發(fā)送探測消息。
12.如權(quán)利要求4所述的裝置,其特征在于,所述獲取模塊包括: 查詢單元,用于查詢所述被監(jiān)控程序的調(diào)試接口 ; 調(diào)用單元,用于調(diào)用性能分析工具通過所述調(diào)試接口獲取所述被監(jiān)控程序的堆棧信肩、O
13.如權(quán)利要求12所述的裝置,其特征在于,還包括: 解析模塊,用于解析所述異常日志文件,獲得所述被監(jiān)控程序的異常信息; 定位模塊,用于根據(jù)所述被監(jiān)控程序的異常信息,定位所述被監(jiān)控程序的發(fā)生異常時(shí)的代碼行。
14.如權(quán)利要求9-13任意一項(xiàng)所述的裝置,其特征在于,所述通信窗口為透明的通信窗P。
15.如權(quán)利要求14所述的裝置,其特征在于,所述異常日志文件的格式包括事件追蹤日志ETL格式或Dump格式。
【文檔編號(hào)】G06F11/30GK104268055SQ201410440651
【公開日】2015年1月7日 申請日期:2014年9月1日 優(yōu)先權(quán)日:2014年9月1日
【發(fā)明者】歐瑞清 申請人:騰訊科技(深圳)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
张家港市| 兴业县| 文登市| 娄底市| 双鸭山市| 洛浦县| 松原市| 凤冈县| 信宜市| 班玛县| 黑河市| 南陵县| 舟曲县| 吴旗县| 房山区| 乐昌市| 凤城市| 忻城县| 长宁县| 新巴尔虎左旗| 页游| 梅河口市| 镶黄旗| 偃师市| 南丹县| 奇台县| 青海省| 咸阳市| 保山市| 田林县| 青州市| 颍上县| 任丘市| 台中县| 赫章县| 明星| 涡阳县| 新丰县| 衡山县| 江达县| 昌平区|