狀態(tài)轉(zhuǎn)變的診斷的制作方法
【專利說明】狀態(tài)轉(zhuǎn)變的診斷
[0001] 置量
[0002] 程序調(diào)試或調(diào)試是發(fā)現(xiàn)和減少計算機程序或電子硬件片斷中的錯誤或缺陷數(shù)目 以使得計算機程序如預(yù)期那樣表現(xiàn)的一種方法過程。一般來說,調(diào)試是耗時且令人厭煩的 任務(wù),并且程序員常常使用用于監(jiān)視計算機程序的執(zhí)行以及執(zhí)行程序調(diào)試的軟件工具,諸 如對被調(diào)試進程進行操作的調(diào)試程序等。在程序調(diào)查期間,程序員可以停止被調(diào)試進程的 執(zhí)行,收集數(shù)據(jù)值,或者基于變量的值以其他方式影響被調(diào)試進程的執(zhí)行。
[0003] 調(diào)試技術(shù)常常力圖想要跟上開發(fā)技術(shù)中的改進。軟件開發(fā)技術(shù)已經(jīng)進展到向許多 開發(fā)者提供容易地創(chuàng)建具有豐富用戶體驗的程序的附加工具,這些附加工具適配成用于具 有以曾經(jīng)僅對最高級開發(fā)者可用的方式針對所選用戶群的定制的多個平臺和系統(tǒng)。這些開 發(fā)技術(shù)中的許多技術(shù)出于許多原因已經(jīng)使得傳統(tǒng)調(diào)試過程變得更困難。因而,軟件開發(fā)者 常常陷入是否要利用需要極大調(diào)試成本并且可能破壞將產(chǎn)品快速帶給消費者的能力的開 發(fā)技術(shù)來實現(xiàn)新的軟件的難題。
【發(fā)明內(nèi)容】
[0004] 本概述被提供以便以簡化形式介紹概念的選集,所述概念將在以下詳細(xì)描述中進 一步描述。本
【發(fā)明內(nèi)容】
并不旨在標(biāo)識出所要求保護的主題的關(guān)鍵特征或必要特征,也不旨 在用于限定所要求保護的主題的范圍。
[0005] 在其中發(fā)生中斷的代碼片斷的源頭在執(zhí)行期間實際發(fā)生問題時是未知的情形中, 對代碼進行調(diào)試或故障排除是困難的。這一信息通常不再可供檢索和檢查,并且因為異步 編程的特性而常常已經(jīng)從調(diào)用棧中出棧,在異步編程中,例程負(fù)責(zé)完成長期運行的工作,該 長期運行的工作與啟動該長期運行的工作的例程或工作并發(fā)且分開地運行。在一些示例 中,諸如在涉及多個線程的應(yīng)用中,相關(guān)信息可能在棧上可用,但難以跨許多可用線程的特 定子集來定位。另外,盡管這一信息可能存在,但與信息片斷有關(guān)的序列和定時可能丟失。
[0006] 本公開包括一種關(guān)聯(lián)與其中運行時問題往往在稍后才體現(xiàn)的運行時人工制品的 源頭有關(guān)的診斷信息的方法。示例人工制品包括回調(diào)、用于插入文檔對象模型(DOM)元素 的事件處理程序、以及控制轉(zhuǎn)移的其他示例。在一個示例中,一個邏輯操作(諸如異步操 作)內(nèi)的執(zhí)行單元的狀態(tài)轉(zhuǎn)變在計算機可讀指令的運行時期間被記入日志。診斷信息(諸 如調(diào)用棧幀)與該邏輯操作相關(guān)聯(lián)。記入日志的狀態(tài)轉(zhuǎn)變和相關(guān)聯(lián)的診斷信息被提供以供 在所選點處進行檢索,該所選點諸如在中斷點處或者在拋出異常時。出于解說而使用異步 操作,但各示例可適用于其他的控制轉(zhuǎn)移。
[0007] 開發(fā)者在對照那些目標(biāo)進行標(biāo)準(zhǔn)的故障排除操作時可以咨詢診斷信息,標(biāo)準(zhǔn)的故 障排除操作諸如命中受影響的回調(diào)中的中斷點或者檢查處于非正確狀態(tài)的DOM元素。診斷 信息可被用來執(zhí)行標(biāo)準(zhǔn)調(diào)試和故障排除操作(諸如跳轉(zhuǎn)到代碼)以便對表示問題的根本原 因的始發(fā)代碼進行故障排除。所有對象構(gòu)建的調(diào)用棧位置也可被收集以便協(xié)助存儲器剖 析、協(xié)助調(diào)試存儲器泄漏等。
[0008] 附圖簡沐
[0009] 包括附圖來提供了對各實施例的進一步理解,且這些附圖被合并在本發(fā)明書內(nèi)并 構(gòu)成其一部分。附圖示出各實施例,并且與說明書一起用于解釋本發(fā)明的原理。其他實施 例和各實施例的許多預(yù)期優(yōu)點將隨著參考下面的詳細(xì)描述進行更好的理解而得到認(rèn)識。附 圖的元素不一定相對于彼此而縮放。類似的附圖標(biāo)號指定對應(yīng)的類似部分。
[0010] 圖1是示出計算設(shè)備的示例的框圖。
[0011] 圖2是可被配置成在圖1的計算設(shè)備上運行的用于診斷狀態(tài)轉(zhuǎn)變的方法的框圖。
[0012] 圖3是示出被配置成在圖1的一個或多個計算設(shè)備上運行的診斷工具的示例的框 圖。
[0013] 圖4是可被配置成在圖1的計算設(shè)備上運行的用于診斷狀態(tài)轉(zhuǎn)變的方法的框圖。
[0014] 詳細(xì)描沐
[0015] 在以下具體實施例中,對附圖進行了參考,附圖構(gòu)成了實施例的一部分且在其中 作為示例示出了可在其中實踐本發(fā)明的各特定實施例。可以理解,可以利用其他實施例,并 且可以作出結(jié)構(gòu)上或邏輯上的變化而不背離本發(fā)明的范圍。因此,以下詳細(xì)描述并不旨在 限制,并且本發(fā)明的范圍由所附權(quán)利要求來限定。應(yīng)理解,此處描述的各示例性實施例的特 征可相互組合,除非另外具體注明。
[0016] 圖1示出可以在操作環(huán)境中使用并且用于主存或運行計算機應(yīng)用的示例性計算 機系統(tǒng),該計算機應(yīng)用被包括在存儲計算機可執(zhí)行指令的一個或多個計算機可讀存儲介質(zhì) 上,該計算機可執(zhí)行指令用于控制計算機系統(tǒng)(諸如計算設(shè)備)執(zhí)行用于將診斷信息聯(lián)同 狀態(tài)轉(zhuǎn)變與應(yīng)用進行相關(guān)聯(lián)的過程。計算機系統(tǒng)還可用于開發(fā)和/或運行具有用于評估從 應(yīng)用的運行時檢索到的診斷信息的進程的計算機應(yīng)用。
[0017] 示例性計算機系統(tǒng)包括計算設(shè)備,諸如計算設(shè)備100。在一基本硬件配置中,計算 設(shè)備100通常包括具有一個或多個處理單元(即,處理器102)的處理器系統(tǒng)以及存儲器 104。作為示例,處理單元可包括但不限于一個芯片上的兩個或更多個處理核或者兩個或更 多個處理器芯片。在一些示例中,計算設(shè)備還可具有一個或多個附加的處理或?qū)S锰幚砥?(未示出)以執(zhí)行從處理器102卸載的處理功能,附加的處理或?qū)S锰幚砥髦T如用于圖形處 理器單元上的通用計算的圖形處理器。存儲器104可以布置在分層結(jié)構(gòu)中并且可包括一級 或多級高速緩存。取決于計算設(shè)備的配置和類型,存儲器104可以是易失性的(如隨機存 取存儲器(RAM))、非易失性的(諸如只讀存儲器(R0M)、閃存等)或兩者的某種組合。該基 本配置在圖1中由虛線106來例示。計算設(shè)備100可以采用若干形式中的一種或多種。此 類形式包括平板、個人計算機、工作站、服務(wù)器、手持式設(shè)備、消費者電子設(shè)備(諸如視頻游 戲控制臺)、或其他,并且可以是獨立設(shè)備或被配置為計算機網(wǎng)絡(luò)、計算機群集、云服務(wù)基礎(chǔ) 結(jié)構(gòu)或其他的一部分。
[0018] 計算設(shè)備100還可具有附加特征或功能。例如,計算設(shè)備100還可包括附加存儲。 此類存儲可以是可移動和/或不可移動的,并且可包括但不限于,磁盤或光盤或固態(tài)存儲 器,或者閃速存儲設(shè)備,諸如可移動存儲108和不可移動存儲110。計算機存儲介質(zhì)包括以 存儲諸如計算機可讀的指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)之類的信息的任何合適的方 法或技術(shù)實現(xiàn)的易失性和非易失性、可移動和不可移動介質(zhì)。存儲器104、可移動存儲108 和不可移動存儲110全部都是計算機存儲介質(zhì)的示例。計算機存儲介質(zhì)包括,但不限于, RAM、ROM、EEPR0M、閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光盤存儲、 磁帶盒、磁帶、磁盤存儲或其它磁性存儲設(shè)備、通用串行總線(USB)閃存驅(qū)動器、閃存卡、或 能用于存儲所需信息且可以由計算設(shè)備100訪問的任何其它存儲介質(zhì)。任何這樣的計算機 存儲介質(zhì)都可以是計算設(shè)備100的一部分。
[0019] 計算設(shè)備100常常包括一個或多個輸入和/或輸出連接,諸如USB連接、顯示器端 口、專用連接、以及用于連接到各種設(shè)備以向計算設(shè)備提供輸入和輸出的其他連接。輸入設(shè) 備112可包括諸如鍵盤、定點設(shè)備(例如鼠標(biāo))、筆、語音輸入設(shè)備、觸摸輸入設(shè)備或其他等 設(shè)備。輸出設(shè)備111可包括諸如顯示器、揚聲器、打印機等設(shè)備。
[0020] 計算設(shè)備100常常包括允許計算設(shè)備100與其它計算機/應(yīng)用115進行通信的一 個或多個通信連接114。示例通信連接可包括但不限于,以太網(wǎng)接口、無線接口、總線接口、 存儲區(qū)域網(wǎng)絡(luò)接口、專用接口。通信連接可以被用于將計算設(shè)備100耦合到計算機網(wǎng)絡(luò),所 述計算機網(wǎng)絡(luò)可以根據(jù)各種各樣的特性(例如拓?fù)?、連接方法和規(guī)模)被分類。網(wǎng)絡(luò)是計 算設(shè)備以及可能的由通信信道互連的其它設(shè)備的集合,所述通信信道促成通信且允許在互 連的設(shè)備中共享資源和信息。計算機網(wǎng)絡(luò)的示例包括局域網(wǎng)、廣域網(wǎng)、因特網(wǎng)或其它網(wǎng)絡(luò)。
[0021] 計算設(shè)備100可被配置成運行操作系統(tǒng)軟件程序以及一個或多個計算機應(yīng)用,這 些構(gòu)成系統(tǒng)平臺。被配置成在計算設(shè)備100上執(zhí)行的計算機應(yīng)用包括至少一個進程(或任 務(wù)),所述至少一個進程(或任務(wù))是執(zhí)行程序。每個進程提供用于執(zhí)行該程序的資源。一 個或多個線程在該進程的上下文中運行。線程是操作系統(tǒng)向其分配處理器102中的時間的 基本單元。線程是為執(zhí)行而調(diào)度的進程內(nèi)的實體。進程的各線程可共享其虛擬地址空間和 系統(tǒng)資源。每個線程可包括異常處理程序、調(diào)度優(yōu)先級、線程位置存儲、線程標(biāo)識符、以及直 到該線程被調(diào)度的線程上下文(或線程狀態(tài))。線程上下文包括線程的機器寄存器集、內(nèi)核 棧、線程環(huán)境塊、以及與該線程對應(yīng)的過程的地址空間中的用戶堆。線程可以通過諸如消息 傳遞等技術(shù)在處理期間彼此通信。
[0022] 操作可以在與主應(yīng)用線程分開的線程中執(zhí)行。當(dāng)應(yīng)用調(diào)用用于執(zhí)行操作的方法 時,在該方法執(zhí)行其任務(wù)的同時應(yīng)用可以繼續(xù)執(zhí)行其線程。用于共享存儲器多處理器的并 發(fā)編程可包括多個線程訪問同一數(shù)據(jù)的能力。共享存儲器模型是多線程通信的最常部署的 方法。多個線程在多個處理器、多個處理器核、單個處理器核中的多個邏輯節(jié)點、和/或附 連到在處理器之間共享的存儲器的其他類的并行機構(gòu)上執(zhí)行。
[0023] 計算設(shè)備100的一些實施例包括調(diào)用棧。調(diào)用棧是構(gòu)建在存儲器104中的存儲與 正在運行的計算機程序的活動例程有關(guān)的信息的棧數(shù)據(jù)結(jié)構(gòu)。這種棧也被稱為執(zhí)行棧、控 制棧、運行時棧、機器棧、或僅僅是"棧"。出于若干相關(guān)的目的來使用調(diào)用棧,并且一個目的 在于當(dāng)每一活動例程完成執(zhí)行時對它返回控制的點進行跟蹤?;顒永淌且呀?jīng)被調(diào)用但尚 未完成執(zhí)行并且在執(zhí)行之后控制被傳遞回調(diào)用點的例程。子例程的此類激活可以被嵌套至 任何層級,因此是堆棧結(jié)構(gòu)。調(diào)用程序?qū)⒎祷氐刂穳簵5綏I稀.?dāng)被調(diào)用例程完成時,它從 調(diào)用棧出棧返回地址并且將控制轉(zhuǎn)移至該地址。如果被調(diào)用子例程調(diào)用至另一子例程上, 則將另一返回地址壓棧到調(diào)用棧上,以此類推,信息按照程序命令疊堆和卸堆。一個調(diào)用棧 常常與正在運行的程序或者進程的每一任務(wù)或線程相關(guān)聯(lián),盡管可以為信號處理或協(xié)作式 多任務(wù)創(chuàng)建附加棧。開發(fā)者常常使用調(diào)用棧來確定代碼位置和源頭。然而,異步和事件驅(qū) 動范例顯著地降低用于經(jīng)由調(diào)用棧