針對(duì)基于云的調(diào)試的制作方法
【專利說明】針對(duì)基于云的調(diào)試
[0001] 對(duì)相關(guān)申請(qǐng)的交叉引用
[0002] 本申請(qǐng)要求于2014年5月1日提交的、標(biāo)題為叮argeted Cloud-based Debugging" 的共同未決美國申請(qǐng)No. 14/267,361和于2013年8月22日提交的、標(biāo)題為"Taskf low Targeted Debugging in the Cloucf的共同未決美國臨時(shí)專利申請(qǐng)No.61/868,763的優(yōu)先 權(quán),其中每個(gè)申請(qǐng)的全部公開內(nèi)容都通過引用被結(jié)合于此,用于所有目的。
【背景技術(shù)】
[0003] 通常,當(dāng)軟件開發(fā)者在編寫代碼時(shí),開發(fā)者將在調(diào)試模式下編譯和執(zhí)行代碼。調(diào)試 模式可W允許開發(fā)者查看代碼在執(zhí)行期間是如何工作的。當(dāng)代碼在調(diào)試模式下被執(zhí)行時(shí), 開發(fā)者通常能夠:查看在執(zhí)行期間的變量值、設(shè)置在該處代碼的執(zhí)行將停止直到開發(fā)者觸 發(fā)繼續(xù)執(zhí)行的斷點(diǎn)、和/或在逐行的基礎(chǔ)上單步執(zhí)行代碼。
[0004] 當(dāng)代碼在開發(fā)者本地的計(jì)算機(jī)系統(tǒng)處被編譯、調(diào)試和/或執(zhí)行時(shí),運(yùn)種布置可W很 好地工作。在常規(guī)的布置中,可能需要在完全地在(允許調(diào)試功能的)調(diào)試模式下或者在(常 規(guī)上不允許調(diào)試功能的)運(yùn)行時(shí)模式下執(zhí)行代碼之間做出選擇。當(dāng)開發(fā)者是使用計(jì)算機(jī)系 統(tǒng)的唯一的人員時(shí),運(yùn)種選擇可W由開發(fā)者容易地做出。
[0005] 此外,當(dāng)開發(fā)者具有希望被調(diào)試的代碼時(shí),開發(fā)者可能只對(duì)調(diào)試代碼的一部分而 同時(shí)允許代碼的其余部分不帶調(diào)試功能地執(zhí)行感興趣。為整個(gè)代碼片段提供的調(diào)試功能會(huì) 起到分散開發(fā)者的注意力和/或浪費(fèi)其時(shí)間的作用。因此,由于運(yùn)些W及其它原因,可能希 望開發(fā)者能夠指定代碼包的用于調(diào)試的一個(gè)或多個(gè)部分,W排除其它部分。
【發(fā)明內(nèi)容】
[0006] 在一些實(shí)施例中,給出了用于調(diào)試代碼的方法。該方法可W包括通過計(jì)算機(jī)系統(tǒng) 將代碼編譯為已編譯代碼,其中代碼的第一部分對(duì)應(yīng)于第一任務(wù)流并且代碼的第二部分對(duì) 應(yīng)于第二任務(wù)流。該方法可W包括通過計(jì)算機(jī)系統(tǒng)經(jīng)由網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收對(duì)第 一任務(wù)流的選擇,其中該選擇指示第一任務(wù)流要被調(diào)試。該方法可W包括通過計(jì)算機(jī)系統(tǒng) 開始第一任務(wù)流的執(zhí)行。該方法可W包括:在計(jì)算機(jī)系統(tǒng)正在執(zhí)行已編譯代碼的第一任務(wù) 流的同時(shí),通過計(jì)算機(jī)系統(tǒng)經(jīng)由網(wǎng)絡(luò)向開發(fā)者計(jì)算機(jī)系統(tǒng)提供用于代碼的第一部分的調(diào)試 功能。
[0007] 運(yùn)種方法的實(shí)施例可W包括W下特征中的一個(gè)或多個(gè)特征:該方法可W包括:在 編譯代碼之前,通過計(jì)算機(jī)系統(tǒng)經(jīng)由網(wǎng)絡(luò)瀏覽器接口和網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收用于 編譯的代碼,其中計(jì)算機(jī)系統(tǒng)是為多個(gè)開發(fā)者計(jì)算機(jī)系統(tǒng)提供編譯服務(wù)的網(wǎng)絡(luò)服務(wù)計(jì)算機(jī) 系統(tǒng)。該方法可W包括通過計(jì)算機(jī)系統(tǒng)執(zhí)行第二任務(wù)流??蒞不經(jīng)由網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī) 系統(tǒng)接收到用于第二任務(wù)流的調(diào)試的選擇??蒞不向開發(fā)者計(jì)算機(jī)系統(tǒng)提供與代碼的第二 部分相關(guān)聯(lián)的調(diào)試功能。該方法可W包括通過計(jì)算機(jī)系統(tǒng)經(jīng)由網(wǎng)絡(luò)瀏覽器向開發(fā)者計(jì)算機(jī) 系統(tǒng)提供允許在多個(gè)任務(wù)流中進(jìn)行選擇的接口,該多個(gè)任務(wù)流包括第一任務(wù)流和第二任務(wù) 流。該方法可W包括:在第一任務(wù)流的執(zhí)行期間,通過計(jì)算機(jī)系統(tǒng)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收 對(duì)第二任務(wù)流的選擇。該方法可W包括通過計(jì)算機(jī)系統(tǒng)開始第二任務(wù)流的執(zhí)行。該方法可 W包括:在計(jì)算機(jī)系統(tǒng)正在執(zhí)行已編譯代碼的第二任務(wù)流的同時(shí),通過計(jì)算機(jī)系統(tǒng)經(jīng)由網(wǎng) 絡(luò)向開發(fā)者計(jì)算機(jī)系統(tǒng)提供用于代碼的第二部分的調(diào)試功能。通過計(jì)算機(jī)系統(tǒng)執(zhí)行第一任 務(wù)流可W通過由計(jì)算機(jī)系統(tǒng)執(zhí)行的虛擬機(jī)執(zhí)行,該虛擬機(jī)將已編譯代碼作為運(yùn)行時(shí)線程執(zhí) 行。該方法可W包括:在執(zhí)行第一任務(wù)流的同時(shí),通過由計(jì)算機(jī)系統(tǒng)執(zhí)行的虛擬機(jī)執(zhí)行第二 運(yùn)行時(shí)線程,其中第二運(yùn)行時(shí)線程不具有提供給任何用戶的調(diào)試功能。將代碼編譯為已編 譯代碼可W包括在編譯期間修改代碼的第一部分和代碼的第二部分,W包括附加代碼,其 中該附加代碼提供調(diào)試功能。調(diào)試功能可W包括選自包括W下的組中的一個(gè)或多個(gè)特征: 在開發(fā)者計(jì)算機(jī)系統(tǒng)處的代碼的第一部分內(nèi)的斷點(diǎn)處停止第一任務(wù)流的執(zhí)行、在第一任務(wù) 流的執(zhí)行期間將來自代碼的第一部分內(nèi)的變量值輸出到開發(fā)者計(jì)算機(jī)系統(tǒng)、W及從開發(fā)者 計(jì)算機(jī)系統(tǒng)接收觸發(fā)代碼的第一部分中的各個(gè)表達(dá)式的處理發(fā)生的輸入。
[0008] 在一些實(shí)施例中,給出了用于調(diào)試代碼的系統(tǒng)。該系統(tǒng)可W包括網(wǎng)絡(luò)服務(wù)計(jì)算機(jī) 系統(tǒng),該網(wǎng)絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)包括一個(gè)或多個(gè)處理器;W及與該一個(gè)或多個(gè)處理器通信地 禪合并且能夠被其讀取的存儲(chǔ)器,并且該存儲(chǔ)器具有存儲(chǔ)在其中的處理器可讀指令。當(dāng)運(yùn) 些指令被該一個(gè)或多個(gè)處理器執(zhí)行時(shí),使得該一個(gè)或多個(gè)處理器將代碼編譯為已編譯代 碼,其中代碼的第一部分對(duì)應(yīng)于第一任務(wù)流并且代碼的第二部分對(duì)應(yīng)于第二任務(wù)流。指令 可W使得該一個(gè)或多個(gè)處理器經(jīng)由網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收對(duì)第一任務(wù)流的選擇,其 中該選擇指示第一任務(wù)流要被調(diào)試。指令可W使得該一個(gè)或多個(gè)處理器開始第一任務(wù)流的 執(zhí)行。指令可W使得該一個(gè)或多個(gè)處理器在網(wǎng)絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)正在執(zhí)行已編譯代碼的第 一任務(wù)流的同時(shí)經(jīng)由網(wǎng)絡(luò)向開發(fā)者計(jì)算機(jī)系統(tǒng)提供用于代碼的第一部分的調(diào)試功能。
[0009] 運(yùn)種系統(tǒng)的實(shí)施例可W包括W下特征中的一個(gè)或多個(gè)特征:指令可W使得該一個(gè) 或多個(gè)處理器在編譯代碼之前經(jīng)由網(wǎng)絡(luò)瀏覽器接口和網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收用于 編譯的代碼。指令可W使得該一個(gè)或多個(gè)處理器執(zhí)行第二任務(wù)流??蒞不經(jīng)由網(wǎng)絡(luò)從開發(fā) 者計(jì)算機(jī)系統(tǒng)接收到用于調(diào)試第二任務(wù)流的選擇??蒞不向開發(fā)者計(jì)算機(jī)系統(tǒng)提供與代碼 的第二部分相關(guān)聯(lián)的調(diào)試功能。指令可W使得該一個(gè)或多個(gè)處理器經(jīng)由網(wǎng)絡(luò)瀏覽器向開發(fā) 者計(jì)算機(jī)系統(tǒng)提供允許在多個(gè)任務(wù)流中進(jìn)行選擇的接口,該多個(gè)任務(wù)流包括第一任務(wù)流和 第二任務(wù)流。指令可W使得該一個(gè)或多個(gè)處理器在第一任務(wù)流的執(zhí)行期間從開發(fā)者計(jì)算機(jī) 系統(tǒng)接收對(duì)第二任務(wù)流的選擇。指令可W使得該一個(gè)或多個(gè)處理器開始第二任務(wù)流的執(zhí) 行。指令可W使得該一個(gè)或多個(gè)處理器在計(jì)算機(jī)系統(tǒng)正在執(zhí)行已編譯代碼的第二任務(wù)流的 同時(shí)經(jīng)由網(wǎng)絡(luò)向開發(fā)者計(jì)算機(jī)系統(tǒng)提供用于代碼的第二部分的調(diào)試功能。第一任務(wù)流的執(zhí) 行可W通過由計(jì)算機(jī)系統(tǒng)執(zhí)行的虛擬機(jī)來執(zhí)行,該虛擬機(jī)將已編譯代碼作為運(yùn)行時(shí)線程執(zhí) 行。指令可W使得該一個(gè)或多個(gè)處理器在執(zhí)行第一任務(wù)流的同時(shí)通過虛擬機(jī)執(zhí)行第二運(yùn)行 時(shí)線程,其中第二運(yùn)行時(shí)線程不具有提供給任何用戶的調(diào)試功能。在被執(zhí)行時(shí)使得該一個(gè) 或多個(gè)處理器將代碼編譯為已編譯代碼的處理器可讀指令可W包括運(yùn)樣的處理器可讀指 令:該處理器可讀指令在被執(zhí)行時(shí),使得該一個(gè)或多個(gè)處理器在編譯期間修改代碼的第一 部分和代碼的第二部分,W包括附加代碼,其中該附加代碼提供調(diào)試功能。調(diào)試功能包括選 自包括W下的組中的一個(gè)或多個(gè)特征:在開發(fā)者計(jì)算機(jī)系統(tǒng)處的代碼的第一部分內(nèi)的斷點(diǎn) 處停止第一任務(wù)流的執(zhí)行、在第一任務(wù)流的執(zhí)行期間將來自代碼的第一部分內(nèi)的變量值輸 出到開發(fā)者計(jì)算機(jī)系統(tǒng)、W及從開發(fā)者計(jì)算機(jī)系統(tǒng)接收觸發(fā)代碼的第一部分中的各個(gè)表達(dá) 式的處理發(fā)生的輸入。
[0010] 在一些實(shí)施例中,給出了用于調(diào)試代碼的非臨時(shí)性處理器可讀介質(zhì)。指令可W被 配置為使得該一個(gè)或多個(gè)處理器將代碼編譯為已編譯代碼,其中代碼的第一部分對(duì)應(yīng)于第 一任務(wù)流并且代碼的第二部分對(duì)應(yīng)于第二任務(wù)流。指令可W被配置為使得該一個(gè)或多個(gè)處 理器經(jīng)由網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收對(duì)第一任務(wù)流的選擇,其中該選擇指示第一任務(wù)流 要被調(diào)試。指令可W被配置為使得該一個(gè)或多個(gè)處理器開始第一任務(wù)流的執(zhí)行。指令可W 被配置為使得該一個(gè)或多個(gè)處理器在執(zhí)行已編譯代碼的第一任務(wù)流的同時(shí)經(jīng)由網(wǎng)絡(luò)向開 發(fā)者計(jì)算機(jī)系統(tǒng)提供用于代碼的第一部分的調(diào)試功能。在一些實(shí)施例中,指令可W被配置 為使得該一個(gè)或多個(gè)處理器在編譯代碼之前經(jīng)由網(wǎng)絡(luò)瀏覽器接口和網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī) 系統(tǒng)接收用于編譯的代碼,其中計(jì)算機(jī)系統(tǒng)是為多個(gè)開發(fā)者計(jì)算機(jī)系統(tǒng)提供編譯服務(wù)的網(wǎng) 絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)。
[0011] 在一些實(shí)施例中,給出了用于調(diào)試代碼的系統(tǒng)。該系統(tǒng)可W包括網(wǎng)絡(luò)服務(wù)計(jì)算機(jī) 系統(tǒng)。網(wǎng)絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)還可W包括編譯器,該編譯器被配置為將代碼編譯為已編譯代 碼,其中代碼的第一部分對(duì)應(yīng)于第一任務(wù)流并且代碼的第二部分對(duì)應(yīng)于第二任務(wù)流;選擇 單元,被配置為經(jīng)由網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收對(duì)第一任務(wù)流或第二任務(wù)流的選擇,其 中該選擇指示第一任務(wù)流或第二任務(wù)流要被調(diào)試;第一執(zhí)行單元,被配置為當(dāng)?shù)谝蝗蝿?wù)流 被選擇時(shí)開始第一任務(wù)流的執(zhí)行;W及第一調(diào)試功能單元,被配置為在第一執(zhí)行單元正在 執(zhí)行已編譯代碼的第一任務(wù)流的同時(shí)經(jīng)由網(wǎng)絡(luò)向開發(fā)者計(jì)算機(jī)系統(tǒng)提供用于代碼的第一 部分的調(diào)試功能。在例子中,網(wǎng)絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)還可W包括代碼接收單元,該代碼接收單 元被配置為在編譯代碼之前經(jīng)由網(wǎng)絡(luò)瀏覽器接口和網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收用于編 譯的代碼。在例子中,網(wǎng)絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)還可W包括第二執(zhí)行單元,該第二執(zhí)行單元被配 置為執(zhí)行第二任務(wù)流,其中未經(jīng)由網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收到用于第二任務(wù)流的調(diào)試 的選擇,并且其中與代碼的第二部分相關(guān)聯(lián)的調(diào)試功能不被提供給開發(fā)者計(jì)算機(jī)系統(tǒng)。在 例子中,網(wǎng)絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)還可W包括接口提供單元,該接口提供單元被配置為經(jīng)由網(wǎng) 絡(luò)瀏覽器向開發(fā)者計(jì)算機(jī)系統(tǒng)提供允許在多個(gè)任務(wù)流中進(jìn)行選擇的接口,該多個(gè)任務(wù)流包 括第一任務(wù)流和第二任務(wù)流。在例子中,網(wǎng)絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)還可W包括第=執(zhí)行單元,該 第=執(zhí)行單元被配置為當(dāng)選擇單元在第一任務(wù)流的執(zhí)行期間從開發(fā)者計(jì)算機(jī)系統(tǒng)接收到 對(duì)第二任務(wù)流的選擇時(shí),開始第二任務(wù)流的執(zhí)行;W及第二調(diào)試功能單元,第二調(diào)試功能單 元被配置為:在第=執(zhí)行單元正在執(zhí)行已編譯代碼的第二任務(wù)流的同時(shí),經(jīng)由網(wǎng)絡(luò)向開發(fā) 者計(jì)算機(jī)系統(tǒng)提供用于代碼的第二部分的調(diào)試功能。在例子中,第一執(zhí)行單元是由計(jì)算機(jī) 系統(tǒng)執(zhí)行的虛擬機(jī),該虛擬機(jī)將已編譯代碼作為運(yùn)行時(shí)線程執(zhí)行。在例子中,在執(zhí)行第一任 務(wù)流的同時(shí),虛擬機(jī)執(zhí)行第二運(yùn)行時(shí)線程,其中第二運(yùn)行時(shí)線程不具有提供給任何用戶的 調(diào)試功能。在例子中,編譯器還可W包括代碼修改單元,該代碼修改單元被配置為在編譯期 間修改代碼的第一部分和代碼的第二部分,W包括附加代碼,其中附加代碼提供調(diào)試功能。 在例子中,第一調(diào)試功能單元和第二調(diào)試功能單元分別包括:停止單元,該停止單元被配置 為在開發(fā)者計(jì)算機(jī)系統(tǒng)處的代碼的第一部分和第二部分內(nèi)的斷點(diǎn)處停止第一任務(wù)流和第 二任務(wù)流的執(zhí)行;輸出單元,該輸出單元被配置為在第一任務(wù)流和第二任務(wù)流的執(zhí)行期間 將來自代碼的第一部分和第二部分內(nèi)的變量值輸出到開發(fā)者計(jì)算機(jī)系統(tǒng);W及輸入單元, 該輸入單元被配置為從開發(fā)者計(jì)算機(jī)系統(tǒng)接收觸發(fā)代碼的第一部分和第二部分中的各個(gè) 表達(dá)式的處理發(fā)生的輸入。
[0012] 在一些實(shí)施例中,給出了用于調(diào)試代碼的裝置。該裝置可W包括:用于通過計(jì)算機(jī) 系統(tǒng)將代碼編譯為已編譯代碼的元件,其中代碼的第一部分對(duì)應(yīng)于第一任務(wù)流并且代碼的 第二部分對(duì)應(yīng)于第二任務(wù)流;用于通過計(jì)算機(jī)系統(tǒng)經(jīng)由網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收對(duì)第 一任務(wù)流的選擇的元件,其中該選擇指示第一任務(wù)流要被調(diào)試;用于通過計(jì)算機(jī)系統(tǒng)開始 第一任務(wù)流的執(zhí)行的元件;W及用于在計(jì)算機(jī)系統(tǒng)正在執(zhí)行已編譯代碼的第一任務(wù)流的同 時(shí)通過計(jì)算機(jī)系統(tǒng)經(jīng)由網(wǎng)絡(luò)向開發(fā)者計(jì)算機(jī)系統(tǒng)提供用于代碼的第一部分的調(diào)試功能的 元件。在例子中,該裝置還可W包括:用于在編譯代碼之前通過計(jì)算機(jī)系統(tǒng)經(jīng)由網(wǎng)絡(luò)瀏覽器 接口和網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收用于編譯的代碼的元件,其中該計(jì)算機(jī)系統(tǒng)是為多個(gè) 開發(fā)者計(jì)算機(jī)系統(tǒng)提供編譯服務(wù)的網(wǎng)絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)。在例子中,該裝置還可W包括:用 于通過計(jì)算機(jī)系統(tǒng)執(zhí)行第二任務(wù)流的元件,其中:未經(jīng)由網(wǎng)絡(luò)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收到 用于第二任務(wù)流的調(diào)試的選擇,并且不向開發(fā)者計(jì)算機(jī)系統(tǒng)提供與代碼的第二部分相關(guān)聯(lián) 的調(diào)試功能。在例子中,該裝置還可W包括:用于通過計(jì)算機(jī)系統(tǒng)經(jīng)由網(wǎng)絡(luò)瀏覽器向開發(fā)者 計(jì)算機(jī)系統(tǒng)提供允許在多個(gè)任務(wù)流中進(jìn)行選擇的接口的元件,該多個(gè)任務(wù)流包括第一任務(wù) 流和第二任務(wù)流。在例子中,該裝置還可W包括:用于在第一任務(wù)流的執(zhí)行期間通過計(jì)算機(jī) 系統(tǒng)從開發(fā)者計(jì)算機(jī)系統(tǒng)接收對(duì)第二任務(wù)流的選擇的元件;用于通過計(jì)算機(jī)系統(tǒng)開始第二 任務(wù)流的執(zhí)行的元件;W及用于在計(jì)算機(jī)系統(tǒng)正在執(zhí)行已編譯代碼的第二任務(wù)流的同時(shí)通 過計(jì)算機(jī)系統(tǒng)經(jīng)由網(wǎng)絡(luò)向開發(fā)者計(jì)算機(jī)系統(tǒng)提供用于代碼的第二部分的調(diào)試功能的元件。 在例子中,用于通過計(jì)算機(jī)系統(tǒng)執(zhí)行第一任務(wù)流的元件是由計(jì)算機(jī)系統(tǒng)執(zhí)行的虛擬機(jī),該 虛擬機(jī)將已編譯代碼作為運(yùn)行時(shí)線程執(zhí)行。在例子中,該裝置還可W包括:用于在執(zhí)行第一 任務(wù)流的同時(shí)通過由計(jì)算機(jī)系統(tǒng)執(zhí)行的虛擬機(jī)執(zhí)行第二運(yùn)行時(shí)線程的元件,其中第二運(yùn)行 時(shí)線程不具有提供給任何用戶的調(diào)試功能。在例子中,用于將代碼編譯為已編譯代碼的元 件還可W包括:用于在編譯期間修改代碼的第一部分和代碼的第二部分W包括附加代碼的 元件,其中附加代碼提供調(diào)試功能。在例子中,用于為代碼的第一部分提供調(diào)試功能的元件 還可W包括:用于在開發(fā)者計(jì)算機(jī)系統(tǒng)處的代碼的第一部分內(nèi)的斷點(diǎn)處停止第一任務(wù)流的 執(zhí)行的元件、用于在第一任務(wù)流的執(zhí)行期間將來自代碼的第一部分內(nèi)的變量值輸出到開發(fā) 者計(jì)算機(jī)系統(tǒng)的元件、W及用于從開發(fā)者計(jì)算機(jī)系統(tǒng)接收觸發(fā)代碼的第一部分中的各個(gè)表 達(dá)式的處理發(fā)生的輸入的元件。
【附圖說明】
[0013] 對(duì)各種實(shí)施例的性質(zhì)和優(yōu)點(diǎn)的進(jìn)一步理解可W通過參考W下附圖來實(shí)現(xiàn)。在附圖 中,類似的部件或特征可W具有相同的附圖標(biāo)記。此外,相同類型的各種部件可W通過在附 圖標(biāo)記后面跟著的連接號(hào)W及在相似部件中進(jìn)行區(qū)分的第二標(biāo)記加 W區(qū)別。如果在說明書 中只使用了第一附圖標(biāo)記,那么該描述適用于具有相同第一附圖標(biāo)記的類似部件中的任何 一個(gè)部件,而與第二附圖標(biāo)記無關(guān)。
[0014] 圖1示出了被配置為同時(shí)執(zhí)行一個(gè)或多個(gè)運(yùn)行時(shí)線程和一個(gè)或多個(gè)邏輯桐察 (logic insi曲t)線程的系統(tǒng)的實(shí)施例。
[0015] 圖2示出了被配置為編譯和執(zhí)行邏輯桐察注入代碼從而使得只與被選的任務(wù)流相 關(guān)聯(lián)的調(diào)試功能對(duì)開發(fā)者可用的系統(tǒng)的實(shí)施例。
[0016] 圖3示出了被配置用于針對(duì)任務(wù)流的調(diào)試的系統(tǒng)的實(shí)施例的框圖。
[0017] 圖4示出了用于針對(duì)任務(wù)流的調(diào)試的方法的實(shí)施例。
[0018] 圖5示出了用于針對(duì)任務(wù)流的調(diào)試的方法的另一種實(shí)施例。
[0019] 圖6示出了允許使用遠(yuǎn)程開發(fā)者計(jì)算機(jī)系統(tǒng)的分布式系統(tǒng)的實(shí)施例。
[0020] 圖7示出了服務(wù)可W通過其來作為云服務(wù)被提供的系統(tǒng)環(huán)境的實(shí)施例的框圖。
[0021] 圖8示出了可W用來實(shí)現(xiàn)本文詳細(xì)描述的各種實(shí)施例的計(jì)算機(jī)系統(tǒng)的實(shí)施例。
[0022] 圖9示出了根據(jù)本文詳細(xì)描述的原理進(jìn)行配置的用于調(diào)試代碼的系統(tǒng)的實(shí)施例的 功能框圖。
【具體實(shí)施方式】
[0023] 可W使用提供網(wǎng)絡(luò)服務(wù)的計(jì)算機(jī)系統(tǒng)(例如,網(wǎng)絡(luò)服務(wù)器)來為一個(gè)或多個(gè)用戶同 時(shí)編譯和執(zhí)行代碼,諸如業(yè)務(wù)邏輯代碼。運(yùn)種布置對(duì)用戶來說會(huì)具有顯著的優(yōu)點(diǎn)一一由于 正在被用戶使用的本地設(shè)備不執(zhí)行代碼的編譯或執(zhí)行,因此在本地設(shè)備處可W使用和/或 需要較少的處理能力。通過網(wǎng)絡(luò)服務(wù)編譯和執(zhí)行的代碼可W被稱為注入代碼。運(yùn)種注入代 碼是從遠(yuǎn)程計(jì)算機(jī)系統(tǒng)被提供用于編譯和/或執(zhí)行的。編寫或編輯代碼的開發(fā)者可W使用 本地計(jì)算機(jī)系統(tǒng)來查看和編輯代碼,但是可W將代碼傳遞到網(wǎng)絡(luò)服務(wù)用于編譯和執(zhí)行。
[0024] 可能正在經(jīng)由網(wǎng)絡(luò)連接從遠(yuǎn)程計(jì)算設(shè)備訪問網(wǎng)絡(luò)服務(wù)的一些用戶可能具有被網(wǎng) 絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)執(zhí)行的運(yùn)行時(shí)線程。運(yùn)種運(yùn)行時(shí)線程可W是正在被不帶調(diào)試功能地執(zhí)行 的已編譯注入代碼,諸如已編譯業(yè)務(wù)邏輯代碼。因此,正在被網(wǎng)絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)執(zhí)行的運(yùn) 行時(shí)線程可W不包含或強(qiáng)制執(zhí)行斷點(diǎn)、可W不停止并等待輸入來繼續(xù)執(zhí)行代碼中的每個(gè)表 達(dá)式、并且可W不輸出在注入代碼內(nèi)出現(xiàn)的各種變量的值。網(wǎng)絡(luò)服務(wù)的不同用戶可W與不 同的運(yùn)行時(shí)線程相關(guān)聯(lián)。正在為不同用戶執(zhí)行的運(yùn)行時(shí)線程可W對(duì)應(yīng)于已編譯代碼的相同 或不同片段(例如,代碼的特定已編譯片段可W被執(zhí)行為用于多個(gè)用戶的多個(gè)線程)。因此, 經(jīng)由網(wǎng)絡(luò)(例如,因特網(wǎng))訪問網(wǎng)絡(luò)服務(wù)的用戶可W使網(wǎng)絡(luò)服務(wù)執(zhí)行運(yùn)行時(shí)線程,而經(jīng)由網(wǎng) 絡(luò)訪問網(wǎng)絡(luò)服務(wù)的另一個(gè)用戶可W使網(wǎng)絡(luò)服務(wù)執(zhí)行與第一運(yùn)行時(shí)線程無關(guān)的第二運(yùn)行時(shí) 線程。
[0025] 運(yùn)些運(yùn)行時(shí)線程中的每個(gè)運(yùn)行時(shí)線程可W被網(wǎng)絡(luò)服務(wù)計(jì)算機(jī)系統(tǒng)的同一虛擬機(jī) 執(zhí)行。運(yùn)種虛擬機(jī)可W被配置為W特定的模式獨(dú)占地運(yùn)行。例如,運(yùn)個(gè)虛擬機(jī)可W被配置為 W調(diào)試模式或者W運(yùn)行時(shí)模式運(yùn)行。運(yùn)些模式可W是獨(dú)占的;正在被虛擬機(jī)執(zhí)行的所有線 程可能需要W調(diào)試模式被執(zhí)行或者正在被虛擬機(jī)執(zhí)行的所有線程可能需要W運(yùn)行時(shí)模式 被執(zhí)行。
[0026] 如果特定用戶(例如,業(yè)務(wù)邏輯開發(fā)者)希望調(diào)試代碼,諸如開發(fā)者已編寫或修改 的業(yè)務(wù)邏輯代碼,那么調(diào)試模式可能是開發(fā)者所希望的。調(diào)試可W允許開發(fā)者做W下調(diào)試 活動(dòng)中的一種或多種調(diào)試活動(dòng):在注入代碼中設(shè)置斷點(diǎn),在該點(diǎn)處業(yè)務(wù)邏輯的執(zhí)行暫停直 到開發(fā)者指示執(zhí)行要繼續(xù);在逐個(gè)表達(dá)式的基礎(chǔ)上單步執(zhí)行注入代碼;W及在已編譯注入 代碼的執(zhí)行期間查看和/或編輯變量的值。
[0027] 此外,應(yīng)該理解,正在被開發(fā)者調(diào)試的代碼可能是復(fù)雜的、具有一個(gè)或多個(gè)子部 分。在開發(fā)者可能希望調(diào)試注入代碼的一部分的同時(shí),開發(fā)者可能希望注入代碼的另一部 分不帶調(diào)試功能地執(zhí)行。運(yùn)種布置可W允許開發(fā)者將其調(diào)試針對(duì)注入代碼的特定部分,同 時(shí)允許注入代碼的剩余部分在不向開發(fā)者提供調(diào)試功能的情況下執(zhí)行。
[0028] 如果虛擬機(jī)在調(diào)試模式下運(yùn)行,W允許一個(gè)或多個(gè)開發(fā)者調(diào)試代碼,那么對(duì)于網(wǎng) 絡(luò)服務(wù)器上的其他用戶的注入代碼的執(zhí)行可能受到影響并且被迫也在調(diào)試模式下運(yùn)行。因 此,可能希望使同一虛擬機(jī)執(zhí)行一個(gè)或多個(gè)線程,其中一些線程正在被并發(fā)調(diào)試而一個(gè)或 多個(gè)其它線程W運(yùn)行時(shí)模式(不帶調(diào)試功能地)運(yùn)行,W允許訪問網(wǎng)絡(luò)服務(wù)器的所有用戶都 使代碼W期望的模式被執(zhí)行。
[0029] 為了允許一個(gè)或多個(gè)開發(fā)者調(diào)試注入代碼而其它線程并發(fā)地W運(yùn)行時(shí)模式不帶 調(diào)試功能地被網(wǎng)絡(luò)服務(wù)執(zhí)行,網(wǎng)絡(luò)服務(wù)的虛擬機(jī)可W W運(yùn)行時(shí)模式獨(dú)占地運(yùn)行。當(dāng)希望被 調(diào)試的注入代碼被編譯時(shí),編譯器可W編輯正在被編譯的注入代碼W包括調(diào)試功能。一旦 被編譯,從注入代碼中創(chuàng)建的字節(jié)碼就可W被虛擬機(jī)作為運(yùn)行時(shí)來執(zhí)行。因此,從網(wǎng)絡(luò)服務(wù) 的虛擬機(jī)的角度看,基于已編譯注入代碼的線程作為運(yùn)行時(shí)被執(zhí)行;但是,從開發(fā)者的角度 看,該線程與假如虛擬機(jī)是在調(diào)試模式下相比具有相同或相似的調(diào)試功能。調(diào)試功能允許 注入代碼被調(diào)試,因?yàn)檫\(yùn)種調(diào)試功能是在編譯處理期間被添加到注入代碼中的。
[0030] 在開發(fā)者可能希望調(diào)試注入代碼的某些部分的同時(shí),開發(fā)者可能希望注入代碼的 其它部分在不向開發(fā)者提供調(diào)試功能的情況下被執(zhí)行。為注入代碼的不希望被調(diào)試的部分 啟用調(diào)試功能會(huì)分散、延遲和/或W其它方式負(fù)面地影響開發(fā)者調(diào)試代碼中該開發(fā)者希望 調(diào)試的該一個(gè)或多個(gè)部分的能力。
[0031] 注入代碼可W被各種任務(wù)流調(diào)用。"任務(wù)流"可W定義代碼的一個(gè)或多個(gè)部分或片 段,該代碼是與公共功能有關(guān)的一系列請(qǐng)求和/或代碼的部分。任務(wù)流定義一組活動(dòng),該組 活動(dòng)被按順序地一起執(zhí)行,W執(zhí)行應(yīng)用中的特定功能任務(wù)。活動(dòng)可W被定義W執(zhí)行整個(gè)應(yīng) 用代碼的一些子集,像顯示新的頁面、輸入應(yīng)用數(shù)據(jù)或者保存應(yīng)用數(shù)據(jù)。在從代碼編譯的網(wǎng) 絡(luò)應(yīng)用中,特定任務(wù)流的活動(dòng)可W通過源自用戶的瀏覽器的請(qǐng)求來激活。任務(wù)流可W激活 注入代碼的特定片段或部分。任務(wù)流可W激活注入代碼并且也可W激活靜態(tài)代碼。靜態(tài)代 碼可W指沒有被注入和/或不能被開發(fā)者編輯的代碼。運(yùn)種靜態(tài)代碼可W由原始應(yīng)用開發(fā) 者和/或應(yīng)用可W激活的其它服務(wù)的提供商來提供。任務(wù)流可W是預(yù)定義的(即不能被開發(fā) 者編輯)或者可W允許被開發(fā)者創(chuàng)