專(zhuān)利名稱(chēng):基于客戶(hù)端會(huì)話(huà)的調(diào)試的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及遠(yuǎn)程應(yīng)用技術(shù),尤其涉及遠(yuǎn)程調(diào)試技術(shù)。
背景技術(shù):
隨著網(wǎng)絡(luò)通信和帶寬可用性的增長(zhǎng),遠(yuǎn)程應(yīng)用已經(jīng)變成一種常見(jiàn)現(xiàn)象。代替在大量客戶(hù)端設(shè)備上為相同的應(yīng)用程序安裝、維護(hù)、調(diào)試、更新并執(zhí)行相似操作,應(yīng)用程序可以改為在單個(gè)服務(wù)器中執(zhí)行,客戶(hù)端設(shè)備通過(guò)各個(gè)會(huì)話(huà)來(lái)訪問(wèn)該服務(wù)器。通過(guò)遠(yuǎn)程服務(wù)器上的單個(gè)應(yīng)用程序來(lái)服務(wù)多個(gè)客戶(hù)端的能力降低了維護(hù)成本、減輕了更新和問(wèn)題解決操作的難度、并且減少了從客戶(hù)端要求最小系統(tǒng)參數(shù)的需要。例如,現(xiàn)代應(yīng)用程序代碼與較早本版本的相比相對(duì)較大,需要供執(zhí)行機(jī)器的較大的存儲(chǔ)器和處理能力。另一方面,通過(guò)訪問(wèn)遠(yuǎn)程執(zhí)行的應(yīng)用程序,客戶(hù)端設(shè)備可以不必具有如果應(yīng)用程序在相同客戶(hù)端設(shè)備上執(zhí)行所需要的相同的系統(tǒng)資源。調(diào)試在遠(yuǎn)程服務(wù)器或服務(wù)上執(zhí)行的應(yīng)用程序可能是一個(gè)具有挑戰(zhàn)的任務(wù)。如果服務(wù)處理來(lái)自客戶(hù)端的多個(gè)并發(fā)請(qǐng)求,允許調(diào)試阻塞其他客戶(hù)端可能使用戶(hù)體驗(yàn)降級(jí)。可靠性和安全也是并發(fā)調(diào)試需要考慮的問(wèn)題。在客戶(hù)端進(jìn)程的調(diào)試在線程或進(jìn)程層面上執(zhí)行時(shí),調(diào)試操作可以影響對(duì)其他客戶(hù)端的請(qǐng)求的服務(wù)。
發(fā)明內(nèi)容
提供本發(fā)明內(nèi)容是為了以簡(jiǎn)化的形式介紹將在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并非旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。各實(shí)施例涉及在執(zhí)行服務(wù)器上處理客戶(hù)端請(qǐng)求時(shí)在不中斷其他客戶(hù)端會(huì)話(huà)的執(zhí)行的情況下對(duì)遠(yuǎn)程執(zhí)行的共享應(yīng)用程序(物理上的或進(jìn)程級(jí))在各個(gè)客戶(hù)端會(huì)話(huà)上執(zhí)行調(diào)試操作。根據(jù)某些實(shí)施例,遠(yuǎn)程調(diào)試客戶(hù)端可以連接到在服務(wù)器上執(zhí)行的調(diào)試引擎,以允許調(diào)試客戶(hù)端來(lái)查看源代碼、設(shè)置斷點(diǎn)、查看客戶(hù)端連接、以及當(dāng)正被調(diào)試的客戶(hù)端會(huì)話(huà)命中斷點(diǎn)時(shí)接收回調(diào)或通知。多個(gè)客戶(hù)端可以分開(kāi)調(diào)試,并且它們的執(zhí)行各自由分開(kāi)的調(diào)試客戶(hù)端來(lái)控制。通過(guò)閱讀下面的“具體實(shí)施方式
”并參考相關(guān)聯(lián)的圖形,這些及其他特點(diǎn)和優(yōu)點(diǎn)將變得顯而易見(jiàn)??梢岳斫?,前述一般描述和以下具體實(shí)施方式
均僅是說(shuō)明性的,且不限制所要求保護(hù)的各方面。
圖1是示出客戶(hù)端設(shè)備訪問(wèn)服務(wù)器上的遠(yuǎn)程執(zhí)行的應(yīng)用程序的概念圖;圖2是示出多個(gè)客戶(hù)端設(shè)備通過(guò)會(huì)話(huà)訪問(wèn)服務(wù)器上的遠(yuǎn)程執(zhí)行的應(yīng)用程序的另一概念圖;圖3是示出根據(jù)各實(shí)施例的附連到服務(wù)器的、用于調(diào)試在服務(wù)器上執(zhí)行的不同客戶(hù)端代碼的兩個(gè)不同的調(diào)試客戶(hù)端的圖;圖4示出根據(jù)各實(shí)施例的用于執(zhí)行基于客戶(hù)端會(huì)話(huà)的調(diào)試的服務(wù)器-客戶(hù)端系統(tǒng)的不同組件之間的交互;圖5是其中可實(shí)現(xiàn)根據(jù)各實(shí)施例的系統(tǒng)的聯(lián)網(wǎng)環(huán)境;圖6是其中可實(shí)現(xiàn)各實(shí)施方式的示例計(jì)算操作環(huán)境的框圖;以及圖7示出根據(jù)各實(shí)施例的執(zhí)行基于客戶(hù)端會(huì)話(huà)的調(diào)試的過(guò)程的邏輯流程圖。
具體實(shí)施例方式如前簡(jiǎn)述,基于客戶(hù)端會(huì)話(huà)的調(diào)試可以通過(guò)采用在服務(wù)器上執(zhí)行的調(diào)試客戶(hù)端來(lái)執(zhí)行,從而在不中斷其他客戶(hù)端會(huì)話(huà)的執(zhí)行的情況下能夠調(diào)試各個(gè)客戶(hù)端會(huì)話(huà)。如本文所述,遠(yuǎn)程執(zhí)行的應(yīng)用程序指的是在物理上分開(kāi)的進(jìn)程以及在邏輯上分開(kāi)的進(jìn)程。因此,客戶(hù)端會(huì)話(huà)可以與另一客戶(hù)端會(huì)話(huà)在相同的機(jī)器上執(zhí)行但作為分開(kāi)的進(jìn)程的一部分并且實(shí)現(xiàn)各實(shí)施例。在以下詳細(xì)描述中,參考了構(gòu)成了詳細(xì)描述的一部分并作為說(shuō)明示出了各具體實(shí)施方式
或示例的附圖??山M合些方面,可利用其他方面,并且可以做出結(jié)構(gòu)上的改變而不背離本發(fā)明的精神或范圍。因此,以下具體實(shí)施方式
并不旨在限制,并且本發(fā)明的范圍由所附權(quán)利要求及其等效方案來(lái)限定。雖然在結(jié)合在個(gè)人計(jì)算機(jī)上的操作系統(tǒng)上運(yùn)行的應(yīng)用程序執(zhí)行的程序模塊的一般上下文中描述了各實(shí)施方式,但是本領(lǐng)域技術(shù)人員會(huì)認(rèn)識(shí)到各方面也可以結(jié)合其他程序模塊實(shí)現(xiàn)。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類(lèi)型的例程、程序、組件、數(shù)據(jù)結(jié)構(gòu)和其他類(lèi)型的結(jié)構(gòu)。此外,如本領(lǐng)域技術(shù)人員理解的,各實(shí)施例可以用其他計(jì)算機(jī)系統(tǒng)配置來(lái)實(shí)施,包括手持式設(shè)備、多處理器系統(tǒng)、基于微處理器或可編程消費(fèi)者電子產(chǎn)品、小型計(jì)算機(jī)、大型計(jì)算機(jī)以及類(lèi)似計(jì)算設(shè)備。各實(shí)施方式還能在任務(wù)由通過(guò)通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備來(lái)執(zhí)行的分布式計(jì)算環(huán)境中實(shí)現(xiàn)。在分布式計(jì)算環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。各實(shí)施例可被實(shí)現(xiàn)為計(jì)算機(jī)實(shí)現(xiàn)的過(guò)程(方法)、計(jì)算系統(tǒng)、或者如計(jì)算機(jī)程序產(chǎn)品或計(jì)算機(jī)可讀介質(zhì)等制品。計(jì)算機(jī)程序產(chǎn)品可以是計(jì)算機(jī)系統(tǒng)可讀并且編碼包括用于使得計(jì)算機(jī)或計(jì)算系統(tǒng)執(zhí)行示例過(guò)程的指令的計(jì)算機(jī)程序的計(jì)算機(jī)存儲(chǔ)介質(zhì)。例如,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可經(jīng)由易失性計(jì)算機(jī)存儲(chǔ)器、非易失性存儲(chǔ)器、硬盤(pán)驅(qū)動(dòng)器、閃存驅(qū)動(dòng)器、軟盤(pán)或緊致盤(pán)和類(lèi)似介質(zhì)中的一個(gè)或多個(gè)來(lái)實(shí)現(xiàn)。貫穿本說(shuō)明書(shū),術(shù)語(yǔ)“平臺(tái)”可以是用于管理遠(yuǎn)程應(yīng)用程序服務(wù)和有關(guān)網(wǎng)絡(luò)通信的軟件和硬件組件的組合。平臺(tái)的示例包括但不限于,在多個(gè)服務(wù)器上執(zhí)行的主存服務(wù)、在單個(gè)服務(wù)器上執(zhí)行的應(yīng)用程序以及類(lèi)似系統(tǒng)。術(shù)語(yǔ)“服務(wù)器”一般指通常在聯(lián)網(wǎng)環(huán)境中執(zhí)行一個(gè)或多個(gè)軟件程序的計(jì)算設(shè)備。然而,服務(wù)器還可被實(shí)現(xiàn)為視作網(wǎng)絡(luò)上的服務(wù)器的、在一個(gè)或多個(gè)計(jì)算設(shè)備上執(zhí)行的虛擬服務(wù)器(軟件程序)。關(guān)于這些技術(shù)和示例操作的更多細(xì)節(jié)在以下提供。圖1包括示出客戶(hù)端設(shè)備訪問(wèn)服務(wù)器上的遠(yuǎn)程執(zhí)行的應(yīng)用程序的概念圖100。如本文所述,遠(yuǎn)程執(zhí)行的應(yīng)用程序指的是在物理上分開(kāi)的進(jìn)程以及在邏輯上分開(kāi)的進(jìn)程。因此,客戶(hù)端會(huì)話(huà)可以與另一客戶(hù)端會(huì)話(huà)在相同的機(jī)器上執(zhí)行但作為分開(kāi)的進(jìn)程的一部分并且實(shí)現(xiàn)各實(shí)施例。與在客戶(hù)端機(jī)器上安裝并完全地執(zhí)行的常規(guī)應(yīng)用程序不同,遠(yuǎn)程執(zhí)行的應(yīng)用程序,諸如應(yīng)用程序112可以由可能仍然在同一機(jī)器上的多個(gè)客戶(hù)端共享。在虛擬化環(huán)境中,每一客戶(hù)端在邏輯上可以是遠(yuǎn)程的在每一虛擬機(jī)中,但在物理上在同一機(jī)器上。遠(yuǎn)程執(zhí)行的應(yīng)用程序112在服務(wù)器116的操作系統(tǒng)114的框架內(nèi)執(zhí)行??蛻?hù)端設(shè)備106可以通過(guò)網(wǎng)絡(luò)110連接到服務(wù)器116并建立會(huì)話(huà)。因此,對(duì)于客戶(hù)端設(shè)備106的用戶(hù),可能看上去就像是應(yīng)用程序112在操作系統(tǒng)104上運(yùn)行為應(yīng)用程序102 (由虛線指示), 而客戶(hù)端設(shè)備106不必用諸如存儲(chǔ)器、處理能力、寄存器等傳統(tǒng)系統(tǒng)資源來(lái)支持該應(yīng)用程序。除了對(duì)用于執(zhí)行遠(yuǎn)程應(yīng)用程序的系統(tǒng)資源的縮減需求之外,應(yīng)用程序112可由多個(gè)客戶(hù)端同時(shí)訪問(wèn)(執(zhí)行)。類(lèi)似地,客戶(hù)端設(shè)備106結(jié)合操作系統(tǒng)104可以用系統(tǒng)資源的一小部分并且在不必安裝、維護(hù)或更新各個(gè)應(yīng)用程序的情況下提供對(duì)多個(gè)遠(yuǎn)程應(yīng)用程序的訪問(wèn)ο圖2包括示出多個(gè)客戶(hù)端設(shè)備通過(guò)會(huì)話(huà)訪問(wèn)服務(wù)器上的遠(yuǎn)程執(zhí)行的應(yīng)用程序的另一概念圖200。如上所述,遠(yuǎn)程執(zhí)行的應(yīng)用程序可由多個(gè)客戶(hù)端共享。在根據(jù)各實(shí)施例的系統(tǒng)中,每一客戶(hù)端可以建立具有其遠(yuǎn)程應(yīng)用程序的分開(kāi)會(huì)話(huà),可以在不中斷其他會(huì)話(huà)的執(zhí)行的情況下使用該會(huì)話(huà)來(lái)調(diào)試所執(zhí)行的代碼。在圖200的示例場(chǎng)景中,服務(wù)器220執(zhí)行應(yīng)用程序222和224??蛻?hù)端234和236 通過(guò)它們各自的會(huì)話(huà)來(lái)共享應(yīng)用程序222。應(yīng)用程序224由客戶(hù)端2沈、2觀、230和232通過(guò)它們各自的會(huì)話(huà)來(lái)共享。服務(wù)器220上執(zhí)行的調(diào)試引擎可以使得客戶(hù)端代碼(代表每一客戶(hù)端在服務(wù)器上執(zhí)行的代碼)能夠報(bào)告它們的狀態(tài)并且還使得一個(gè)或多個(gè)遠(yuǎn)程調(diào)式客戶(hù)端能夠附連到各個(gè)會(huì)話(huà)并控制各個(gè)會(huì)話(huà)。因此,在具有多個(gè)客戶(hù)端會(huì)話(huà)的服務(wù)器中,可以中斷正被調(diào)試的特定會(huì)話(huà)的執(zhí)行,這與常規(guī)的每線程或每進(jìn)程中斷不同。可以用安全的方式遠(yuǎn)程地同時(shí)調(diào)試多個(gè)客戶(hù)端會(huì)話(huà)。此外,可以設(shè)置全局?jǐn)帱c(diǎn)以使得調(diào)試客戶(hù)端能夠基于預(yù)定義斷點(diǎn)(而非客戶(hù)端會(huì)話(huà))來(lái)找到要中斷哪個(gè)客戶(hù)端會(huì)話(huà)。圖3是示出根據(jù)各實(shí)施例的附連到服務(wù)器的用于調(diào)試在服務(wù)器上執(zhí)行的不同客戶(hù)端代碼的兩個(gè)不同的調(diào)試客戶(hù)端的圖。圖300示出服務(wù)器340如上所討論地執(zhí)行一個(gè)或多個(gè)遠(yuǎn)程應(yīng)用程序??蛻?hù)端342、344和346可以通過(guò)各自的會(huì)話(huà)來(lái)訪問(wèn)服務(wù)器340。調(diào)試客戶(hù)端348和350也可以通過(guò)各自的調(diào)試會(huì)話(huà)來(lái)訪問(wèn)服務(wù)器340。在根據(jù)各實(shí)施例的系統(tǒng)中,每一會(huì)話(huà)可以單獨(dú)地調(diào)試以允許其他會(huì)話(huà)在不中斷的情況下繼續(xù)執(zhí)行。在服務(wù)器上執(zhí)行的調(diào)試引擎可以使得客戶(hù)端代碼能夠通過(guò)由客戶(hù)端代碼建立的會(huì)話(huà)對(duì)象將它們的狀態(tài)報(bào)告給調(diào)試引擎??梢韵蜻h(yuǎn)程調(diào)試客戶(hù)端,諸如調(diào)試客戶(hù)端 348或350,提供執(zhí)行代碼的狀態(tài)(例如,斷點(diǎn))和附加信息以使得遠(yuǎn)程調(diào)試客戶(hù)端能夠控制調(diào)試進(jìn)程。在圖300的示例場(chǎng)景中,三個(gè)客戶(hù)端(342、344和346)和兩個(gè)調(diào)試客戶(hù)端(348和 350)被連接到服務(wù)器340。如果調(diào)試客戶(hù)端A348附連到客戶(hù)端A (346)的會(huì)話(huà)而調(diào)試客戶(hù)端B350附連到客戶(hù)端B(344)的會(huì)話(huà),則調(diào)試客戶(hù)端A348可以控制、檢查、和/或分析客戶(hù)端會(huì)話(huà)A在服務(wù)器340上的執(zhí)行。調(diào)試客戶(hù)端B350可以對(duì)客戶(hù)端會(huì)話(huà)B進(jìn)行同樣的動(dòng)作。 因此,客戶(hù)端C342不受任一個(gè)調(diào)試客戶(hù)端的影響。圖4示出根據(jù)各實(shí)施例的用于執(zhí)行基于客戶(hù)端會(huì)話(huà)的調(diào)試的服務(wù)器-客戶(hù)端系統(tǒng)的不同組件之間的交互。雖然圖400示出一個(gè)服務(wù)器和在客戶(hù)端機(jī)器上執(zhí)行的一個(gè)調(diào)試客戶(hù)端,但根據(jù)各實(shí)施例的系統(tǒng)可以包括多個(gè)服務(wù)器和/或客戶(hù)端。服務(wù)器452可以執(zhí)行服務(wù)器代碼妨4和/或客戶(hù)端代碼462,服務(wù)器代碼妨4是客戶(hù)端不可訪問(wèn)的代碼或者是不應(yīng)該被調(diào)試的代碼(例如,調(diào)試器引擎本身或框架代碼的其他部分)??蛻?hù)端代碼462是代表特定客戶(hù)端在服務(wù)器上執(zhí)行的代碼。執(zhí)行應(yīng)用程序編程接口(API)458可以由服務(wù)器本身暴露且由在客戶(hù)端會(huì)話(huà)的上下文中代表客戶(hù)端的客戶(hù)端代碼462來(lái)調(diào)用。調(diào)試引擎456可以暴露由遠(yuǎn)程調(diào)試客戶(hù)端464調(diào)用的調(diào)試客戶(hù)端API 460。客戶(hù)端代碼462可以調(diào)用執(zhí)行API 458上的kssionStart (會(huì)話(huà)開(kāi)始)方法一次并建立用于記住會(huì)話(huà)/客戶(hù)端并將其與其他會(huì)話(huà)/客戶(hù)端進(jìn)行區(qū)分的會(huì)話(huà)對(duì)象。可以將會(huì)話(huà)對(duì)象作為該調(diào)用的結(jié)果返回到客戶(hù)端代碼462。隨后,客戶(hù)端代碼462可以周期性地調(diào)用執(zhí)行API 458上的MatementHit (語(yǔ)句命中)方法以通過(guò)會(huì)話(huà)對(duì)象來(lái)通知調(diào)試引擎456關(guān)于代碼的位置及其相關(guān)聯(lián)的客戶(hù)端會(huì)話(huà)。StatementHit方法通常可以在執(zhí)行每一邏輯語(yǔ)句之前調(diào)用,并且可以通過(guò)工具將調(diào)用本身插入或?qū)氲酱a中。StatementHit方法隨后可以確定調(diào)試客戶(hù)端464是否附連到給定連接。該方法還可以確定執(zhí)行是否應(yīng)該是“斷點(diǎn)”(即,如果已經(jīng)在給定語(yǔ)句上設(shè)置了斷點(diǎn)并且任何相關(guān)聯(lián)的條件的求值為真)或調(diào)試客戶(hù)端464在各個(gè)語(yǔ)句中步進(jìn)。如果調(diào)試機(jī)器456確定應(yīng)該中斷,則可以通知相關(guān)聯(lián)的遠(yuǎn)程調(diào)試客戶(hù)端464。根據(jù)某些實(shí)施例,執(zhí)行可以不返回至進(jìn)行調(diào)用的代碼直到調(diào)試客戶(hù)端發(fā)出“繼續(xù)”命令。根據(jù)其他實(shí)施例,可以在MatementHit的實(shí)現(xiàn)過(guò)程中計(jì)算調(diào)用棧、變量、執(zhí)行歷史以及類(lèi)似信息,并使得這些信息在請(qǐng)求時(shí)對(duì)調(diào)試客戶(hù)端可用。調(diào)試客戶(hù)端API 460使得外部調(diào)式客戶(hù)端464能夠連接到調(diào)試引擎456。該API可以使得調(diào)試客戶(hù)端464能夠執(zhí)行以下動(dòng)作中的一個(gè)或多個(gè)查看在服務(wù)器上執(zhí)行的客戶(hù)端會(huì)話(huà)列表;選擇要調(diào)試的客戶(hù)端會(huì)話(huà);設(shè)置斷點(diǎn),可任選地附加條件;當(dāng)命中斷點(diǎn)時(shí)接收通知;查詢(xún)代碼相對(duì)于原始、未經(jīng)操縱的源代碼的當(dāng)前位置;以及查詢(xún)調(diào)用棧、變量值、執(zhí)行歷史和有關(guān)的元數(shù)據(jù)。雖然上述動(dòng)作中的許多被“鎖定”至單個(gè)客戶(hù)端會(huì)話(huà)中,但某些可被允許是“全局” 的。因此,根據(jù)其他實(shí)施例,命中特定斷點(diǎn)/條件的任何客戶(hù)端/會(huì)話(huà)可以觸發(fā)給定的動(dòng)作。 這可以在期望調(diào)試客戶(hù)端采取動(dòng)作但預(yù)先不知道要調(diào)試哪個(gè)客戶(hù)端的情況下采用。已經(jīng)用具體的服務(wù)器、客戶(hù)端設(shè)備、軟件模塊和交互描述了圖1、2、3和4中的示例系統(tǒng)。各實(shí)施例不限于根據(jù)這些示例配置的系統(tǒng)。基于客戶(hù)端會(huì)話(huà)的調(diào)試可以在采用更少或更多組件并執(zhí)行其他任務(wù)的配置中實(shí)現(xiàn)。此外,已經(jīng)結(jié)合描述以上實(shí)施例討論了具體的協(xié)議和接口。各實(shí)施例也不限于這些示例??梢允褂么颂幟枋龅脑碛孟嗨频姆绞絹?lái)實(shí)現(xiàn)其他協(xié)議、交換和接口。圖5是可以實(shí)現(xiàn)各實(shí)施方式的示例聯(lián)網(wǎng)環(huán)境。提供遠(yuǎn)程應(yīng)用程序服務(wù)的平臺(tái)可經(jīng)由諸如托管服務(wù)等在一個(gè)或多個(gè)服務(wù)器516上執(zhí)行的軟件來(lái)實(shí)現(xiàn)。該平臺(tái)可以通過(guò)網(wǎng)絡(luò) 510來(lái)與諸如臺(tái)式計(jì)算機(jī)511、膝上型計(jì)算機(jī)512、智能電話(huà)513、或手持式計(jì)算設(shè)備514(‘客戶(hù)端設(shè)備’)等各個(gè)計(jì)算設(shè)備上的客戶(hù)端應(yīng)用程序進(jìn)行通信。如上所討論的,用戶(hù)可以通過(guò)客戶(hù)端設(shè)備511-514來(lái)訪問(wèn)在服務(wù)器516中的一個(gè)或多個(gè)上遠(yuǎn)程執(zhí)行的應(yīng)用程序。在服務(wù)器516上執(zhí)行的調(diào)試引擎可以暴露執(zhí)行API和調(diào)試客戶(hù)端API,其可以在不中斷其他客戶(hù)端的客戶(hù)端代碼的執(zhí)行的情況下實(shí)現(xiàn)服務(wù)器上的會(huì)話(huà)級(jí)的客戶(hù)端代碼的調(diào)試。遠(yuǎn)程執(zhí)行的應(yīng)用程序可以直接從數(shù)據(jù)存儲(chǔ)518檢索必要數(shù)據(jù)或通過(guò)數(shù)據(jù)庫(kù)服務(wù)器519來(lái)檢索必要數(shù)據(jù)。網(wǎng)絡(luò)510可包括服務(wù)器、客戶(hù)端、因特網(wǎng)服務(wù)供應(yīng)商、以及通信介質(zhì)的任何拓?fù)浣Y(jié)構(gòu)。根據(jù)各實(shí)施例的系統(tǒng)可具有靜態(tài)或動(dòng)態(tài)拓?fù)浣Y(jié)構(gòu)。網(wǎng)絡(luò)510可包括諸如企業(yè)網(wǎng)絡(luò)等安全網(wǎng)絡(luò)、諸如無(wú)線開(kāi)放網(wǎng)絡(luò)等非安全網(wǎng)絡(luò)、或因特網(wǎng)。網(wǎng)絡(luò)510還可通過(guò)諸如公共交換電話(huà)網(wǎng)絡(luò)(PSTN)或蜂窩網(wǎng)絡(luò)等其他網(wǎng)絡(luò)來(lái)協(xié)調(diào)通信。此外,網(wǎng)絡(luò)510可包括諸如藍(lán)牙或類(lèi)似網(wǎng)絡(luò)等短程無(wú)線網(wǎng)絡(luò)。網(wǎng)絡(luò)510提供此處描述的節(jié)點(diǎn)之間的通信。作為示例而非限制,網(wǎng)絡(luò) 510可包括諸如聲學(xué)、RF、紅外線和其他無(wú)線介質(zhì)等無(wú)線介質(zhì)??梢圆捎糜?jì)算設(shè)備、應(yīng)用程序、數(shù)據(jù)源和數(shù)據(jù)分發(fā)系統(tǒng)的許多其它配置來(lái)實(shí)現(xiàn)基于客戶(hù)端會(huì)話(huà)的調(diào)試的框架。此外,圖5中所討論的聯(lián)網(wǎng)環(huán)境僅用于說(shuō)明目的。各實(shí)施方式不限于示例應(yīng)用程序、模塊、或過(guò)程。圖6及相關(guān)聯(lián)的討論旨在提供對(duì)其中可實(shí)現(xiàn)各實(shí)施方式的合適計(jì)算環(huán)境的簡(jiǎn)要概括描述。參考圖6,示出了根據(jù)各實(shí)施例的、諸如計(jì)算設(shè)備600等用于應(yīng)用程序的示例計(jì)算操作環(huán)境的框圖。在基本配置中,計(jì)算設(shè)備600可以是根據(jù)各實(shí)施例的實(shí)現(xiàn)基于客戶(hù)端會(huì)話(huà)的調(diào)試的、執(zhí)行遠(yuǎn)程應(yīng)用程序的并包括至少一個(gè)處理單元602和系統(tǒng)存儲(chǔ)器604的服務(wù)器。計(jì)算設(shè)備600還可包括協(xié)作執(zhí)行程序的多個(gè)處理單元。取決于計(jì)算設(shè)備的確切配置和類(lèi)型,系統(tǒng)存儲(chǔ)器604可以是易失性的(諸如RAM)、非易失性的(諸如ROM、閃存等)或是兩者的某種組合。系統(tǒng)存儲(chǔ)器604通常包括適于控制平臺(tái)操作的操作系統(tǒng)605,諸如來(lái)自華盛頓州雷德蒙市的微軟公司的WINDOWS 操作系統(tǒng)。系統(tǒng)存儲(chǔ)器604還可包括一個(gè)或多個(gè)軟件應(yīng)用程序,諸如程序模塊606、應(yīng)用程序622、客戶(hù)端代碼6 和調(diào)試引擎624。應(yīng)用程序622可以是遠(yuǎn)程地在計(jì)算設(shè)備600上執(zhí)行的并可由一個(gè)或多個(gè)客戶(hù)端設(shè)備訪問(wèn)的應(yīng)用程序。應(yīng)用程序622可以包括服務(wù)器代碼和客戶(hù)端代碼,服務(wù)器代碼不可由客戶(hù)端設(shè)備訪問(wèn)(即不可調(diào)試的)??蛻?hù)端代碼可以如先前所述地采用調(diào)試引擎擬6來(lái)調(diào)試。該基本配置在圖6中由虛線608內(nèi)的組件示出。計(jì)算設(shè)備600可具有附加特征或功能。例如,計(jì)算設(shè)備600還可包括附加數(shù)據(jù)存儲(chǔ)設(shè)備(可移動(dòng)和/或不可移動(dòng)),諸如例如磁盤(pán)、光盤(pán)或磁帶。在圖6中通過(guò)可移動(dòng)存儲(chǔ) 609和不可移動(dòng)存儲(chǔ)610示出了這樣的附加存儲(chǔ)。計(jì)算機(jī)可讀介質(zhì)可包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。系統(tǒng)存儲(chǔ)器604、可移動(dòng)存儲(chǔ)609和不可移動(dòng)存儲(chǔ)610 都是計(jì)算機(jī)可讀介質(zhì)的示例。計(jì)算機(jī)可讀介質(zhì)包括,但不限于,RAM、R0M、EEPR0M、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(pán)(DVD)或其它光存儲(chǔ)、磁帶、磁盤(pán)存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或能用于存儲(chǔ)所需信息且可以由計(jì)算設(shè)備600訪問(wèn)的任何其它介質(zhì)。任何這樣的計(jì)算機(jī)可讀介質(zhì)都可以是計(jì)算設(shè)備600的一部分。計(jì)算設(shè)備600也可具有輸入設(shè)備612,諸如鍵盤(pán)、鼠標(biāo)、筆、語(yǔ)音輸入設(shè)備、觸摸輸入設(shè)備和類(lèi)似輸入設(shè)備。還可包括輸出設(shè)備614,諸如顯示器、揚(yáng)聲器、打印機(jī)和其他類(lèi)型的輸出設(shè)備。這些設(shè)備在本領(lǐng)域中公知并且無(wú)需在此處詳細(xì)討論。計(jì)算設(shè)備600還可包含通信連接616,該通信連接允許該設(shè)備諸如通過(guò)分布式計(jì)算環(huán)境中的有線或無(wú)線網(wǎng)絡(luò)、衛(wèi)星鏈接、蜂窩鏈接、短程網(wǎng)絡(luò)和類(lèi)似機(jī)制來(lái)與其他設(shè)備618進(jìn)行通信。其他設(shè)備618可包括執(zhí)行通信應(yīng)用程序的計(jì)算機(jī)設(shè)備、其他web服務(wù)器和類(lèi)似設(shè)備。通信連接616是通信介質(zhì)的一個(gè)示例。通信介質(zhì)可在其中包括計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)。作為示例而非限制,通信介質(zhì)包括有線介質(zhì),如有線網(wǎng)絡(luò)或直接線連接,以及諸如聲學(xué)、射頻(RF)、紅外線及其他無(wú)線介質(zhì)之類(lèi)的無(wú)線介質(zhì)。各示例實(shí)施例還包括各種方法。這些方法可以用任何數(shù)量的方式,包括本文中所描述的結(jié)構(gòu)來(lái)實(shí)現(xiàn)。一種此類(lèi)方式是通過(guò)本文中描述的類(lèi)型的設(shè)備的機(jī)器操作。另一可任選方式是結(jié)合一個(gè)或多個(gè)人類(lèi)操作者執(zhí)行該方法的各個(gè)操作中的某一些來(lái)執(zhí)行該方法的一個(gè)或多個(gè)操作。這些人類(lèi)操作者無(wú)需彼此同在一處,而是其每一個(gè)可以?xún)H與執(zhí)行程序的一部分的機(jī)器同在一處。圖7示出根據(jù)各實(shí)施例的執(zhí)行基于客戶(hù)端會(huì)話(huà)的調(diào)試的過(guò)程700的邏輯流程圖。 過(guò)程700可作為執(zhí)行遠(yuǎn)程應(yīng)用程序的服務(wù)器的一部分來(lái)實(shí)現(xiàn)。過(guò)程700從操作710開(kāi)始,在那里在由調(diào)試引擎暴露的執(zhí)行API處從客戶(hù)端代碼接收到MatementHit方法之后,可以為客戶(hù)端建立會(huì)話(huà)對(duì)象。會(huì)話(huà)對(duì)象可以記住會(huì)話(huà)/客戶(hù)端并將其與其他會(huì)話(huà)/客戶(hù)端進(jìn)行區(qū)分。在操作720處,客戶(hù)端代碼可以通過(guò)會(huì)話(huà)對(duì)象來(lái)通知調(diào)試引擎代碼的位置及其相關(guān)聯(lián)的客戶(hù)端會(huì)話(huà)。客戶(hù)端代碼可以通過(guò)通常在執(zhí)行每一邏輯語(yǔ)句之前調(diào)用MatementHit 方法來(lái)實(shí)現(xiàn)以上操作。在判定操作730處,StatementHit方法可以確定是否有調(diào)試客戶(hù)端附連到給定連接。如果附連了調(diào)試客戶(hù)端,則在操作740處還可以確定執(zhí)行是否是斷點(diǎn)。如果引擎確定應(yīng)該中斷,則可以通知相關(guān)聯(lián)的調(diào)試客戶(hù)端。執(zhí)行可以等待返回至進(jìn)行調(diào)用的客戶(hù)端代碼直到調(diào)試客戶(hù)端發(fā)出繼續(xù)命令??梢栽贛atementHit的實(shí)現(xiàn)過(guò)程中計(jì)算包括調(diào)用棧、變量、執(zhí)行歷史等的信息并在操作750處在請(qǐng)求時(shí)將其提供給調(diào)試客戶(hù)端。包括在過(guò)程700內(nèi)的各操作僅出于說(shuō)明目的?;诳蛻?hù)端會(huì)話(huà)的調(diào)試可以使用此處所述的各原理通過(guò)具有更少或更多步驟的相似過(guò)程、以及不同的操作次序來(lái)實(shí)現(xiàn)。以上說(shuō)明書(shū)、示例和數(shù)據(jù)提供了對(duì)各實(shí)施方式組成的制造和使用的全面描述。盡管用結(jié)構(gòu)特征和/或方法動(dòng)作專(zhuān)用的語(yǔ)言描述了本主題,但可以理解,所附權(quán)利要求書(shū)中定義的主題不必限于上述具體特征或動(dòng)作。相反,上述具體特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求和各實(shí)施方式的示例形式而公開(kāi)的。
權(quán)利要求
1.一種至少部分地在計(jì)算設(shè)備中執(zhí)行的用于執(zhí)行基于客戶(hù)端會(huì)話(huà)的調(diào)試的方法,所述方法包括在調(diào)試引擎處接收與在服務(wù)器上執(zhí)行的客戶(hù)端代碼的會(huì)話(huà)相關(guān)聯(lián)的標(biāo)識(shí)信息; 確定是否有調(diào)試客戶(hù)端附連到所述會(huì)話(huà);如果附連了調(diào)試客戶(hù)端,則確定是否到達(dá)所述客戶(hù)端代碼的執(zhí)行中的斷點(diǎn);以及如果到達(dá)斷點(diǎn),則將客戶(hù)端代碼信息提供給所附連的調(diào)試客戶(hù)端以使得所述調(diào)試客戶(hù)端能夠在不中斷所述服務(wù)器上的客戶(hù)端代碼的任何其他會(huì)話(huà)的情況下控制調(diào)試進(jìn)程。
2.如權(quán)利要求1所述的方法,其特征在于,還包括響應(yīng)于來(lái)自所述客戶(hù)端代碼的方法調(diào)用來(lái)建立會(huì)話(huà)對(duì)象,其中采用所述會(huì)話(huà)對(duì)象來(lái)記住所述會(huì)話(huà)并將所述會(huì)話(huà)與所述客戶(hù)端代碼的其他會(huì)話(huà)進(jìn)行區(qū)分;以及將所述會(huì)話(huà)對(duì)象返回至所述進(jìn)行調(diào)用的客戶(hù)端代碼。
3.如權(quán)利要求2所述的方法,其特征在于,使用所述會(huì)話(huà)對(duì)象通過(guò)來(lái)自所述客戶(hù)端代碼的周期調(diào)用來(lái)接收所述客戶(hù)端代碼信息,并且所述會(huì)話(huà)對(duì)象中包括的所述標(biāo)識(shí)信息與所述客戶(hù)端代碼的位置以及相關(guān)聯(lián)的會(huì)話(huà)相關(guān)聯(lián)。
4.如權(quán)利要求1所述的方法,其特征在于,確定是否到達(dá)斷點(diǎn)包括 確定是否在特定語(yǔ)句上設(shè)置了斷點(diǎn);以及確定至少一個(gè)相關(guān)聯(lián)的條件是否為真。
5.如權(quán)利要求1所述的方法,其特征在于,還包括計(jì)算以下一組中的至少一個(gè)調(diào)用棧、一個(gè)或多個(gè)變量、以及執(zhí)行歷史;以及在請(qǐng)求時(shí)將所計(jì)算的信息提供給所述調(diào)試客戶(hù)端。
6.如權(quán)利要求1所述的方法,其特征在于,使所述調(diào)試客戶(hù)端能夠執(zhí)行以下一組動(dòng)作中的至少一個(gè)查看在所述服務(wù)器上執(zhí)行的客戶(hù)端會(huì)話(huà)列表;選擇要調(diào)試的客戶(hù)端會(huì)話(huà); 設(shè)置斷點(diǎn);接收關(guān)于斷點(diǎn)的通知;查詢(xún)所述客戶(hù)端代碼的當(dāng)前位置;將條件附連到斷點(diǎn)以及查詢(xún)以下各項(xiàng)中的至少一個(gè)調(diào)用棧、變量值、執(zhí)行歷史以及相關(guān)元數(shù)據(jù)。
7.如權(quán)利要求1所述的方法,其特征在于,所述斷點(diǎn)被定義為全局的從而使得到達(dá)所述斷點(diǎn)的所述客戶(hù)端代碼的任何會(huì)話(huà)被附連到所述調(diào)試客戶(hù)端。
8.一種用于執(zhí)行共享應(yīng)用程序并提供基于客戶(hù)端會(huì)話(huà)的調(diào)試的系統(tǒng),所述系統(tǒng)包括 存儲(chǔ)可執(zhí)行指令的存儲(chǔ)器;耦合到所述存儲(chǔ)器的處理器,所述處理器執(zhí)行客戶(hù)端代碼的多個(gè)會(huì)話(huà)和調(diào)試引擎,其中所述調(diào)試引擎被配置為通過(guò)會(huì)話(huà)對(duì)象從所述客戶(hù)端代碼接收所述客戶(hù)端代碼的位置和相關(guān)聯(lián)的會(huì)話(huà)標(biāo)識(shí); 確定是否有調(diào)試客戶(hù)端附連到所標(biāo)識(shí)的會(huì)話(huà);如果附連了調(diào)試客戶(hù)端,則確定是否到達(dá)所述客戶(hù)端代碼的執(zhí)行中的斷點(diǎn); 如果到達(dá)所述斷點(diǎn),則確定與所述斷點(diǎn)相關(guān)聯(lián)的至少一個(gè)條件是否為真;以及如果所述至少一個(gè)條件為真,則將所述客戶(hù)端代碼的位置和所述相關(guān)聯(lián)的會(huì)話(huà)標(biāo)識(shí)提供給所附連的調(diào)試客戶(hù)端,以使得所述調(diào)試客戶(hù)端能夠在不中斷所述服務(wù)器上的客戶(hù)端代碼的任何其他會(huì)話(huà)的情況下控制調(diào)試進(jìn)程。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述調(diào)試引擎還被配置為響應(yīng)于通過(guò)執(zhí)行應(yīng)用程序編程接口(API)來(lái)自所述客戶(hù)端代碼的方法調(diào)用來(lái)建立所述會(huì)話(huà)對(duì)象,并通過(guò)所述執(zhí)行API從所述客戶(hù)端代碼接收帶有所述客戶(hù)端代碼的位置和相關(guān)聯(lián)的會(huì)話(huà)標(biāo)識(shí)的周期方法調(diào)用。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述調(diào)試引擎還被配置成通過(guò)調(diào)試客戶(hù)端API通知所附連的調(diào)試客戶(hù)端關(guān)于到達(dá)所述斷點(diǎn)的所述客戶(hù)端代碼的位置和所述相關(guān)聯(lián)的會(huì)話(huà)標(biāo)識(shí);以及接收與以下一組中的至少一個(gè)相關(guān)聯(lián)的信息要調(diào)試的客戶(hù)端會(huì)話(huà)的選擇、斷點(diǎn)的設(shè)置、將條件附連到斷點(diǎn)、以及通過(guò)所述調(diào)試客戶(hù)端API向所述調(diào)試客戶(hù)端查詢(xún)所述客戶(hù)端代碼的當(dāng)前位置。
11.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述處理器被配置為執(zhí)行多個(gè)應(yīng)用程序, 每一應(yīng)用程序由客戶(hù)端共享。
12.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述處理器被配置為執(zhí)行不可由任何客戶(hù)端訪問(wèn)的服務(wù)器代碼,所述服務(wù)器代碼包括以下兩項(xiàng)中的至少一個(gè)調(diào)試引擎和框架代碼。
13.一種其上存儲(chǔ)有用于基于客戶(hù)端會(huì)話(huà)的調(diào)試的指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令包括響應(yīng)于來(lái)自客戶(hù)端代碼的初始方法調(diào)用在調(diào)試引擎處建立會(huì)話(huà)對(duì)象,其中采用所述會(huì)話(huà)對(duì)象來(lái)記住所述客戶(hù)端代碼的會(huì)話(huà)并將所述會(huì)話(huà)與所述客戶(hù)端代碼的其他會(huì)話(huà)進(jìn)行區(qū)分;將所述會(huì)話(huà)對(duì)象返回至所述進(jìn)行調(diào)用的客戶(hù)端代碼;通過(guò)來(lái)自所述客戶(hù)端代碼的周期方法調(diào)用接收與所述客戶(hù)端代碼的位置及相關(guān)聯(lián)的會(huì)話(huà)相關(guān)聯(lián)的信息;確定是否有調(diào)試客戶(hù)端附連到所述會(huì)話(huà);如果附連了調(diào)試客戶(hù)端,則確定是否到達(dá)所述客戶(hù)端代碼的執(zhí)行中的斷點(diǎn)并且與所述斷點(diǎn)相關(guān)聯(lián)的至少一個(gè)條件是否為真;以及如果到達(dá)所述斷點(diǎn)并且所述條件為真,則暫停所述客戶(hù)端代碼的執(zhí)行直到從所述調(diào)試客戶(hù)端接收到繼續(xù)命令,以及將所接收的客戶(hù)端代碼信息提供給所附連的調(diào)試客戶(hù)端以使得所述調(diào)試客戶(hù)端能夠在不中斷所述服務(wù)器上的客戶(hù)端代碼的任何其他會(huì)話(huà)的情況下控制調(diào)試進(jìn)程。
14.如權(quán)利要求13所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,來(lái)自所述客戶(hù)端代碼的調(diào)用通過(guò)暴露給所述客戶(hù)端代碼的內(nèi)部執(zhí)行API來(lái)接收,而來(lái)自所述調(diào)試客戶(hù)端的調(diào)用通過(guò)暴露給所述遠(yuǎn)程調(diào)試客戶(hù)端的外部調(diào)試客戶(hù)端API來(lái)接收。
15.如權(quán)利要求13所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述周期調(diào)用用工具插入到所述客戶(hù)端代碼中。
全文摘要
本發(fā)明描述了基于客戶(hù)端會(huì)話(huà)的調(diào)試。在執(zhí)行服務(wù)器上處理客戶(hù)端請(qǐng)求時(shí),能夠在不中斷其他客戶(hù)端會(huì)話(huà)的執(zhí)行的情況下對(duì)遠(yuǎn)程執(zhí)行的共享應(yīng)用程序的各個(gè)客戶(hù)端會(huì)話(huà)執(zhí)行調(diào)試操作。遠(yuǎn)程調(diào)試客戶(hù)端可以連接到在服務(wù)器上執(zhí)行的調(diào)試引擎,以允許調(diào)試客戶(hù)端查看源代碼、設(shè)置斷點(diǎn)、查看客戶(hù)端連接、以及當(dāng)正在調(diào)試的客戶(hù)端會(huì)話(huà)命中斷點(diǎn)時(shí)接收回調(diào)或通知。調(diào)試客戶(hù)端還可以通過(guò)在客戶(hù)端代碼中的步進(jìn)來(lái)控制執(zhí)行以能夠同時(shí)調(diào)試多個(gè)客戶(hù)端。
文檔編號(hào)H04L29/06GK102195970SQ20111006590
公開(kāi)日2011年9月21日 申請(qǐng)日期2011年3月9日 優(yōu)先權(quán)日2010年3月10日
發(fā)明者J·斯泰爾斯, T·赫杰斯伯格 申請(qǐng)人:微軟公司