[發(fā)明專利]使用輕量進(jìn)程快照的功能評估有效
| 申請?zhí)枺?/td> | 201380041514.5 | 申請日: | 2013-08-01 |
| 公開(公告)號: | CN104520820B | 公開(公告)日: | 2018-02-06 |
| 發(fā)明(設(shè)計)人: | J·戴維斯;T·H·金 | 申請(專利權(quán))人: | 微軟技術(shù)許可有限責(zé)任公司 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36;G06F11/14;G06F11/30 |
| 代理公司: | 上海專利商標(biāo)事務(wù)所有限公司31100 | 代理人: | 顧嘉運 |
| 地址: | 美國華*** | 國省代碼: | 暫無信息 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 使用 進(jìn)程 快照 功能 評估 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及功能評估,尤其涉及使用輕量進(jìn)程快照的功能評估。
背景技術(shù)
對調(diào)試程序中的進(jìn)程狀態(tài)的檢查傳統(tǒng)上使用兩種方法之一:進(jìn)程外檢查和進(jìn)程內(nèi)檢查。在進(jìn)程外檢查中,調(diào)試程序通過讀取被調(diào)試程序存儲器或通過消費被調(diào)試程序上下文,獲取變量的值。對于進(jìn)程內(nèi)檢查,調(diào)試程序通過實際在被調(diào)試程序進(jìn)程內(nèi)執(zhí)行屬性函數(shù),評估屬性。此進(jìn)程內(nèi)檢查在調(diào)試程序語法中叫做功能評估或“func-eval”。兩個方法都具有優(yōu)點和缺點。
在進(jìn)程外檢查模型中,調(diào)試程序不能損壞被調(diào)試程序的狀態(tài)。開發(fā)人員看見被調(diào)試程序狀態(tài)的原始視圖,該視圖傾向于處于比API設(shè)計人員計劃的抽象更低級別。這是因為,調(diào)試程序只能在屬性的備用值(backing values)在被調(diào)試程序存儲器中可被訪問的情況下,獲取它們。例如,如果計算屬性的值,則調(diào)試程序只能示出在計算中所使用的原始變量。
不能以此方式讀取具有依賴于被調(diào)試程序的存儲器外面的狀態(tài)的值的屬性,所述狀態(tài)包括諸如與其他進(jìn)程(在存儲器中或在存儲介質(zhì)上)共享的狀態(tài),來自某種其他連接的設(shè)備、可移動存儲器的狀態(tài),等等。不能以此方式讀取的其他狀態(tài)依賴的值是操作系統(tǒng)內(nèi)核中的狀態(tài)或跨機(jī)器實現(xiàn)的狀態(tài)。進(jìn)程外模型需要開發(fā)人員從作為原始變量可用的值中對API抽象的實現(xiàn)進(jìn)行反向設(shè)計,這會是困難的,混淆的,或不可能進(jìn)行。
對于進(jìn)程內(nèi)或func-eval模型,開發(fā)人員看見API設(shè)計人員計劃的抽象的準(zhǔn)確的視圖。沒有從實現(xiàn)到公共視圖的映射是必需的。然而,在func-eval模型中,對于屬性的實現(xiàn)的任何副作用都將影響被調(diào)試程序狀態(tài),這可能會導(dǎo)致開發(fā)人員混亂和不正確的被調(diào)試程序行為。被調(diào)試程序可能不在可以執(zhí)行代碼的狀態(tài),諸如接近內(nèi)存不足的情況的高壓力的進(jìn)程或進(jìn)程內(nèi)的已經(jīng)進(jìn)入內(nèi)核的線程。在此狀態(tài)下,調(diào)試程序檢查是不可能的。執(zhí)行功能評估會導(dǎo)致被調(diào)試程序死鎖或損壞。具體而言,如果屬性的實現(xiàn)依賴于正在執(zhí)行的其他線程。例如,如果一個屬性試圖獲取另一線程持有的鎖,則該屬性不能執(zhí)行,除非持有鎖的線程釋放它,導(dǎo)致死鎖。
此外,在某些分布式環(huán)境所使用的代理/存根(stub)模型中,調(diào)用可能需要多個線程執(zhí)行,以便允許另一線程“抽取”或處理來自正在執(zhí)行func-eval的另一線程的傳入的調(diào)用。允許進(jìn)程中的其他線程運行(即,“錯過”所述線程)是調(diào)試程序一般不能允許的事項,因為對于每一線程的實際執(zhí)行點將在每一次func-eval時改變。這樣的跨上下文調(diào)用會導(dǎo)致被調(diào)試程序的不可恢復(fù)的損壞,如果它們不能正確地完成。
發(fā)明內(nèi)容
提供本發(fā)明內(nèi)容是為了以精簡的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限制所要求保護(hù)的主題的范圍。
使用操作系統(tǒng)中的輕量進(jìn)程快照支持,調(diào)試程序創(chuàng)建被調(diào)試程序目標(biāo)進(jìn)程的副本,并針對副本執(zhí)行func-eval檢查。這使目標(biāo)進(jìn)程中的大多數(shù)被調(diào)試程序狀態(tài)保留原樣,因為由func-eval作出的任何更改都是快照副本本地的。在func-eval期間任何災(zāi)難性故障,諸如死鎖被調(diào)試程序進(jìn)程,具有最小的影響,因為原始進(jìn)程未被觸及,可以簡單地扔掉并重新創(chuàng)建快照。可以對進(jìn)程快照執(zhí)行對于被調(diào)試程序進(jìn)程來說太過破壞性的調(diào)試程序操作,而不會威脅真正的進(jìn)程。例如,在func-eval期間錯過所有線程是一個這樣的情況。
例如,在在其中對象之間的調(diào)用可以遍歷線程邊界的分布式環(huán)境中,諸如COM中的單線程套間,需要錯過所有線程。對這樣的對象執(zhí)行普通func-eval將死鎖—并可能損壞—被調(diào)試程序進(jìn)程,因為目標(biāo)線程將不會運行。然而,允許所有線程運行(“錯過”)意味著,在func-eval完成之后,進(jìn)程的狀態(tài)可能急劇地改變。此外,在錯過線程時產(chǎn)生的諸如斷點或異常之類的重要的調(diào)試程序事件,可能被忽略,因為調(diào)試程序此時將不希望進(jìn)入中斷狀態(tài)。進(jìn)程快照允許調(diào)試程序在錯過所有線程的同時時執(zhí)行func-eval,并且不丟失原始被調(diào)試程序進(jìn)程的實際狀態(tài)。
調(diào)試程序使用輕量進(jìn)程快照來隔離func-eval的副作用。當(dāng)func-eval副作用不再反映目標(biāo)進(jìn)程時,或快照被損壞以致于它不再能被使用時,調(diào)試程序還可以創(chuàng)建目標(biāo)被調(diào)試程序進(jìn)程的新的輕量進(jìn)程快照。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于微軟技術(shù)許可有限責(zé)任公司,未經(jīng)微軟技術(shù)許可有限責(zé)任公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201380041514.5/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





