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

通過動態(tài)的語言引擎捕捉遙測數(shù)據(jù)的制作方法

文檔序號:6382072閱讀:176來源:國知局
專利名稱:通過動態(tài)的語言引擎捕捉遙測數(shù)據(jù)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及捕捉遙測數(shù)據(jù)的技術(shù),尤其涉及捕捉與腳本代碼所拋出的多個異常相關(guān)聯(lián)的腳本代碼棧的技術(shù)。
背景技術(shù)
在開發(fā)軟件時,捕捉與執(zhí)行該軟件時的非預(yù)期行為有關(guān)的遙測信息是有幫助的。 這樣的遙測信息的示例包括函數(shù)棧信息。這樣的遙測信息可被開發(fā)者用來移除非預(yù)期行為以由此改進軟件的質(zhì)量。
對有關(guān)腳本應(yīng)用(諸如,網(wǎng)站或web應(yīng)用)的遙測信息的提取是困難的挑戰(zhàn),因為這樣的腳本應(yīng)用在諸如操作系統(tǒng)或瀏覽器之類的主機環(huán)境中操作。開發(fā)者在他們的用戶腳本中使用擴展和/或間接腳本語言特征以提取并處理這些信息。這并非在所有場景下都很好的工作。此外,不存在允許主機以主機專用的方式來原生地對待該信息的容易方式。發(fā)明內(nèi)容
在此描述的至少一個實施例涉及選擇性地捕捉與腳本代碼所拋出的異常相關(guān)聯(lián)的腳本代碼棧。對于腳本代碼所拋出的至少一個未經(jīng)處理的異常(腳本代碼不處理該異常),腳本引擎1)以主機可訪問的方式來捕捉腳本代碼棧,通過該方式主控腳本引擎的主機可以訪問所捕捉的腳本代碼棧,2)完成腳本棧的展開,3)向主控腳本引擎的主機報告所捕捉的腳本代碼棧。對于腳本代碼所拋出的至少一個經(jīng)處理的異常(腳本代碼自己來處理該異常),則不以主機可訪問的方式來捕捉腳本代碼棧。因此,至少在后面的情況下,與捕捉腳本代碼棧使得該腳本代碼棧被主機訪問相關(guān)聯(lián)的開銷可被保存。
在此描述的至少一個實施例涉及用戶腳本的執(zhí)行,其中可具有相關(guān)聯(lián)的未填充調(diào)用棧屬性的錯誤對象被創(chuàng)建。在腳本代碼拋出了與錯誤對象相關(guān)聯(lián)的異常后,腳本代碼棧在拋出時間被捕捉并被用于填充錯誤對象的調(diào)用棧屬性。由于調(diào)用棧屬性是在拋出時間而非錯誤對象的創(chuàng)建時間被填充的,因此調(diào)用棧屬性與幫助評估在拋出時間存在的動態(tài)綁定更相關(guān)。
提供本發(fā)明內(nèi)容以便以簡化形式介紹將在以下具體實施方式
中進一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標識所要求保護的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護的主題的范圍。


為了描述能夠獲得上述和其它優(yōu)點和特征的方式,各實施例的更具體的描述將通過參考各附圖來呈現(xiàn)??梢岳斫?,這些附圖只描繪了示例實施例,并且因此不被認為是對其范圍的限制,將通過使用附圖并利用附加特征和細節(jié)來描述和解釋各實施例,在附圖中
圖I示出了可以用來利用此處所描述的各實施例的示例計算系統(tǒng);
圖2示出可由圖I的計算系統(tǒng)實現(xiàn)、并包括主機環(huán)境和腳本編寫環(huán)境的環(huán)境;
圖3示出了用于以主機可訪問的方式選擇性地捕捉與腳本代碼所拋出的異常相關(guān)聯(lián)的腳本代碼棧的方法的流程圖4示出了用于在異常拋出時間捕捉腳本代碼棧的方法的流程圖;以及
圖5抽象地示出包括拋出條件屬性以及在滿足拋出條件時而非創(chuàng)建錯誤對象時填充的棧屬性的錯誤對象數(shù)據(jù)結(jié)構(gòu)。
具體實施方式
根據(jù)在此描述的各實施例,在此描述的至少一個實施例涉及選擇性地捕捉與腳本代碼所拋出的異常相關(guān)聯(lián)的腳本代碼棧。對于未經(jīng)處理的異常,腳本引擎I)以主機可訪問方式捕捉腳本代碼棧,通過該主機可訪問方式,主控腳本引擎的主機可訪問所捕捉的腳本代碼棧,2)完成腳本棧的展開,以及3)向主控腳本引擎的主機報告所捕捉的腳本代碼棧。 對于腳本代碼所拋出的經(jīng)處理的異常中的至少一個(腳本代碼自身處理了該異常),不以主機可訪問非方式來捕捉腳本代碼棧。同樣,在在此描述的一些實施例中,錯誤對象是通過用戶腳本來創(chuàng)建的。錯誤對象的調(diào)用棧屬性是在拋出時間而非創(chuàng)建時間被填充的。首先,將參考圖I來描述關(guān)于計算系統(tǒng)的某些介紹性討論。然后,將參考圖2至5來描述捕捉腳本代碼棧的實施例。
首先,參考圖I來描述關(guān)于計算系統(tǒng)的介紹性討論。計算系統(tǒng)現(xiàn)在越來越多地采取多種多樣的形式。例如,計算系統(tǒng)可以是手持式設(shè)備、電器、膝上型計算機、臺式計算機、 大型機、分布式計算系統(tǒng)或甚至常規(guī)上不被認為是計算系統(tǒng)的設(shè)備。在本說明書以及權(quán)利要求書中,術(shù)語“計算系統(tǒng)”被廣義地定義為包括任何設(shè)備或系統(tǒng)(或其組合),該設(shè)備或系統(tǒng)包含至少一個物理有形的處理器以及其上能含有可由處理器執(zhí)行的計算機可執(zhí)行指令的物理有形的存儲器。存儲器可以采取任何形式,并可以取決于計算系統(tǒng)的特性和形式。計算系統(tǒng)可以分布在網(wǎng)絡(luò)環(huán)境中,并可包括多個組分計算系統(tǒng)。
如圖I所示,在其最基本的配置中,計算系統(tǒng)100通常包括至少一個處理單元102 和存儲器104。存儲器104可以是物理系統(tǒng)存儲器,該物理系統(tǒng)存儲器可以是易失性、非易失性、或兩者的某種組合。術(shù)語“存儲器”在此也可用來指諸如物理存儲介質(zhì)等非易失性大容量存儲。如果計算系統(tǒng)是分布式的,則處理、存儲器和/或存儲能力也可以是分布式的。 如此處所使用的那樣,術(shù)語“模塊”或“組件”可以指在計算系統(tǒng)上執(zhí)行的軟件對象或例程。 此處所描述的不同組件、模塊、引擎,以及服務(wù)可以實現(xiàn)為在計算系統(tǒng)上執(zhí)行的對象或進程 (例如,作為分開的線程)。
在隨后的描述中,參考由一個或多個計算系統(tǒng)執(zhí)行的動作描述了各實施例。如果這樣的動作是以軟件實現(xiàn)的,則執(zhí)行動作的相關(guān)聯(lián)計算系統(tǒng)的一個或多個處理器響應(yīng)于已經(jīng)執(zhí)行了計算機可執(zhí)行指令來引導計算系統(tǒng)的操作。這樣的操作的示例涉及對數(shù)據(jù)的操縱。計算機可執(zhí)行指令(以及被操縱的數(shù)據(jù))可以存儲在計算系統(tǒng)100的存儲器104中。計算系統(tǒng)100還可包含允許計算系統(tǒng)100例如通過網(wǎng)絡(luò)110與其他消息處理器通信的通信信道 108。
這里描述的各實施例可包括或利用專用或通用計算機,該專用或通用計算機包括諸如例如一個或多個處理器和系統(tǒng)存儲器等計算機硬件,如以下更詳細討論的。這里描述的各實施例還包括用于承載或存儲計算機可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計算機可讀介質(zhì)。這樣的計算機可讀介質(zhì)可以是可由通用或?qū)S糜嬎銠C系統(tǒng)訪問的任何可用介質(zhì)。存儲計算機可執(zhí)行指令的計算機可讀介質(zhì)是物理存儲介質(zhì)。承載計算機可執(zhí)行指令的計算機可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實施例可包括至少兩種顯著不同的計算機可讀介質(zhì)計算機存儲介質(zhì)和傳輸介質(zhì)。
計算機存儲介質(zhì)包括RAM、ROM、EEPROM、CD-ROM或其他光盤存儲、磁盤存儲或其他磁存儲設(shè)備、或可用于存儲計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜嬎銠C訪問的任何其他介質(zhì)。在該說明書和權(quán)利要求書中,“計算機程序產(chǎn)品” 在其上包括具有計算機可執(zhí)行指令的一個或多個計算機存儲介質(zhì),當這些計算機可執(zhí)行指令由計算機系統(tǒng)的一個或多個處理器來執(zhí)行時,執(zhí)行計算機程序產(chǎn)品的功能。
“網(wǎng)絡(luò)”被定義為允許在計算機系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個或多個數(shù)據(jù)鏈路。當信息通過網(wǎng)絡(luò)或另一個通信連接(硬連線、無線、或者硬連線或無線的組合)傳輸或提供給計算機時,該計算機將該連接適當?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可包括可用于攜帶計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜嬎銠C訪問的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合也應(yīng)被包括在計算機可讀介質(zhì)的范圍內(nèi)。
此外,在到達各種計算機系統(tǒng)組件之后,計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸介質(zhì)自動傳輸?shù)接嬎銠C存儲介質(zhì)(或反之亦然)。例如,通過網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收到的計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡(luò)接口模塊(例如,“NIC”)內(nèi)的RAM中,然后最終被傳輸?shù)接嬎銠C系統(tǒng)RAM和/或計算機系統(tǒng)處的較不易失性的計算機存儲介質(zhì)。因而,應(yīng)當理解,計算機存儲介質(zhì)可被包括在還利用(或甚至主要利用)傳輸介質(zhì)的計算機系統(tǒng)組件中。
計算機可執(zhí)行指令例如包括,當在處理器處執(zhí)行時使通用計算機、專用計算機、或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計算機可執(zhí)行指令可以是例如二進制代碼、諸如匯編語言之類的中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述特征或動作。相反,上述特征和動作是作為實現(xiàn)權(quán)利要求的示例形式而公開的。
本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在具有許多類型的計算機系統(tǒng)配置的網(wǎng)絡(luò)計算環(huán)境中實踐,這些計算機系統(tǒng)配置包括個人計算機、臺式計算機、膝上型計算機、消息處理器、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機、大型計算機、移動電話、PDA、尋呼機、路由器、交換機等等。本發(fā)明也可在其中通過網(wǎng)絡(luò)鏈接(或者通過硬連線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路,或者通過硬連線和無線數(shù)據(jù)鏈路的組合)的本地和遠程計算機系統(tǒng)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實施。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設(shè)備二者中。
圖2示出了本文中所描述的原理可在其中起作用的環(huán)境200。環(huán)境200可以由諸如圖I的計算系統(tǒng)100之類的計算系統(tǒng)來實現(xiàn)。環(huán)境200包括主機環(huán)境201和腳本編寫環(huán)境 202。
腳本編寫環(huán)境202包括腳本引擎221,該腳本引擎221能夠在運行時讀取、理解并執(zhí)行腳本(諸如,用戶腳本222)。最典型地,腳本引擎221理解根據(jù)特定腳本語言來編寫的腳本代碼。ECMAScript (ECMA腳本)是腳本語言的示例,但是存在當前存在的許多腳本語言并且在此描述的原理甚至不限于當前存在的腳本語言。許多腳本語言是其中不存在清楚定義的類型系統(tǒng)并且通常僅在運行時定義綁定的動態(tài)語言。取決于該實現(xiàn),腳本引擎221 可以執(zhí)行編譯和/或解釋,以便恰當?shù)乩斫庥脩裟_本222并提供供處理器(例如,計算系統(tǒng) (例如,計算系統(tǒng)100)的處理器102)執(zhí)行的合適的機器代碼。
主機環(huán)境201包括提供腳本引擎221在其中運行的環(huán)境的主機211。腳本環(huán)境202 和主機環(huán)境201間的邊界由壁壘203抽象地表示。主機211的示例可能是操作系統(tǒng)或瀏覽器,但是主機211可以是能夠主控腳本環(huán)境202的任何組件、應(yīng)用、系統(tǒng)或其組合。
尤其地,主機211通過在腳本不在被執(zhí)行時保留對執(zhí)行的控制來主控腳本環(huán)境。 然而,當主機211遇到腳本時,主機211將腳本提供給腳本引擎221,并將對執(zhí)行的控制傳遞給腳本引擎221。當腳本引擎221已完成處理時,腳本引擎211將執(zhí)行控制傳遞回主機 211。作為執(zhí)行腳本的結(jié)果,主機211還從腳本引擎221接收通知。例如,那些通知中的一些可以是錯誤消息,其可導致在主機211內(nèi)拋出異常。其他類型的通知涉及腳本的正常操作的輸出。主機211將具有其自己的對象模型,并且腳本執(zhí)行的輸入可影響在主機211的對象模型中創(chuàng)建或填充對象。
雖然并不是必須的,但情況幾乎常常都是這樣的,即主機211可能還執(zhí)行諸如用戶交互等其他功能。例如,主機可經(jīng)由圖形界面和/或其他輸入設(shè)備來將圖形界面顯示給用戶并接收來自用戶的輸入。
主機211還可通過防止執(zhí)行代碼執(zhí)行可能為有害的某些函數(shù)來為執(zhí)行腳本提供安全壁壘,因為腳本通常是在計算系統(tǒng)的外部接收到的代碼,并且可以由各種技術(shù)和意圖的多個創(chuàng)作者來創(chuàng)作。主機211可能還通過過濾腳本所作的所有請求以查明是否履行該請求來提供安全性。在某些情況下,或許腳本的持續(xù)執(zhí)行可能被查明為有害的,在這種情況下,主機211可促使腳本引擎221將對腳本222的執(zhí)行一起停止。
主機211、腳本引擎221以及用戶腳本222的操作可以由計算系統(tǒng)響應(yīng)于計算系統(tǒng) (例如,計算系統(tǒng)100)的一個或多個處理器(例如,處理器102)執(zhí)行存在于一個或多個計算機可讀介質(zhì)(諸如,計算機存儲介質(zhì))上的、表示計算機程序產(chǎn)品的計算機執(zhí)行指令而執(zhí)行。
將參考圖3和圖4中的流程圖來描述圖2中的其他附圖標記,這些附圖標記描述圖2的環(huán)境200在腳本代碼222的執(zhí)行導致異常被拋出的情況下的可能操作。因此,現(xiàn)將頻繁地參考圖2的環(huán)境200來描述圖3和圖4。
圖3示出了用于選擇性地捕捉與腳本代碼所拋出的多個異常相關(guān)聯(lián)的腳本代碼棧的方法300的流程圖。例如,方法300可以由圖2的腳本引擎221來執(zhí)行。所示的方法 300開始于在腳本引擎執(zhí)行用戶腳本(動作301)。例如,在圖2中,腳本引擎221執(zhí)行用戶腳本222。
用戶腳本隨后拋出異常(動作302)。異常是在用戶腳本的正常操作被偏離時被拋出的。在某些情況下,這可意味著用戶腳本的執(zhí)行應(yīng)該終止。存在可拋出異常的多個原因, 并且在此即使枚舉這些原因中的一小部分也是不實用的。然而,一些示例可能是用戶腳本嘗試訪問不存在任何值的屬性值、或者用戶腳本嘗試訪問不可用的系統(tǒng)資源、或者用戶腳本嘗試解決存在未經(jīng)定義的解決方案的問題。
尤其在用戶腳本處于開發(fā)中時,用戶腳本的執(zhí)行可能常常會拋出異常。遙測信息是有關(guān)計算系統(tǒng)的操作的信息。智能遙測系統(tǒng)可以在應(yīng)用處于開發(fā)中時和應(yīng)用被部署以供使用時之間進行區(qū)分。在此描述的原理允許用戶腳本的創(chuàng)作者收集有關(guān)計算系統(tǒng)的操作的遙測信息,使得創(chuàng)作者可以確定異常被拋出的原因、糾正用戶腳本中引起該異常的任何錯誤、以及重試該腳本代碼的執(zhí)行。通過重復(fù)該過程,用戶腳本可以被改良和改進,并有助于通過改進部署在終端用戶機器上的網(wǎng)站和web應(yīng)用的可靠性來改進終端用戶體驗??墒占倪b測信息的示例包括用戶腳本調(diào)用棧(在此也被稱為“腳本?!?的樣本。在一些情況下, 異??稍谀_本代碼的執(zhí)行期間被拋出多次,在這種情況下,無論何時遇到異常,方法300都可從動作302開始向前重復(fù)。
在本說明書中,術(shù)語“異?!睂⒈粚挿旱亟忉?,除非以其他方式明確地表明其包括腳本的任何執(zhí)行錯誤的表現(xiàn)形式。在某些情況下,異??赡懿粫诓僮飨到y(tǒng)中發(fā)生,但是無論如何只要用戶腳本表明錯誤發(fā)生了,則異常已被拋出,這在在此描述的含義之中。例如, 在某些實施例中,異常可能是由用戶腳本在先前創(chuàng)建的錯誤對象的錯誤條件已被滿足時拋出的。圖5抽象地示出錯誤對象500的數(shù)據(jù)結(jié)構(gòu)。錯誤對象包括表示拋出條件的條件501。 如果拋出條件曾被滿足,則錯誤對象在那時被拋出。例如,在ECMA腳本中,存在錯誤對象的概念,其是可具有相關(guān)聯(lián)的錯誤條件的標準對象,該相關(guān)聯(lián)的錯誤條件描述了該錯誤對象將被考慮為被拋出的情形。
方法300的其他處理可取決于異常并非由用戶腳本來處理還是由用戶腳本來處理(判定框310)?!拔唇?jīng)處理的異?!笔怯捎脩裟_本拋出的異常,但該異常并非由用戶腳本來處理。例如,在圖2中,用戶腳本222如箭頭231所示拋出異常。模式232A表示異常并非由用戶腳本222來處理時的操作模式。
“經(jīng)處理的異?!笔怯捎脩裟_本拋出的異常,但該異常由用戶腳本來處理。例如,在圖2中,用戶腳本222如箭頭231所示拋出異常。模式232B表示異常并非由用戶腳本222 來處理時的操作模式。
在未經(jīng)處理的異常的情況下(在判定框310中為“未經(jīng)處理的”),腳本代碼捕捉腳本代碼棧(動作311)。在異常被拋出時,“腳本代碼?!北硎九c腳本代碼相關(guān)聯(lián)的腳本棧的至少一部分。腳本代碼棧可以是腳本棧的全部,或者可表示腳本棧的僅一部分。以下將進一步描述腳本棧的僅一部分被捕捉的不例。
然而,在動作311中,腳本代碼棧的捕捉以主控腳本引擎的主機可以訪問所捕捉的腳本代碼棧的方式發(fā)生。例如,參考圖2,執(zhí)行模式232A使得腳本引擎捕捉表示在用戶腳本222如箭頭231所示的那樣拋出異常時存在的腳本棧的全部或一部分的腳本代碼棧。使得所捕捉的用戶腳本對主機211可用的腳本引擎221由接口 232表示。主機可能在以后采取其他行動(如箭頭236所表示的)以完全地訪問該所捕捉的腳本代碼棧。然而,其他行動可能不會發(fā)生,直到腳本棧被展開并且不再可直接用于分析(如通過后面對動作312和313 的描述,這將是顯而易見的)。
作為附加的選項,假設(shè)在異常被用戶腳本222拋出之前,用戶腳本生成了具有相關(guān)聯(lián)的拋出條件(諸如,圖5的拋出條件501)的錯誤對象(諸如,圖5的錯誤對象500),并且假設(shè)該拋出條件的滿足使得用戶腳本222拋出了異常。腳本引擎221 (作為執(zhí)行模式232A 的一部分)還使得向用戶腳本222通知異常,即使用戶腳本222可能不能處理該異常。在一個示例中,這可通過用在錯誤對象的條件被滿足時(在異常被拋出時)而非在錯誤對象被創(chuàng)建時存在的腳本代碼棧來填充錯誤對象500的屬性(例如,圖5的錯誤對象500的棧屬性502)來完成。參考圖2,通過錯誤對象向用戶腳本報告異常由箭頭234和235來表示。
在以主機可訪問的方式捕捉了腳本代碼棧之后(動作311),但在將所捕捉的腳本代碼棧傳遞到主機之前(動作313),腳本引擎完成腳本棧的展開(動作312)。
腳本引擎隨后向主機報告所捕捉的腳本代碼棧(動作313)。例如,參考圖2,主機 211訪問所捕捉的腳本代碼棧,如箭頭236所表示地。腳本代碼棧的捕捉首先發(fā)生(動作 311),因為腳本棧在異常被拋出后展開,并且因此如果在之后捕捉腳本代碼棧則該腳本代碼棧將不會仍可用。
如果異常是經(jīng)處理的異常(在判定框310中為經(jīng)處理的),則這意味著該異??捎捎脩裟_本222來處理。在這種情況下,不以主機可訪問方式來捕捉腳本代碼棧(動作321)。 參考圖2,當未經(jīng)處理的異常被生成時,執(zhí)行模式232A促使以主機可訪問的方式來捕捉腳本代碼棧(如箭頭232所表示的),并且還促使將腳本代碼棧捕捉為可被用戶腳本222使用 (如箭頭234所表示的)。因此,執(zhí)行模式232A以向主控腳本引擎的主機和用戶腳本兩者展示腳本代碼棧的方式來捕捉該棧。
然而,在經(jīng)處理的異常的情況下(在判定框310中為“經(jīng)處理的”),執(zhí)行模式232B 不以主機可訪問的方式捕捉腳本代碼棧。相反,執(zhí)行模式232B將腳本代碼棧捕捉為使得該腳本代碼??杀挥脩裟_本使用,如箭頭237和235所表示的。因此,在經(jīng)處理的異常的情況下,使腳本引擎221免于必須以主機可訪問的方式捕捉腳本代碼棧。在被給予動態(tài)語言特性的情況下,用戶腳本尤其在運行腳本時可以生成多個異常,這可在腳本引擎221所利用的計算資源方面提供顯著的節(jié)省。
重新參考圖2,在主機211中所捕捉的腳本代碼棧是使用通過主機211的對象模型來編譯的數(shù)據(jù)結(jié)構(gòu)241來表示的。在一個實施例中,這個數(shù)據(jù)結(jié)構(gòu)241可表示整個調(diào)用棧, 該整個調(diào)用棧包括在主機內(nèi)作出的調(diào)用以及由腳本棧作出的調(diào)用。主機可以執(zhí)行與這個所捕捉的腳本代碼棧數(shù)據(jù)結(jié)構(gòu)241有關(guān)的多個行動(動作314)。例如,主機211可以向用戶顯示所捕捉的腳本代碼棧(如箭頭242所表示的)。主機211可促使腳本引擎停止對腳本的執(zhí)行,并可能報告函數(shù)棧(如箭頭243所表示的)。然而,主機211可以以任何其他方式來使用所捕捉的腳本代碼棧(如箭頭244所表示的)。
圖4示出了已結(jié)合圖3的方法300隱式地描述、但現(xiàn)在將明確描述的方法400的流程圖。方法400闡明了如何在用戶腳本正創(chuàng)建錯誤對象(諸如,圖5的錯誤對象500)的上下文中處理經(jīng)處理的異常的一個示例。
方法400包括腳本引擎執(zhí)行用戶腳本(動作401)。例如,在圖2中,腳本引擎221 執(zhí)行用戶腳本222。用戶腳本創(chuàng)建錯誤對象(諸如,圖5的錯誤對象500)。錯誤對象具有拋出條件(其可以是錯誤對象的屬性或者可以以其他方式來指定或隱含),該拋出條件表示將考慮拋出錯誤對象的條件。在錯誤對象被拋出時,錯誤對象包括經(jīng)填充的腳本棧字段(例如,圖5的棧字段502),該經(jīng)填充的腳本棧字段可能已經(jīng)被創(chuàng)建或者在拋出異常的時間被創(chuàng)建。
雖然不是所有的錯誤對象都會導致異常被拋出,但假設(shè)在該情況下錯誤對象的拋出條件在某一時刻被滿足。這導致用戶腳本拋出與錯誤對象相關(guān)聯(lián)的異常(動作403)。此時,腳本引擎捕捉表示與腳本代碼相關(guān)聯(lián)的腳本棧的至少一部分的腳本代碼棧(動作404)。 注意,由于在這個腳本代碼棧在異常被拋出時存在,而非在底層的錯誤對象被創(chuàng)建時存在,因此該腳本代碼棧被捕捉。因此,所捕捉的腳本代碼棧與對異常的原因進行評價更為相關(guān)。 隨后用所捕捉的腳本代碼棧來填充調(diào)用棧屬性(動作405)。這在圖2中用箭頭235來表示。
在本說明書中,腳本棧可以是邏輯腳本棧和/或物理腳本棧,邏輯腳本棧并不反映編譯器和/或解釋器所作的優(yōu)化,物理腳本棧不反映編譯器和/或解釋器所做作的所有優(yōu)化。例如,假設(shè)如原始編寫地,用戶腳本主函數(shù)X調(diào)用函數(shù)Y,函數(shù)Y調(diào)用函數(shù)Z。物理調(diào)用棧將因此如下
X_>Y_>Z
現(xiàn)假設(shè)編譯器或解釋器注意到X可被更改,使得它可直接調(diào)用Ζ,而無需使用函數(shù) Y。在該情況下,邏輯調(diào)用棧將因此如下
Χ->Ζ
腳本代碼??梢虼税ㄎ锢碚{(diào)用棧的全部或部分,或包括邏輯調(diào)用棧的全部或部分。另選地,可以捕捉邏輯調(diào)用棧(或其部分)和物理調(diào)用棧(或其部分)兩者。
此外,如之前提到的,當所捕捉的腳本代碼棧在異常被拋出時存在時,該所捕捉的腳本代碼棧可包括腳本棧的全部。然而,當所捕捉的腳本代碼棧在異常被拋出時存在時,該所捕捉的腳本代碼棧也可能包括腳本代碼棧的一部分?,F(xiàn)在將描述其中僅腳本棧的一部分被捕捉的有幫助的實現(xiàn)的示例,但是其中僅腳本棧的一部分被捕捉的實施例并不限于以下示例。
在一個示例中,腳本代碼棧的大小可以被用戶配置為例如聚焦于腳本代碼棧的與該用戶特別相關(guān)的一部分。例如,用戶可以指定他/她僅想要該棧的底部五層(level)、或者僅想要該棧的頂部五層、或者該棧的底層以及該棧的第三層到第六層等等。這種配置可以在每次執(zhí)行用戶腳本時按需作出。
另選地或另外地,可以移除包括棧的遞歸部分的頂部部分。例如,假設(shè)函數(shù)A (主函數(shù))調(diào)用函數(shù)B?,F(xiàn)假設(shè)函數(shù)B調(diào)用函數(shù)C。在這種情況下,調(diào)用??杀憩F(xiàn)為如下
A->B->C
假設(shè)從這里開始,用戶腳本的執(zhí)行進入遞歸模式,其中函數(shù)C遞歸地調(diào)用函數(shù)B, 函數(shù)B隨后又調(diào)用函數(shù)C。在這種情況下,調(diào)用棧將被擴展為如下
A_〉B_〉C_〉B_〉C
現(xiàn)假設(shè)在異常被拋出(或許由于意料之外的遞歸長度)之前,這種遞歸一共發(fā)生了十三次(例如,由于用戶腳本中的錯誤)。該調(diào)用棧將隨后表現(xiàn)為如下
A->B->C->B->C->B->C->B->C->B->C->B->C->B->C->B->C->B->C->B->C->B->C-> B->C->B->C->B->C
隨著調(diào)用棧變得更大,人類解釋起來則更困難。因此,腳本引擎可被配置為移除遞歸部分以將調(diào)用棧截斷為如下
A->B->C
另選地,腳本引擎可以捕捉第一遞歸調(diào)用(以獲得A->B->C->B)或者直到(但不限于)第二遞歸調(diào)用(以獲得A->B->C->B->C),使得用戶被給予遞歸的一般特性的指示,而不必手動導航經(jīng)過在異常被拋出之前發(fā)生的所有遞歸循環(huán)。在一個其他修改中,可能以某種方式視覺地加強遞歸點,以顯示某一修改已發(fā)生。
因此,在此描述的原理提供了供腳本引擎恰當?shù)匾龑М惓2⒁怨?jié)約計算資源且捕9捉與用戶高度相關(guān)的調(diào)用棧信息的方式來捕捉用戶腳本代碼的有效機制。
本發(fā)明可具體化為其它具體形式而不背離其精神或本質(zhì)特征。所描述的實施例在所有方面都應(yīng)被認為僅是說明性而非限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求書而非前述描述指示。落入權(quán)利要求書的等效方案的含義和范圍內(nèi)的所有改變被權(quán)利要求書的范圍所涵蓋。
權(quán)利要求
1.一種用于選擇性地捕捉與腳本代碼(222)所拋出的多個異常相關(guān)聯(lián)的腳本代碼棧的方法(300),所述方法包括對于所述腳本代碼所拋出的、并非由所述腳本代碼來處理的至少一個異常中的每一個異常,執(zhí)行如下動作所述腳本引擎(221)在所述異常被拋出時捕捉(311)表示與所述腳本代碼相關(guān)聯(lián)的腳本棧的至少一部分的腳本代碼棧的動作,其中所述捕捉的動作以主機可訪問的方式發(fā)生, 通過所述主機可訪問的方式,主控所述腳本引擎的主機(211)可以訪問所捕捉的腳本代碼棧;在所述捕捉所述腳本代碼棧的動作之后的所述腳本引擎完成對所述腳本棧的展開 (312)的動作;以及所述腳本引擎向主控所述腳本引擎的主機報告(313)所捕捉的腳本代碼棧的動作;以及對于所述腳本代碼所拋出的、由所述腳本代碼本身來處理的至少一個異常,免除(321) 以所述主機可訪問的方式來捕捉所述腳本代碼棧的動作。
2.如權(quán)利要求I所述的方法,其特征在于,所述主機是操作系統(tǒng)。
3.如權(quán)利要求I所述的方法,其特征在于,所述主機是瀏覽器。
4.如權(quán)利要求I所述的方法,其特征在于,所述腳本代碼棧在所述異常被拋出時表示所述腳本棧。
5.如權(quán)利要求I所述的方法,其特征在于,所述腳本代碼棧表示所述腳本棧的一部分, 在該部分中,所述腳本棧的頂部部分被移除。
6.如權(quán)利要求5所述的方法,其特征在于,保留在所捕捉的腳本代碼棧中的所述腳本棧的底部部分包括用戶可配置的多個棧幀。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述頂部部分包括遞歸部分。
8.如權(quán)利要求I所述的方法,其特征在于,在捕捉所述腳本代碼棧的動作之后的所述腳本引擎完成所述腳本棧的展開的動作在所述腳本引擎向主控所述腳本引擎的主機報告所捕捉的腳本代碼棧的動作之前發(fā)生。
9.一種包括一個或多個計算機存儲介質(zhì)(104)的計算機程序產(chǎn)品,所述一個或多個計算機存儲介質(zhì)在其上具有被結(jié)構(gòu)化的計算機可執(zhí)行指令,使得所述計算機可執(zhí)行指令由計算系統(tǒng)(100)的一個或多個處理器(102)執(zhí)行時,致使所述計算系統(tǒng)操作被配置成執(zhí)行以下動作的腳本引擎(221)執(zhí)行(401)在其中創(chuàng)建錯誤對象(500)的用戶腳本的動作,所述錯誤對象可具有相關(guān)聯(lián)的未經(jīng)填充調(diào)用棧屬性(502);所述用戶腳本(222)拋出(403)與所述錯誤對象相關(guān)聯(lián)的異常的動作;在所述異常被拋出時,捕捉(404)表示與所述腳本代碼相關(guān)聯(lián)的腳本棧的至少一部分的腳本代碼棧的動作;以及用所捕捉的腳本代碼棧來填充(405)所述錯誤對象的調(diào)用棧屬性(502)的動作。
10.如權(quán)利要求9所述的計算機程序產(chǎn)品,其特征在于,所述腳本代碼棧在所述異常被拋出時表示所述腳本棧的全部。
全文摘要
本發(fā)明涉及通過動態(tài)的語言引擎捕捉遙測數(shù)據(jù)。在此描述的至少一個實施例涉及選擇性地捕捉與腳本代碼拋出的異常相關(guān)聯(lián)的腳本代碼棧。對于未經(jīng)處理的異常,腳本引擎1)以主機可訪問的方式捕捉腳本代碼棧,通過該主機可訪問的方式,主存腳本引擎的主機可以訪問所捕捉的腳本代碼棧,2)完成腳本棧的展開,以及3)向主存腳本引擎的主機報告所捕捉的腳本代碼棧。對于腳本代碼所拋出的經(jīng)處理的異常中的至少一個(腳本代碼自身處理該異常),不以主機可訪問方式捕捉腳本代碼棧。同樣,在拋出時間而非在創(chuàng)建時間填充錯誤對象的調(diào)用棧屬性。
文檔編號G06F11/36GK102937934SQ20121048003
公開日2013年2月20日 申請日期2012年11月22日 優(yōu)先權(quán)日2011年11月23日
發(fā)明者J·A·漢米爾頓, G·塞思, Y·屈 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
措勤县| 察隅县| 将乐县| 尉氏县| 黔江区| 淮北市| 行唐县| 怀来县| 凤城市| 长春市| 梨树县| 灵寿县| 凤阳县| 溆浦县| 五河县| 屯昌县| 和林格尔县| 东乌| 博兴县| 万州区| 达拉特旗| 龙陵县| 沈丘县| 高密市| 萝北县| 晋州市| 赣榆县| 突泉县| 水富县| 吴忠市| 石屏县| 阳山县| 福泉市| 米林县| 海安县| 剑河县| 新龙县| 威远县| 龙井市| 腾冲县| 莱阳市|