程序內(nèi)部信息的輸出方法、獲取方法、監(jiān)測方法及其裝置制造方法
【專利摘要】本申請公開了一種程序內(nèi)部信息的輸出方法、獲取方法、監(jiān)測方法及其裝置;其中,所述輸出方法包括:得到程序內(nèi)部信息;針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記;針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊;以及向程序信息集合輸出所述信息塊。本申請能夠低代價(jià)且可靠地輸出或讓外部獲取/監(jiān)測程序內(nèi)部信息。
【專利說明】程序內(nèi)部信息的輸出方法、獲取方法、監(jiān)測方法及其裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種程序內(nèi)部信息的輸出方法、獲取方法、監(jiān)測方法及其裝置。
【背景技術(shù)】
[0002]目前獲取程序(包括進(jìn)程、線程等)在執(zhí)行過程中的內(nèi)部信息的方式主要包括兩類:
[0003]第一類技術(shù)方案如圖1所示:在服務(wù)程序中添加API (ApplicationProgrammingInterface,應(yīng)用程序編程接口),監(jiān)控程序/測試用例通過調(diào)用API獲取程序內(nèi)部信息。
[0004]第二類技術(shù)方案如圖2所示:服務(wù)程序?qū)⒊绦騼?nèi)部信息以Log(日志)/共享內(nèi)存的方式給出,監(jiān)控程序/測試用例通過讀取Log/共享內(nèi)存來獲取程序內(nèi)部信息。
[0005]前述第一類方案中添加API的方式一般需要增加很多的設(shè)計(jì)和編碼工作:對外,通常需要添加獨(dú)立或者共享的服務(wù)接口,以API的方式對外提供查詢服務(wù);同時(shí),其內(nèi)部通常還涉及到使用多線程技術(shù),甚至涉及維護(hù)線程池,以這樣的方式支持外部查詢者查詢程序內(nèi)部信息;同時(shí)為了解決臟讀問題,即讀線程正在讀取的信息被其他進(jìn)程、線程改寫從而造成所讀信信息不正確,還需要涉及到鎖技術(shù)。這種方案實(shí)現(xiàn)成本很高,而且會(huì)增加服務(wù)程序的復(fù)雜度,使得維護(hù)成本升高。這樣的方案通常應(yīng)用在不吝惜成本的大型服務(wù)程序或者操作系統(tǒng)的驅(qū)動(dòng)程序中,對于一般性程序完全不適用。
[0006]而前述第二類方案中以Log的形式/共享內(nèi)存的方式給出程序內(nèi)部信息的成本通常是很低的,也不會(huì)明顯增加服務(wù)程序的復(fù)雜度,但是服務(wù)程序在給出這些程序內(nèi)部信息時(shí),Log文件/共享內(nèi)存通常只有一份,這些程序內(nèi)部信息會(huì)和其他Log\共享內(nèi)存信息摻雜在一起,監(jiān)控程序/測試用例很難把這些程序內(nèi)部信息從所有信息中過濾出來,或者需要付出很高的成本才能做到:高成本主要體現(xiàn)在需要編寫很多Parser,并且維護(hù)這些Parser ;而且容易出錯(cuò),特別是在添加新的輸出Log、寫共享內(nèi)存的代碼時(shí),或者修改了已有輸出Log、寫共享內(nèi)存的代碼時(shí),錯(cuò)誤更加容易產(chǎn)生,且不易被察覺到;
[0007]Log文件/共享內(nèi)存只有一份,而服務(wù)程序有可能是多線程的,所以不同線程給出的程序內(nèi)部信息也會(huì)摻雜在一起,很難分辨,容易出錯(cuò),或者成本很高;
[0008]任何程序都可能發(fā)生錯(cuò)誤,所以以Log/共享內(nèi)存形式給出的程序內(nèi)部信息可能是不完整的,或者被錯(cuò)誤的修改了,在現(xiàn)有技術(shù)中,這些錯(cuò)誤都無法被檢測到。
【發(fā)明內(nèi)容】
[0009]本申請要解決的技術(shù)問題是如何低代價(jià)且可靠地輸出程序內(nèi)部信息。
[0010]為了解決上述問題,本申請?zhí)峁┝艘环N程序內(nèi)部信息的輸出方法,包括:
[0011]得到程序內(nèi)部信息;
[0012]針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記;
[0013]針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊;以及
[0014]向程序信息集合輸出所述信息塊。
[0015]進(jìn)一步地,針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記的步驟包括:
[0016]在程序內(nèi)部信息的首部、或結(jié)尾、或約定位置添加標(biāo)記。
[0017]進(jìn)一步地,所述標(biāo)記包括:
[0018]約定的字符串、約定的通用唯一識(shí)別碼、進(jìn)程標(biāo)識(shí)、線程標(biāo)識(shí)。
[0019]進(jìn)一步地,所述針對添加了所述一個(gè)或者標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊的步驟包括:
[0020]針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行封裝,得到信息塊。[0021 ]進(jìn)一步地,所述針對添加了所述一個(gè)或者標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊的步驟還包括:
[0022]針對所述程序內(nèi)部信息計(jì)算哈希值;以及
[0023]將所述哈希值添加到信息塊中。
[0024]進(jìn)一步地,所述針對添加了所述一個(gè)或者標(biāo)記的所述程序內(nèi)部信息進(jìn)行封裝的步驟包括:
[0025]對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行壓縮;以及
[0026]對經(jīng)壓縮的程序內(nèi)部信息進(jìn)行封裝。
[0027]進(jìn)一步地,所述程序信息集合包括以軟件形式存在、可以存儲(chǔ)一定量信息的信息集合,包括:
[0028]日志;共享內(nèi)存;注冊表;數(shù)據(jù)庫。
[0029]本申請還提供了一種程序內(nèi)部信息的獲取方法,包括:
[0030]讀取程序信息集合,得到信息塊;
[0031]還原所述信息塊;
[0032]根據(jù)標(biāo)記,篩選出添加了標(biāo)記的所述程序內(nèi)部信息;以及
[0033]去除所述標(biāo)記,得到所述程序內(nèi)部信息。
[0034]進(jìn)一步地,所述標(biāo)記包括:
[0035]約定的字符串、約定的通用唯一識(shí)別碼、進(jìn)程標(biāo)識(shí)、線程標(biāo)識(shí)。
[0036]進(jìn)一步地,所述還原所述信息塊的步驟包括:
[0037]如果所述信息塊是經(jīng)過封裝的,則針對所述信息塊進(jìn)行解封裝。
[0038]進(jìn)一步地,所述還原所述信息塊的步驟包括:
[0039]如果所述信息塊是包含哈希值的,則根據(jù)所述哈希值對還原得到的程序內(nèi)部信息進(jìn)行校驗(yàn)。
[0040]進(jìn)一步地,所述還原所述信息塊的步驟包括:
[0041]如果所述信息塊中的程序內(nèi)部信息是經(jīng)過壓縮的,則針對所述經(jīng)壓縮的程序內(nèi)部信息進(jìn)行解壓縮。
[0042]本申請要解決的又一技術(shù)問題是如何低代價(jià)且可靠地讓外部獲取程序內(nèi)部信息。
[0043]為了解決上述問題,本申請?zhí)峁┝艘环N程序內(nèi)部信息的輸出裝置,包括:
[0044]信息獲取器,用于得到程序內(nèi)部信息;
[0045]信息標(biāo)記器,用于針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記;[0046]信息處理器,用于針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊;以及
[0047]信息輸出器,用于向程序信息集合輸出所述信息塊。
[0048]進(jìn)一步地,所述信息標(biāo)記器針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記是指:
[0049]所述信息標(biāo)記器在程序內(nèi)部信息的首部、或結(jié)尾、或約定位置添加標(biāo)記。
[0050]進(jìn)一步地,所述標(biāo)記包括:
[0051]約定的字符串、約定的通用唯一識(shí)別碼、進(jìn)程標(biāo)識(shí)、線程標(biāo)識(shí)。
[0052]進(jìn)一步地,所述信息處理器針對添加了所述一個(gè)或者標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊是指:
[0053]所述信息處理器針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行封裝,得到信息塊。
[0054]進(jìn)一步地,所述信息處理器針對添加了所述一個(gè)或者標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊時(shí),還用于針對所述程序內(nèi)部信息計(jì)算哈希值,以及將所述哈希值添加到所述信息塊中。
[0055]進(jìn)一步地,所述信息處理器對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行封裝是指,對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行壓縮,將經(jīng)壓縮的程序內(nèi)部信息進(jìn)行封裝。
[0056]進(jìn)一步地,所述程序信息集合包括以軟件形式存在、能夠存儲(chǔ)一定量信息的信息集合,包括:
[0057]日志;共享內(nèi)存;注冊表;數(shù)據(jù)庫。
[0058]本申請還提供一種程序內(nèi)部信息的獲取裝置,包括:
[0059]信息讀取器,用于讀取程序信息集合,得到信息塊;
[0060]信息還原器,用于還原所述信息塊;
[0061]信息過濾器,用于根據(jù)標(biāo)記,篩選出添加了標(biāo)記的所述程序內(nèi)部信息;以及
[0062]標(biāo)記清除器,用于去除所述標(biāo)記,得到所述程序內(nèi)部信息。
[0063]進(jìn)一步地,所述標(biāo)記包括:
[0064]約定的字符串、約定的通用唯一識(shí)別碼、進(jìn)程標(biāo)識(shí)、線程標(biāo)識(shí)。
[0065]進(jìn)一步地,所述信息還原器還原所述信息塊是指:
[0066]所述信息還原器當(dāng)所述信息塊是經(jīng)過封裝的時(shí),針對所述信息塊進(jìn)行解封裝。
[0067]進(jìn)一步地,所述信息還原器還用于當(dāng)所述信息塊包含哈希值時(shí),根據(jù)所述哈希值對還原得到的程序內(nèi)部信息進(jìn)行校驗(yàn)。
[0068]進(jìn)一步地,所述信息還原器還用于當(dāng)所述信息塊中的程序內(nèi)部信息是經(jīng)過壓縮的時(shí),針對所述經(jīng)壓縮的程序內(nèi)部信息進(jìn)行解壓縮。
[0069]本申請要解決的又一技術(shù)問題是如何低代價(jià)且可靠地讓外部監(jiān)測程序內(nèi)部信息。
[0070]為了解決上述問題,本申請?zhí)峁┝艘环N監(jiān)測程序內(nèi)部信息的方法,包括:
[0071]得到程序內(nèi)部信息;
[0072]針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記;
[0073]針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊;以及[0074]向程序信息集合輸出所述信息塊;
[0075]讀取程序信息集合,得到信息塊;
[0076]還原所述信息塊;
[0077]根據(jù)標(biāo)記,篩選出添加了標(biāo)記的所述程序內(nèi)部信息;以及
[0078]去除所述標(biāo)記,并將去除所述標(biāo)記后的程序內(nèi)部信息發(fā)送至外部監(jiān)測裝置。
[0079]本申請還提供了一種監(jiān)測程序內(nèi)部信息的裝置,包括:
[0080]信息獲取器,用于得到程序內(nèi)部信息;
[0081]信息標(biāo)記器,用于針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記;
[0082]信息處理器,用于針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊;以及
[0083]信息輸出器,用于向程序信息集合輸出所述信息塊;
[0084]信息讀取器,用于讀取程序信息集合,得到信息塊;
[0085]信息還原器,用于還原所述信息塊;
[0086]信息過濾器,用于根據(jù)標(biāo)記,篩選出添加了標(biāo)記的所述程序內(nèi)部信息;以及
[0087]標(biāo)記清除器,用于去除所述標(biāo)記,并將去除所述標(biāo)記后的程序內(nèi)部信息發(fā)送至外部監(jiān)測裝置。
[0088]本申請的一個(gè)實(shí)施例至少具有以下優(yōu)點(diǎn):能夠低成本的輸出/獲取程序內(nèi)部信息,而且不易出錯(cuò);本申請的另一實(shí)施例可以區(qū)分不同進(jìn)程/線程的程序內(nèi)部信息;本申請的又一實(shí)施例可以在輸出/獲取程序內(nèi)部信息前進(jìn)行驗(yàn)證,能保證程序內(nèi)部信息的完整無誤。當(dāng)然,實(shí)施本申請的任一產(chǎn)品必不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
【專利附圖】
【附圖說明】
[0089]圖1是現(xiàn)有技術(shù)中獲取程序內(nèi)部信息的第一類方法的示意圖;
[0090]圖2是現(xiàn)有技術(shù)中獲取程序內(nèi)部信息的第二類方法的示意圖;
[0091]圖3是一個(gè)優(yōu)選實(shí)施例中程序內(nèi)部信息的輸出方法的流程示意圖;
[0092]圖4是一個(gè)優(yōu)選實(shí)施例中程序內(nèi)部信息的獲取方法的流程示意圖;
[0093]圖5是一個(gè)優(yōu)選實(shí)施例中程序內(nèi)部信息的輸出裝置的結(jié)構(gòu)示意圖;
[0094]圖6是一個(gè)優(yōu)選實(shí)施例中程序內(nèi)部信息的獲取裝置的結(jié)構(gòu)示意圖;
[0095]圖7是一個(gè)程序內(nèi)部信息的監(jiān)測裝置的具體備選例的示意圖。
【具體實(shí)施方式】
[0096]下面將結(jié)合附圖及實(shí)施例對本申請的技術(shù)方案進(jìn)行更詳細(xì)的說明。
[0097]需要說明的是,如果不沖突,本申請實(shí)施例以及實(shí)施例中的各個(gè)特征可以相互結(jié)合,均在本申請的保護(hù)范圍之內(nèi)。另外,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0098]本申請實(shí)施例中的程序內(nèi)部信息為程序在執(zhí)行過程中存在于進(jìn)程或線程內(nèi)部的信息。從段結(jié)構(gòu)語言的角度看來,所述的程序內(nèi)部信息包括但不限于:局部變量中存儲(chǔ)的值,全局變量中存儲(chǔ)的值,靜態(tài)變量中存儲(chǔ)的值,結(jié)構(gòu)體中存儲(chǔ)的所有的值,在堆中、棧中或者其他段中分配的內(nèi)存中存儲(chǔ)的值。從面向?qū)ο蟮恼Z言角度看來,所述的程序內(nèi)部信息包括但不限于:類實(shí)例中存儲(chǔ)的所有的值,類靜態(tài)成員變量中存儲(chǔ)的所有的值,集合、哈希表、向量、數(shù)組、有向圖、無向圖、線性表、鏈表、堆?;蛘咂渌愃茢?shù)據(jù)結(jié)構(gòu)中存儲(chǔ)的所有的值。從操作系統(tǒng)層面看來,所述的程序內(nèi)部信息包括但不限于:寄存器中存儲(chǔ)的值,緩存、內(nèi)存或者虛擬內(nèi)存中存儲(chǔ)的值,被持久化或者串行化到本地文件或數(shù)據(jù)庫中的進(jìn)程或者線程中存儲(chǔ)的信息,系統(tǒng)的互斥變量、鎖、信號(hào)量等用于進(jìn)程、線程間同步的變量中存儲(chǔ)的信息。應(yīng)當(dāng)注意的是,隨著技術(shù)的發(fā)展,程序在執(zhí)行過程中的內(nèi)部信息的范圍也會(huì)隨之?dāng)U大,但這些信息都將落入本申請公開的程序內(nèi)部信息的范圍。
[0099]在本申請的一個(gè)優(yōu)選實(shí)施例中,提供了一種程序內(nèi)部信息的輸出方法,如圖3所示,包括下列步驟S301?步驟S304:
[0100]S301、得到程序內(nèi)部信息;
[0101]S302、針對該程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記;
[0102]S303、針對添加了標(biāo)記的程序內(nèi)部信息進(jìn)行處理生成信息塊;以及
[0103]S304、向程序信息集合輸出所述信息塊。
[0104]本實(shí)施例中,步驟S301中得到程序內(nèi)部信息過程可以但不限于包括:程序根據(jù)設(shè)計(jì)在適當(dāng)?shù)臅r(shí)間或者條件下調(diào)用或者觸發(fā)該實(shí)施例中的方法,并將程序內(nèi)部信息的值或者地址以參數(shù)的形式提供給該實(shí)施例中的方法;該實(shí)施例中的方法能夠訪問部分的或者全部的程序的內(nèi)部信息,例如通過共享內(nèi)存技術(shù),該實(shí)施例中的方法在適當(dāng)?shù)臅r(shí)間或條件下主動(dòng)的訪問這些程序的內(nèi)部信息;在某些操作系統(tǒng)中,比如Microsoft編寫的Window系列操作系統(tǒng)、開源社區(qū)編寫的Unix\Linux系列操作系統(tǒng)、Apple編寫的Mac系列操作系統(tǒng)等,系統(tǒng)提供了對進(jìn)程、線程進(jìn)行調(diào)試(Debug)的功能,這些功能也可以有效的在適當(dāng)?shù)臅r(shí)間或者條件下掛起進(jìn)程、線程,然后獲得程序的內(nèi)部信息,然后使得該進(jìn)程、線程繼續(xù)。
[0105]本實(shí)施例中,程序信息集合可以包括但不限于:日志、共享內(nèi)存、注冊表及數(shù)據(jù)庫等以軟件形式存在、可以存儲(chǔ)一定量信息的信息集合;硬盤、軟盤、DVD、閃存、硬盤陣列等以硬件形式存在、可以存儲(chǔ)一定量信息的信息集合;云存儲(chǔ)服務(wù)、SAN、共享硬盤等以服務(wù)形式存在、可以存儲(chǔ)一定量信息的信息集合。當(dāng)然,本領(lǐng)域技術(shù)人員根據(jù)在此公開的說明書和權(quán)利要求書的指導(dǎo),還可以找到其他形式的、可以存儲(chǔ)一定量信息的信息集合,但并未離開程序信息集合的范圍。
[0106]本實(shí)施例中,步驟S304中向程序信息集合輸出信息塊的過程將按照約定的格式進(jìn)行輸出。例如,約定使用行的形式輸出。此處的行應(yīng)理解為以約定符號(hào)、字符串分割而成的一段數(shù)據(jù)流,經(jīng)典地,UniX\LinuX系統(tǒng)使用符號(hào)‘\n’(十六進(jìn)制表示為OxOA)來分行,Windows系統(tǒng)使用字符串‘\n\r’(十六進(jìn)制表示0X0A、0X0D)來分行,Mac系統(tǒng)使用符號(hào)‘\r’(十六進(jìn)制表示OxOD)來分行,HTML瀏覽器使用字符串‘〈br>’來分行。但是,本領(lǐng)域技術(shù)人員可以理解到,任何事先約定的符號(hào)、字符串都可以用以分行,而沒有離開本申請所描述的范圍。再例如,約定使用XML的形式輸出,信息塊將以XML中的一個(gè)元素或者多個(gè)元素的形式輸出。當(dāng)然,本領(lǐng)域技術(shù)人員還可以找到其他的約定格式輸出,但并未離開約定格式這一范圍。
[0107]在另一備選實(shí)施例中,步驟S302具體可以包括:
[0108]在程序內(nèi)部信息的首部、或結(jié)尾、或約定位置添加標(biāo)記。
[0109]此處的約定位置不應(yīng)當(dāng)機(jī)械地理解為僅僅包括事先約定的固定位置,其還包括根據(jù)事先約定的格式可以確定的位置。以下結(jié)合示例說明:例如,使用‘\t’(十六進(jìn)制表示0x09)分隔成列的內(nèi)部信息,形如,“l(fā)ine0155:\tTag:\tThisis a message”,信息中有兩個(gè)‘\t’,將信息分隔成三列,即“l(fā)ine0155”、“Tag:”和“This is a message”,作為示例,可以約定在第二列的“Tag: ”后添加標(biāo)記,例如,所添加標(biāo)記為“Special_Log_Tag0527”,那么添加后的第二列為“Tag:Special_Log_Tag0527”,添加后的信息為“l(fā)ine0155: \tTag:Special_Log_Tag0527\tThis is a message”。再例如,使用 XML格式的內(nèi)部信息,形如:〈line id =” 155”tag =””message =”This is a message”>,作為不例,可以約定在屬性tag中添加標(biāo)記,例如,所添加標(biāo)記為“Special_Log_Tag0527”,那么添加后的信息為〈line id =,,155,,tag =,,Special_Log_Tag0527,,message =,,This is a message,,>。當(dāng)然,本領(lǐng)域技術(shù)人員根據(jù)在此公開的說明書和權(quán)利要求書的指導(dǎo),還可以找到方式來約定位置,但這些并未離開本申請公開的約定位置的范圍。
[0110]添加標(biāo)記的作用在于將添加標(biāo)記的信息與未添加標(biāo)記的信息區(qū)別開來。實(shí)際應(yīng)用時(shí)不限于采用上述方法標(biāo)記程序內(nèi)部信息,也可以采用別的方法標(biāo)記程序內(nèi)部信息,以使其區(qū)別于其它信息。
[0111]在另一備選實(shí)施例中,標(biāo)記可以但不限于包括:事先約定的字符串,其可以是事先約定的固定字符串,也可以是滿足一定約定的動(dòng)態(tài)字符串。例如,如果使用^yyyy-MM-dd: HH:mm: ss”格式的時(shí)間字符串來進(jìn)行標(biāo)記,同時(shí)可以約定“yyyy-MM-dd”部分用于標(biāo)記識(shí)別,例如:標(biāo)記“2012-08-31:10:10:15”,“2012-08-31”部分用于標(biāo)記識(shí)別;事先約定的UUID(Universally UniqueIdentifier,通用唯一識(shí)別碼),這樣識(shí)別碼可以保證一定不會(huì)與其他非約定字符串混淆;當(dāng)程序內(nèi)部信息分別屬于不同進(jìn)程時(shí),標(biāo)記還可以包括程序內(nèi)部信息的當(dāng)前進(jìn)程ID(標(biāo)識(shí));當(dāng)程序內(nèi)部信息分別屬于不同線程時(shí),標(biāo)記還可以包括程序內(nèi)部信息的線程ID (標(biāo)識(shí));當(dāng)包括當(dāng)前進(jìn)程ID或線程ID時(shí),如果在搜索時(shí)將標(biāo)記限定為某個(gè)進(jìn)程或線程的ID,就可以搜索出屬于某個(gè)進(jìn)程或線程的程序內(nèi)部信息。實(shí)際應(yīng)用時(shí)標(biāo)記也可以是或包括其它標(biāo)識(shí)。
[0112]在另一備選實(shí)施例中,可以只有一個(gè)標(biāo)記;而在另一備選實(shí)施例中,也可以有多個(gè)標(biāo)記。例如,在既有多進(jìn)程又有多線程的情況下,可以將進(jìn)程ID和線程ID都添加到內(nèi)部信息中。
[0113]在另一備選實(shí)施例中,備選地,步驟S303可以包括:針對添加了一個(gè)或者多個(gè)標(biāo)記的程序內(nèi)部信息進(jìn)行封裝,從而使程序內(nèi)部信息可以表達(dá)更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。以下將舉例說明復(fù)雜數(shù)據(jù)結(jié)構(gòu)和非復(fù)雜數(shù)據(jù)結(jié)構(gòu)的區(qū)別,例如,程序內(nèi)部的一個(gè)整形數(shù)變量可以看做典型的非復(fù)雜數(shù)據(jù)結(jié)構(gòu),而程序內(nèi)部的一個(gè)存放整形數(shù)的鏈表可以看做典型的復(fù)雜數(shù)據(jù)結(jié)構(gòu)。在表示整形數(shù)鏈表時(shí),簡單的串行化或者字符串化(toString操作)將不再能勝任,所以需要使用約定的格式對這樣的數(shù)據(jù)結(jié)構(gòu)進(jìn)行封裝。例如,針對上文中提到的鏈表,可以使用INI格式進(jìn)行封裝,例如,該鏈表為{3}->{5}->{4}->NULL,名稱為intLink,此鏈表包含三個(gè)節(jié)點(diǎn),第一節(jié)點(diǎn)存放整數(shù)3,并指向第二節(jié)點(diǎn),第二節(jié)點(diǎn)存放整數(shù)5,并指向第三節(jié)點(diǎn),第三節(jié)點(diǎn)存放整數(shù)4,并指向NULL,即空指針,表示第三節(jié)點(diǎn)為鏈表的最后一個(gè)節(jié)點(diǎn)。使用INI格式封裝,會(huì)將數(shù)據(jù)封裝成形如:intLink [O] = 3 ;intLink[l] = 5 ; intLink [2]=4 ;的數(shù)據(jù)信息。再例如,對于上文提到的鏈表,如果使用XML格式封裝,會(huì)將數(shù)據(jù)封裝成形如:<intLink><node i =“3”/Xnode i =“5”/Xnode i = “4”/>〈/intLink> 的數(shù)據(jù)信息。當(dāng)然,本領(lǐng)域技術(shù)人員根據(jù)在此公開的內(nèi)容的啟示,還可以使用其他的格式來封裝數(shù)據(jù),但其均未離開本申請的精神和范圍。
[0114]在另一備選實(shí)施例中,備選地,步驟S303可以包括:針對程序內(nèi)部信息計(jì)算哈希值,并將該哈希值添加到信息塊中。計(jì)算哈希值的作用在于可以幫助后續(xù)過程校驗(yàn)程序內(nèi)部信息的完整性。用于計(jì)算哈希值的哈希算法有很多種選擇,優(yōu)選地,可以選擇MD5哈希算法。
[0115]在另一備選實(shí)施例中,備選地,步驟S303可以包括:對添加了標(biāo)記的程序內(nèi)部信息進(jìn)行壓縮,并將經(jīng)壓縮的程序內(nèi)部信息封裝成信息塊。對數(shù)據(jù)進(jìn)行壓縮可以減少輸出信息所占用的存儲(chǔ)空間。用于壓縮計(jì)算的壓縮算法有很多種選擇,典型地,可以選擇哈夫曼壓縮算法。
[0116]在另一備選實(shí)施例中,在步驟S304中,信息塊一次性寫入程序信息集合。此處的一次性寫入是指線程互斥的一次性寫入,即當(dāng)一個(gè)線程在寫入信息塊時(shí),不會(huì)被打斷,如果在其寫入過程中,正好遇到CPU時(shí)間片用完,線程被換出,那么其他線程也無法寫入信息塊,必須等該線程重新?lián)Q入,并完成寫入操作后,才允許其他線程寫入,之謂互斥。
[0117]實(shí)際應(yīng)用時(shí)也不排除分條寫入的實(shí)現(xiàn)方式。
[0118]此外,本申請實(shí)施例還提供一種程序內(nèi)部信息的獲取方法。
[0119]所述程序內(nèi)部信息的獲取方法是對使用所述程序內(nèi)部信息的輸出方法所輸出的程序信息集合進(jìn)行解析獲得程序內(nèi)部信息的方法。
[0120]所述程序內(nèi)部信息的獲取方法如圖4所示,包括下列步驟S401?S404:
[0121]S401、讀取程序信息集合,得到信息塊;
[0122]S402、還原所述信息塊;
[0123]S403、根據(jù)標(biāo)記,篩選出添加了標(biāo)記的程序內(nèi)部信息;以及
[0124]S404、去除標(biāo)記,得到程序內(nèi)部信息。
[0125]所述解析程序內(nèi)部信息的方法是輸出程序內(nèi)部信息的逆過程,包括:讀取程序信息集合,拆解出信息塊;然后針對信息塊進(jìn)行還原操作,得到添加了標(biāo)記的程序內(nèi)部信息。
[0126]當(dāng)然,步驟S402可能未產(chǎn)生所需程序內(nèi)部信息,因?yàn)槌绦蛐畔⒓现锌赡苡衅渌袷降男畔ⅲ渌袷降男畔⒖赡懿⒉环霞s定格式,所以還原過程包括對信息塊的篩選。備選地,還原信息塊的步驟包括:將不符合約定格式或者無法還原的信息塊直接丟棄,還原得到添加了標(biāo)記的程序內(nèi)部信息后,基于約定的標(biāo)記對程序內(nèi)部信息進(jìn)行篩選。備選地,基于約定的標(biāo)記對程序內(nèi)部信息進(jìn)行篩選的步驟包括:針對符合約定的標(biāo)記,其對應(yīng)的程序內(nèi)部信息保留,針對不符合約定的標(biāo)記,其對應(yīng)的程序內(nèi)部信息丟棄。另一備選地,基于約定的標(biāo)記對程序內(nèi)部信息進(jìn)行篩選的步驟包括:根據(jù)約定標(biāo)記,可以將對應(yīng)的程序內(nèi)部信息進(jìn)行分類,最后丟棄標(biāo)記,得到程序內(nèi)部信息。
[0127]本實(shí)施例中,程序信息集合可以但不限于包括:日志,共享內(nèi)存,注冊表,數(shù)據(jù)庫等以軟件形式存在、可以存儲(chǔ)一定量信息的信息集合;硬盤、軟盤、DVD、閃存、硬盤陣列等以硬件形式存在、可以存儲(chǔ)一定量信息的信息集合;云存儲(chǔ)服務(wù)、SAN、共享硬盤等以服務(wù)形式存在、可以存儲(chǔ)一定量信息的信息集合。當(dāng)然,本領(lǐng)域技術(shù)人員根據(jù)在此公開的說明書和權(quán)利要求書的指導(dǎo),還可以找到其他形式的、可以存儲(chǔ)一定量信息的信息集合,但并未離開程序信息集合的范圍。[0128]在另一備選實(shí)施例中,標(biāo)記可以但不限于包括:事先約定的字符串(其可以是事先約定的固定字符串,也可以是滿足一定約定的動(dòng)態(tài)字符串)、事先約定的UUID ;當(dāng)程序內(nèi)部信息分別屬于不同進(jìn)程時(shí),標(biāo)記還可以包括程序內(nèi)部信息的當(dāng)前進(jìn)程ID(標(biāo)識(shí));當(dāng)程序內(nèi)部信息分別屬于不同線程時(shí),標(biāo)記還可以包括程序內(nèi)部信息的線程ID(標(biāo)識(shí));實(shí)際應(yīng)用時(shí)標(biāo)記也可以是或包括其它標(biāo)識(shí)。
[0129]在另一備選實(shí)施例中,步驟S402包括:
[0130]如果所述信息塊是經(jīng)過封裝的,則針對所述信息塊進(jìn)行解封裝。
[0131]在另一備選實(shí)施例中,步驟S402包括:
[0132]如果所述信息塊是包含哈希值的,則根據(jù)所述哈希值對還原得到的程序內(nèi)部信息進(jìn)行校驗(yàn)。用于計(jì)算哈希值的哈希算法有很多種選擇,優(yōu)選地,可以選擇MD5哈希算法。
[0133]在另一備選實(shí)施例中,步驟S402包括:
[0134]如果所述信息塊中的程序內(nèi)部信息是經(jīng)過壓縮的,則針對所述經(jīng)壓縮的程序內(nèi)部信息進(jìn)行解壓縮。用于解壓縮計(jì)算的算法與壓縮時(shí)的相一致,有很多種選擇,典型地,可以選擇哈夫曼壓縮算法。
[0135]在另一備選實(shí)施例中,程序內(nèi)部信息的獲取方法還可以包括:
[0136]S405、將得到的程序內(nèi)部信息組裝成能夠被讀取的數(shù)據(jù)接口。
[0137]在本申請的再一個(gè)優(yōu)選實(shí)施例中,提供了一種程序內(nèi)部信息的輸出裝置,如圖5所示,包括:
[0138]信息獲取器51,用于得到程序內(nèi)部信息;
[0139]信息標(biāo)記器52,用于針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記;
[0140]信息處理器53,用于針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊;以及
[0141]信息輸出器54,用于向程序信息集合輸出所述信息塊。
[0142]本實(shí)施例中,信息獲取器51得到程序內(nèi)部信息過程可以但不限于包括:程序根據(jù)設(shè)計(jì)在適當(dāng)?shù)臅r(shí)間或者條件下調(diào)用或者觸發(fā)該實(shí)施例中的信息獲取器,并將程序內(nèi)部信息的值或者地址以參數(shù)的形式提供給該實(shí)施例中的信息獲取器;該實(shí)施例中的信息獲取器能夠訪問部分的或者全部的程序的內(nèi)部信息,例如通過共享內(nèi)存技術(shù),該實(shí)施例中的信息獲取器在適當(dāng)?shù)臅r(shí)間或條件下主動(dòng)的訪問這些程序的內(nèi)部信息;在某些操作系統(tǒng)中,比如Microsoft編寫的Window系列操作系統(tǒng)、開源社區(qū)編寫的Unix\Linux系列操作系統(tǒng)、Apple編寫的Mac系列操作系統(tǒng)等,系統(tǒng)提供了對進(jìn)程、線程進(jìn)行調(diào)試(Debug)的功能,這些功能也可以有效的在適當(dāng)?shù)臅r(shí)間或者條件下掛起進(jìn)程、線程,然后獲得程序的內(nèi)部信息,然后使得該進(jìn)程、線程繼續(xù)。
[0143]本實(shí)施例中,程序信息集合可以但不限于包括:日志,共享內(nèi)存,注冊表,數(shù)據(jù)庫等以軟件形式存在、可以存儲(chǔ)一定量信息的信息集合;硬盤、軟盤、DVD、閃存、硬盤陣列等以硬件形式存在、可以存儲(chǔ)一定量信息的信息集合;云存儲(chǔ)服務(wù)、SAN、共享硬盤等以服務(wù)形式存在、可以存儲(chǔ)一定量信息的信息集合。當(dāng)然,本領(lǐng)域技術(shù)人員根據(jù)在此公開的說明書和權(quán)利要求書的指導(dǎo),還可以找到其他形式的、可以存儲(chǔ)一定量信息的信息集合,但并未離開程序信息集合的范圍。
[0144]本實(shí)施例中,信息輸出器54向程序信息集合輸出信息塊的過程將按照約定的格式進(jìn)行輸出。例如,約定使用行的形式輸出。此處的行應(yīng)理解為以約定符號(hào)、字符串分割而成的一段數(shù)據(jù)流。再例如,約定使用XML的形式輸出,信息塊將以XML中的一個(gè)元素或者多個(gè)元素的形式輸出。當(dāng)然,本領(lǐng)域技術(shù)人員還可以找到其他的約定格式輸出,但并未離開約定格式這一范圍。
[0145]在另一備選實(shí)施例中,信息標(biāo)記器52針對所述程序內(nèi)部信息添加標(biāo)記具體可以是指:
[0146]信息處理器在程序內(nèi)部信息的首部、或結(jié)尾、或約定位置添加標(biāo)記。
[0147]此處的約定位置不應(yīng)當(dāng)機(jī)械地理解為僅僅包括事先約定的固定位置,其還包括根據(jù)事先約定的格式可以確定的位置。當(dāng)然,本領(lǐng)域技術(shù)人員根據(jù)在此公開的說明書和權(quán)利要求書的指導(dǎo),還可以找到方式來約定位置,但這些并未離開本申請公開的約定位置的范圍。
[0148]添加標(biāo)記的作用在于將添加標(biāo)記的信息與未添加標(biāo)記的信息區(qū)別開來。實(shí)際應(yīng)用時(shí)不限于采用上述方法標(biāo)記程序內(nèi)部信息,也可以采用別的方法標(biāo)記程序內(nèi)部信息,以使其區(qū)別于其它信息。
[0149]在另一備選實(shí)施例中,標(biāo)記可以但不限于包括:事先約定的字符串(其可以是事先約定的固定字符串,也可以是滿足一定約定的動(dòng)態(tài)字符串)、事先約定的UUID ;當(dāng)程序內(nèi)部信息分別屬于不同進(jìn)程時(shí),標(biāo)記還可以包括程序內(nèi)部信息的當(dāng)前進(jìn)程ID(標(biāo)識(shí));當(dāng)程序內(nèi)部信息分別屬于不同線程時(shí),標(biāo)記還可以包括程序內(nèi)部信息的線程ID(標(biāo)識(shí));實(shí)際應(yīng)用時(shí)標(biāo)記也可以是或包括其它標(biāo)識(shí)。
[0150]在另一備選實(shí)施例中,備選地,所述信息處理器53可以針對添加了 一個(gè)或者多個(gè)標(biāo)記的程序內(nèi)部信息進(jìn)行封裝,得到信息塊,從而使程序內(nèi)部信息可以表達(dá)更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。當(dāng)然,本領(lǐng)域技術(shù)人員根據(jù)本申請公開的內(nèi)容的啟示,可以使用各種格式來封裝數(shù)據(jù),但其均未離開本申請的精神和范圍。
[0151]在另一備選實(shí)施例中,備選地,所述信息處理器53可以針對程序內(nèi)部信息計(jì)算哈希值,并將該哈希值添加到信息塊中。計(jì)算哈希值的作用在于可以幫助后續(xù)過程校驗(yàn)程序內(nèi)部信息的完整性。用于計(jì)算哈希值的哈希算法有很多種選擇,優(yōu)選地,可以選擇MD5哈希算法。
[0152]在另一備選實(shí)施例中,備選地,所述信息處理器53可以對添加了標(biāo)記的程序內(nèi)部信息進(jìn)行壓縮,并將經(jīng)壓縮的程序內(nèi)部信息封裝成信息塊。對數(shù)據(jù)進(jìn)行壓縮可以減少輸出信息所占用的存儲(chǔ)空間。用于壓縮計(jì)算的壓縮算法有很多種選擇,典型地,可以選擇哈夫曼壓縮算法。
[0153]在另一備選實(shí)施例中,在所述信息輸出器54向程序信息集合輸出信息塊的步驟中,信息塊一次性寫入程序信息集合。此處的一次性寫入是指線程互斥的一次性寫入,即當(dāng)一個(gè)線程在寫入信息塊時(shí),不會(huì)被打斷,如果在其寫入過程中,正好遇到CPU時(shí)間片用完,線程被換出,那么其他線程也無法寫入信息塊,必須等該線程重新?lián)Q入,并完成寫入操作后,才允許其他線程寫入,之謂互斥。
[0154]此外,本申請實(shí)施例還提供一種程序內(nèi)部信息的獲取裝置,是對所述程序內(nèi)部信息的輸出裝置所輸出的程序信息集合進(jìn)行解析獲得程序內(nèi)部信息的裝置,如圖6所示,包括:[0155]信息讀取器61,用于讀取程序信息集合,得到信息塊;
[0156]信息還原器62,用于還原所述信息塊;
[0157]信息過濾器63,用于根據(jù)標(biāo)記,篩選出添加了標(biāo)記的所述程序內(nèi)部信息;以及
[0158]標(biāo)記清除器64,用于去除所述標(biāo)記,得到所述程序內(nèi)部信息。
[0159]當(dāng)然,信息還原器62可能未產(chǎn)生添加了標(biāo)記的程序內(nèi)部信息,因?yàn)槌绦蛐畔⒓现锌赡苡衅渌袷降男畔?,其并不符合約定格式,所以還原過程本身就是對信息塊的篩選,備選地,可以將不符合約定格式或者無法還原的信息塊直接丟棄,還原得到標(biāo)記和程序內(nèi)部信息后,基于約定的標(biāo)記對程序內(nèi)部信息進(jìn)行篩選,備選地,針對符合約定的標(biāo)記,其對應(yīng)的程序內(nèi)部信息保留,針對不符合約定的標(biāo)記,其對應(yīng)的程序內(nèi)部信息丟棄;另一備選地,根據(jù)約定標(biāo)記,可以將對應(yīng)的程序內(nèi)部信息進(jìn)行分類,最后丟棄標(biāo)記,得到程序內(nèi)部信肩、O
[0160]本實(shí)施例中,程序信息集合可以但不限于包括:日志,共享內(nèi)存,注冊表,數(shù)據(jù)庫等以軟件形式存在、可以存儲(chǔ)一定量信息的信息集合;硬盤、軟盤、DVD、閃存、硬盤陣列等以硬件形式存在、可以存儲(chǔ)一定量信息的信息集合;云存儲(chǔ)服務(wù)、SAN、共享硬盤等以服務(wù)形式存在、可以存儲(chǔ)一定量信息的信息集合。當(dāng)然,本領(lǐng)域技術(shù)人員根據(jù)在此公開的說明書和權(quán)利要求書的指導(dǎo),還可以找到其他形式的、可以存儲(chǔ)一定量信息的信息集合,但并未離開程序信息集合的范圍。
[0161]在另一備選實(shí)施例中,標(biāo)記可以但不限于包括:事先約定的字符串(其可以是事先約定的固定字符串,也可以是滿足一定約定的動(dòng)態(tài)字符串)、事先約定的UUID ;當(dāng)程序內(nèi)部信息分別屬于不同進(jìn)程時(shí),標(biāo)記還可以包括程序內(nèi)部信息的當(dāng)前進(jìn)程ID(標(biāo)識(shí));當(dāng)程序內(nèi)部信息分別屬于不同線程時(shí),標(biāo)記還可以包括程序內(nèi)部信息的線程ID(標(biāo)識(shí));實(shí)際應(yīng)用時(shí)標(biāo)記也可以是或包括其它標(biāo)識(shí)。
[0162]在另一備選實(shí)施例中,信息還原器62還原所述信息塊是指:所述信息還原器當(dāng)所述信息塊是經(jīng)過封裝的時(shí),針對所述信息塊進(jìn)行解封裝。
[0163]在另一備選實(shí)施例中,信息還原器62還用于當(dāng)所述信息塊包含哈希值時(shí),根據(jù)所述哈希值對還原得到的程序內(nèi)部信息進(jìn)行校驗(yàn)。用于計(jì)算哈希值的哈希算法有很多種選擇,優(yōu)選地,可以選擇MD5哈希算法。
[0164]在另一備選實(shí)施例中,所述信息還原器62還用于當(dāng)所述信息塊中的程序內(nèi)部信息是經(jīng)過壓縮的時(shí),針對所述經(jīng)壓縮的程序內(nèi)部信息進(jìn)行解壓縮。用于解壓縮計(jì)算的算法與壓縮時(shí)的相一致,有很多種選擇,典型地,可以選擇哈夫曼壓縮算法。
[0165]在另一備選實(shí)施例中,程序內(nèi)部信息的獲取裝置還包括:數(shù)據(jù)接口組裝器65,用于將得到的程序內(nèi)部信息組裝成能夠被讀取的數(shù)據(jù)接口。
[0166]本申請實(shí)施例還提供了 一種程序內(nèi)部信息的監(jiān)測方法,包括輸出程序內(nèi)部信息和獲取程序內(nèi)部信息兩大步驟;其中,所述輸出/獲取程序內(nèi)部信息的步驟可采用上述程序內(nèi)部信息的輸出/獲取方法的實(shí)施例或其備選方案中的任一個(gè)來實(shí)現(xiàn)。
[0167]下面所描述的是一個(gè)程序內(nèi)部信息的監(jiān)測裝置的具體實(shí)施例,示意圖如圖7所示,包括程序內(nèi)部信息的輸出裝置71和程序內(nèi)部信息的獲取裝置72,其中所述程序內(nèi)部信息的輸出/獲取裝置并不限于下例,可采用上述實(shí)施例或其備選方案中的任一個(gè)。所述程序內(nèi)部信息的監(jiān)測裝置可以為監(jiān)控程序或測試用例73提供用于性能監(jiān)測或分析的程序內(nèi)部信息74。程序內(nèi)部信息的裝置輸出71組裝于待監(jiān)測程序中,在待監(jiān)測程序在操作系統(tǒng)中執(zhí)行時(shí),將待監(jiān)測程序在執(zhí)行過程中的內(nèi)部信息輸出給程序內(nèi)部信息的獲取裝置72。
[0168]該備選例中,程序內(nèi)部信息的輸出裝置71具體可以包括:信息獲取器711、信息標(biāo)記器712、信息處理器713和信息輸出器714 ;
[0169]所述信息獲取器711用于當(dāng)被服務(wù)程序調(diào)用時(shí),從服務(wù)程序取得當(dāng)前的程序內(nèi)部信息、當(dāng)前進(jìn)程ID、線程ID并調(diào)用所述信息標(biāo)記器712 ;當(dāng)所述信息標(biāo)記器712工作完畢后調(diào)用所述信息處理器713 ;當(dāng)所述信息處理器713工作完畢后調(diào)用所述信息輸出器714 ;
[0170]所述信息標(biāo)記器712用于當(dāng)被調(diào)用時(shí),對信息塊的每一行首部添加事先約定的UUID ;還可以添加所述當(dāng)前進(jìn)程ID、線程ID ;添加完成后通知所述信息獲取器711工作完畢;
[0171]所述信息處理器713用于當(dāng)被調(diào)用時(shí),將所述當(dāng)前的程序內(nèi)部信息以及對所述程序內(nèi)部信息計(jì)算得到的MD5哈希值封裝為信息塊;封裝完成后通知所述信息獲取器711工作完畢;
[0172]所述信息輸出器714用于當(dāng)被調(diào)用時(shí),將所述信息塊一次性寫入程序信息集合75。
[0173]該備選例中,所述程序內(nèi)部信息的獲取裝置72具體可以包括:
[0174]信息讀取器721,用于讀取程序信息集合,得到信息塊;
[0175]信息還原器722,用于解封裝信息塊,得到程序內(nèi)部信息及MD5哈希值;通過所述MD5哈希值驗(yàn)證所得到的程序內(nèi)部信息的完整性;
[0176]信息過濾器723,用于根據(jù)標(biāo)記,篩選出添加了標(biāo)記的所述程序內(nèi)部信息;以及
[0177]標(biāo)記清除器724,用于去除所述標(biāo)記,得到所述程序內(nèi)部信息。
[0178]進(jìn)一步地,標(biāo)記清除器724可以將去除所述標(biāo)記后的程序內(nèi)部信息發(fā)送至外部監(jiān)測裝置,即所述監(jiān)控程序/測試用例73,如此,實(shí)現(xiàn)對程序內(nèi)部信息的監(jiān)測。
[0179]數(shù)據(jù)接口組裝器725,用于將程序內(nèi)部信息組裝成監(jiān)控程序/測試用例73能夠讀取的數(shù)據(jù)接口,發(fā)送給所述監(jiān)控程序/測試用例73。
[0180]程序內(nèi)部信息的監(jiān)測過程包括下述的步驟⑴?(7):
[0181](I)服務(wù)程序76在需要給出程序內(nèi)部信息74時(shí),調(diào)用信息獲取器711,將所有原始格式的程序內(nèi)部信息74交給信息獲取器711,同時(shí)也將當(dāng)前進(jìn)程ID、線程ID交給信息獲取器711 ;
[0182](2)信息獲取器711調(diào)用信息標(biāo)記器712,對程序內(nèi)部信息74的每一行做標(biāo)記。比如,在程序內(nèi)部信息74的每一行首部添加事先約定的UUID(通用唯一識(shí)別碼);還可以添加所述當(dāng)前進(jìn)程ID、線程ID。
[0183](3)信息獲取器711調(diào)用信息處理器713,按照事先約定的格式,將標(biāo)記后的程序內(nèi)部信息封裝成信息服從格式的信息塊,并將計(jì)算得到的MD5哈希值放入信息塊。
[0184](4)信息獲取器711調(diào)用信息輸出器714,將封裝后的信息塊一次性寫入程序信息集合75。
[0185](5)監(jiān)控程序/測試用例73等需要讀取程序內(nèi)部信息74時(shí),信息讀取器721讀取程序信息集合75,得到信息塊,由信息還原器722將原始格式的程序內(nèi)部信息解封裝出來,同時(shí)驗(yàn)證程序內(nèi)部信息的完整性。[0186](6)信息過濾器723根據(jù)標(biāo)記,篩選出程序內(nèi)部信息74。比如,使用事先約定的UUID,對所有的Log進(jìn)行g(shù)rep,篩選出添加過標(biāo)記的信息;標(biāo)記清除器將724標(biāo)記去掉。
[0187](7)調(diào)用數(shù)據(jù)接口組裝器725,將原始格式的程序內(nèi)部信息74組裝成監(jiān)控程序/測試用例73能夠讀取的數(shù)據(jù)接口,返回給監(jiān)控程序/測試用例73。
[0188]本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關(guān)硬件完成,所述程序可以存儲(chǔ)于計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如只讀存儲(chǔ)器、磁盤或光盤等。可選地,上述實(shí)施例的全部或部分步驟也可以使用一個(gè)或多個(gè)集成電路來實(shí)現(xiàn)。相應(yīng)地,上述實(shí)施例中的各模塊/單元可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。本申請不限制于任何特定形式的硬件和軟件的結(jié)合。
[0189]當(dāng)然,本申請還可有其他多種實(shí)施例,在不背離本申請精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本申請作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本申請的權(quán)利要求的保護(hù)范圍。
【權(quán)利要求】
1.一種程序內(nèi)部信息的輸出方法,其特征在于,包括: 得到程序內(nèi)部信息; 針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記; 針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊;以及 向程序信息集合輸出所述信息塊。
2.如權(quán)利要求1所述的方法,其特征在于,針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記的步驟包括: 在程序內(nèi)部信息的首部、或結(jié)尾、或約定位置添加標(biāo)記。
3.如權(quán)利要求2所述的方法,其特征在于,所述標(biāo)記包括: 約定的字符串、約定的通用唯一識(shí)別碼、進(jìn)程標(biāo)識(shí)、線程標(biāo)識(shí)。
4.如權(quán)利要求1~3中任一項(xiàng)所述的方法,其特征在于,所述針對添加了所述一個(gè)或者標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊的步驟包括: 針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行封裝,得到信息塊。
5.如權(quán)利要求4所述的方法,其特征在于,所述針對添加了所述一個(gè)或者標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊的步驟還包括: 針對所述程序內(nèi)部信息計(jì)算哈希值;以及 將所述哈希值添加到信息塊中。
6.如權(quán)利要求5所述的方法,其特征在于,所述針對添加了所述一個(gè)或者標(biāo)記的所述程序內(nèi)部信息進(jìn)行封裝的步驟包括: 對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行壓縮;以及 對經(jīng)壓縮的程序內(nèi)部信息進(jìn)行封裝。
7.如權(quán)利要求1~3中任一項(xiàng)所述的方法,其特征在于,所述程序信息集合包括以軟件形式存在、可以存儲(chǔ)一定量信息的信息集合,包括: 日志;共享內(nèi)存;注冊表;數(shù)據(jù)庫。
8.一種程序內(nèi)部信息的獲取方法,其特征在于,包括: 讀取程序信息集合,得到信息塊; 還原所述信息塊; 根據(jù)標(biāo)記,篩選出添加了標(biāo)記的所述程序內(nèi)部信息;以及 去除所述標(biāo)記,得到所述程序內(nèi)部信息。
9.如權(quán)利要求8所述的方法,其特征在于,所述標(biāo)記包括: 約定的字符串、約定的通用唯一識(shí)別碼、進(jìn)程標(biāo)識(shí)、線程標(biāo)識(shí)。
10.如權(quán)利要求8或9所述的方法,其特征在于,所述還原所述信息塊的步驟包括: 如果所述信息塊是經(jīng)過封裝的,則針對所述信息塊進(jìn)行解封裝。
11.如權(quán)利要求8或9所述的方法,其特征在于,所述還原所述信息塊的步驟包括: 如果所述信息塊是包含哈希值的,則根據(jù)所述哈希值對還原得到的程序內(nèi)部信息進(jìn)行校驗(yàn)。
12.如權(quán)利要求8或9所述的方法,其特征在于,所述還原所述信息塊的步驟包括: 如果所述信息塊中的程序內(nèi)部信息是經(jīng)過壓縮的,則針對所述經(jīng)壓縮的程序內(nèi)部信息進(jìn)行解壓縮。
13.一種程序內(nèi)部信息的輸出裝置,其特征在于,包括: 信息獲取器,用于得到程序內(nèi)部信息; 信息標(biāo)記器,用于針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記; 信息處理器,用于針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊;以及 信息輸出器,用于向程序信息集合輸出所述信息塊。
14.如權(quán)利要求13所述的裝置,其特征在于,所述信息標(biāo)記器針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記是指: 所述信息標(biāo)記器在程序內(nèi)部信息的首部、或結(jié)尾、或約定位置添加標(biāo)記。
15.如權(quán)利要求14所述的裝置,其特征在于,所述標(biāo)記包括: 約定的字符串、約定的通用唯一識(shí)別碼、進(jìn)程標(biāo)識(shí)、線程標(biāo)識(shí)。
16.如權(quán)利要求13~15中任一項(xiàng)所述的裝置,其特征在于,所述信息處理器針對添加了所述一個(gè)或者標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊是指: 所述信息處理器針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行封裝,得到信息塊。
17.如權(quán)利要求16所述的裝置,其特征在于: 所述信息處理器針對添加了所述一個(gè)或者標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊時(shí),還用于針對所述程序 內(nèi)部信息計(jì)算哈希值,以及將所述哈希值添加到所述信息塊中。
18.如權(quán)利要求17所述的裝置,其特征在于: 所述信息處理器對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行封裝是指,對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行壓縮,將經(jīng)壓縮的程序內(nèi)部信息進(jìn)行封裝。
19.如權(quán)利要求13~15中任一項(xiàng)所述的方法,其特征在于,所述程序信息集合包括以軟件形式存在、能夠存儲(chǔ)一定量信息的信息集合,包括: 日志;共享內(nèi)存;注冊表;數(shù)據(jù)庫。
20.一種程序內(nèi)部信息的獲取裝置,其特征在于,包括: 信息讀取器,用于讀取程序信息集合,得到信息塊; 信息還原器,用于還原所述信息塊; 信息過濾器,用于根據(jù)標(biāo)記,篩選出添加了標(biāo)記的所述程序內(nèi)部信息;以及 標(biāo)記清除器,用于去除所述標(biāo)記,得到所述程序內(nèi)部信息。
21.如權(quán)利要求20所述的裝置,其特征在于,所述標(biāo)記包括: 約定的字符串、約定的通用唯一識(shí)別碼、進(jìn)程標(biāo)識(shí)、線程標(biāo)識(shí)。
22.如權(quán)利要求20或21所述的裝置,其特征在于,所述信息還原器還原所述信息塊是指: 所述信息還原器當(dāng)所述信息塊是經(jīng)過封裝的時(shí),針對所述信息塊進(jìn)行解封裝。
23.如權(quán)利要求20或21所述的裝置,其特征在于: 所述信息還原器還用于當(dāng)所述信息塊包含哈希值時(shí),根據(jù)所述哈希值對還原得到的程序內(nèi)部信息進(jìn)行校驗(yàn)。
24.如權(quán)利要求20或21所述的裝置,其特征在于: 所述信息還原器還用于當(dāng)所述信息塊中的程序內(nèi)部信息是經(jīng)過壓縮的時(shí),針對所述經(jīng)壓縮的程序內(nèi)部信息進(jìn)行解壓縮。
25.一種監(jiān)測程序內(nèi)部信息的方法,其特征在于,包括: 得到程序內(nèi)部信息; 針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記; 針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊;以及 向程序信息集合輸出所述信息塊; 讀取程序信息集合,得到信息塊; 還原所述信息塊; 根據(jù)標(biāo)記,篩選出添加了標(biāo)記的所述程序內(nèi)部信息;以及 去除所述標(biāo)記,將去除所述標(biāo)記后的程序內(nèi)部信息發(fā)送至外部監(jiān)測裝置。
26.—種監(jiān)測程序內(nèi) 部信息的裝置,其特征在于,包括: 信息獲取器,用于得到程序內(nèi)部信息; 信息標(biāo)記器,用于針對所述程序內(nèi)部信息添加一個(gè)或者多個(gè)標(biāo)記; 信息處理器,用于針對添加了所述一個(gè)或者多個(gè)標(biāo)記的所述程序內(nèi)部信息進(jìn)行處理生成信息塊;以及 信息輸出器,用于向程序信息集合輸出所述信息塊; 信息讀取器,用于讀取程序信息集合,得到信息塊; 信息還原器,用于還原所述信息塊; 信息過濾器,用于根據(jù)標(biāo)記,篩選出添加了標(biāo)記的所述程序內(nèi)部信息;以及標(biāo)記清除器,用于去除所述標(biāo)記,并將去除所述標(biāo)記后的程序內(nèi)部信息發(fā)送至外部監(jiān)測裝置。
【文檔編號(hào)】G06F9/44GK103777930SQ201210401744
【公開日】2014年5月7日 申請日期:2012年10月19日 優(yōu)先權(quán)日:2012年10月19日
【發(fā)明者】王立, 趙婉萍, 譚淑丹, 劉立川 申請人:阿里巴巴集團(tuán)控股有限公司