示,所提供的業(yè)務(wù)邏輯代碼可W被編譯為邏輯桐察注入代碼運行時,而不 是注入代碼運行時。已編譯的邏輯桐察注入代碼運行時可W包含提供調(diào)試功能的表達式, 但是已編譯的邏輯桐察注入代碼被虛擬機在運行時模式下執(zhí)行。因此,邏輯桐察注入代碼 運行時的調(diào)試功能屬性可W不需要虛擬機150W在調(diào)試模式下被操作。當(dāng)被編譯時,編譯器 160可W對從開發(fā)者計算機系統(tǒng)130-1接收到的注入代碼修改和/或添加表達式,W向操作 開發(fā)者計算機系統(tǒng)130-1的開發(fā)者提供調(diào)試功能。調(diào)試功能可W包括:在邏輯桐察線程180-1的每個由開發(fā)者編碼的表達式被執(zhí)行之前,等待來自邏輯桐察虛擬機化IVM)210的輸入、 允許在由開發(fā)者編碼的業(yè)務(wù)邏輯代碼內(nèi)或者要被逐個表達式地執(zhí)行的業(yè)務(wù)邏輯代碼內(nèi)設(shè) 置斷點、W及向開發(fā)者計算機系統(tǒng)130提供來自邏輯桐察線程180的表達式的變量值的指示 W供顯示給開發(fā)者。
[0061] 如果開發(fā)者已指示只對激活注入代碼的任務(wù)流的子集希望調(diào)試功能,則編譯器 160可W修改和/或插入在所有任務(wù)流中啟用調(diào)試功能的表達式。當(dāng)其中用戶不希望調(diào)試功 能的邏輯桐察注入代碼運行時的任務(wù)流正在被執(zhí)行時,網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)140可W簡單 地不向開發(fā)者提供調(diào)試功能。運種布置可W允許開發(fā)者在邏輯桐察注入代碼運行時的執(zhí)行 期間修改他對向哪些任務(wù)流提供調(diào)試功能的選擇。如果開發(fā)者已在注入代碼內(nèi)指定要被調(diào) 試的一個或多個特定的任務(wù)流,則調(diào)試功能可W被網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)忽略,除非被開發(fā) 者選擇用于調(diào)試的任務(wù)流之一正在被執(zhí)行。靜態(tài)代碼無論是否作為被選擇用于調(diào)試的任務(wù) 流的一部分被調(diào)用,都可能不具有為開發(fā)者提供的調(diào)試功能。
[0062] 基于由編譯器160在編譯期間對業(yè)務(wù)邏輯注入代碼做出的添加和/或修改,被(作 為字節(jié)碼)創(chuàng)建的邏輯桐察注入代碼運行時向開發(fā)者提供調(diào)試功能。但是,對于虛擬機,作 為邏輯桐察線程被執(zhí)行的邏輯桐察注入代碼是與在運行時模式下執(zhí)行的運行時線程170類 似的運行時。雖然邏輯桐察注入代碼運行時向開發(fā)者提供了調(diào)試功能,但是邏輯桐察注入 代碼運行時可W不由虛擬機在調(diào)試模式下運行。邏輯桐察線程180和運行時線程170可W被 同時執(zhí)行;虛擬機在運行時模式下為所有運些線程工作。此外,邏輯桐察線程的執(zhí)行不會與 其它運行時線程有任何不同地影響運行時線程170的執(zhí)行。類似地,運行時線程的執(zhí)行不會 與附加邏輯桐察線程的執(zhí)行有任何不同地影響邏輯桐察線程的執(zhí)行。在圖1中,示出了=個 邏輯桐察線程180-一運只是為了說明的目的。更少或附加的邏輯桐察線程可W被虛擬機 150執(zhí)行。
[0063] 如果開發(fā)者計算機系統(tǒng)130-1的開發(fā)者不提供經(jīng)由開發(fā)者計算機系統(tǒng)130-1提供 的注入業(yè)務(wù)邏輯代碼要被編譯用于調(diào)試的指示,則業(yè)務(wù)邏輯代碼可W被編譯為注入代碼運 行時,而不是邏輯桐察注入代碼。編譯器160可W被配置為同時為多個用戶/開發(fā)者編譯注 入代碼的多個片段。編譯器160可W在虛擬機150正在執(zhí)行一個或多個運行時線程170和一 個或多個邏輯桐察線程180的同時,將注入業(yè)務(wù)邏輯代碼編譯為注入代碼運行時和/或邏輯 桐察注入代碼運行時。在給定的時間,虛擬機150可能只在執(zhí)行運行時線程170或邏輯桐察 線程180之一。
[0064] 圖2示出了被配置為編譯和執(zhí)行邏輯桐察注入代碼W使得邏輯桐察注入代碼內(nèi)只 有一些任務(wù)流的執(zhí)行對開發(fā)者而言可用于調(diào)試的系統(tǒng)200的實施例。系統(tǒng)200可W表示與特 定開發(fā)者計算機系統(tǒng)130-1交互的網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)140的實施例。因此,至少在一些實 施例中,系統(tǒng)200是系統(tǒng)100的一部分。系統(tǒng)200可W包括:開發(fā)者計算機系統(tǒng)130-1、網(wǎng)絡(luò) 120-2、網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)140、虛擬機150、編譯器160、邏輯桐察線程180-1和邏輯桐察虛 擬機210。系統(tǒng)200可W附加地包括由開發(fā)者計算機系統(tǒng)130-1呈現(xiàn)的邏輯桐察用戶接口 220。
[0065] 當(dāng)開發(fā)者需要調(diào)試功能時,邏輯桐察虛擬機化IVM)210可W與特定開發(fā)者的會話 相關(guān)聯(lián)。"會話"可W指開發(fā)者計算機系統(tǒng)或用戶的網(wǎng)絡(luò)瀏覽器利用網(wǎng)絡(luò)服務(wù)計算機系統(tǒng) 140被打開的實例??蒞給每個HTTP會話分配標(biāo)識符,使得由網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)140從開 發(fā)者計算機系統(tǒng)130-1接收到的信息可W被應(yīng)用到在網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)140處的適當(dāng)?shù)?數(shù)據(jù)。在HTTP會話已被建立之后,可W將會話標(biāo)識符與開發(fā)者計算機系統(tǒng)130-1的每個響應(yīng) 一起發(fā)送到網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)140。
[0066] 因此,開發(fā)者計算機系統(tǒng)130-1與網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)140的HTTP會話與邏輯桐察 線程180-1和LIVM 210鏈接。LIVM 210可W用作邏輯桐察線程180-1和開發(fā)者計算機系統(tǒng) 130-1之間的中介。LIVM 210可W被網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)140、網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)140的虛 擬機150、被遠程計算機系統(tǒng)、或者被開發(fā)者計算機系統(tǒng)130-1執(zhí)行。可W通過網(wǎng)絡(luò)服務(wù)計算 機系統(tǒng)140為各種開發(fā)者計算機系統(tǒng)的每個會話執(zhí)行分開的LIVM 210。當(dāng)編譯器160編譯業(yè) 務(wù)邏輯代碼W創(chuàng)建邏輯桐察注入代碼運行時(其中邏輯桐察線程180-1是被執(zhí)行的實例) 時,附加的表達式可能已被添加和/或表達式可能已在注入代碼中被修改,使得在由開發(fā)者 編碼的每個表達式被執(zhí)行之前需要輸入。例如,在與注入代碼對應(yīng)的邏輯桐察線程180-1中 的每個表達式之后,在邏輯桐察線程180-1的下一個表達式執(zhí)行之前,可能需要從LIVM 210 接收到輸入?;陟o態(tài)代碼的表達式可W在不需要輸入的情況下繼續(xù)。LIVM 210可W用來 向邏輯桐察線程180提供運些輸入。通過在由開發(fā)者編碼的每個表達式被執(zhí)行之前需要輸 入的邏輯桐察線程180-1,開發(fā)者被允許在逐個表達式的基礎(chǔ)上單步執(zhí)行業(yè)務(wù)邏輯代碼、設(shè) 置斷點(和查看斷點處的代碼/變量的狀態(tài))、和/或查看和/或修改注入代碼內(nèi)的變量的值。
[0067] 由開發(fā)者選擇的斷點可W用來指示LIVM 210允許邏輯桐察線程180的繼續(xù)執(zhí)行, 直到在被選擇用于調(diào)試的任務(wù)流內(nèi)到達由開發(fā)者設(shè)置的斷點之一。因此,LIVM 210可W提 供邏輯桐察線程180-1輸入來允許邏輯桐察線程的每個表達式被執(zhí)行,直到到達被選擇用 于調(diào)試的任務(wù)流的代碼內(nèi)的斷點。運時,可能需要來自開發(fā)者的對LIVM210的輸入,LIVM 210又將指令傳送到虛擬機150, W使邏輯桐察線程180-1的執(zhí)行繼續(xù)。如果開發(fā)者希望在逐 個表達式的基礎(chǔ)上執(zhí)行業(yè)務(wù)邏輯代碼,則在每個表達式被執(zhí)行之后在被選擇用于調(diào)試的任 務(wù)流內(nèi)的邏輯桐察線程的下一個表達式被執(zhí)行之前,LIVM可W等待,直到從開發(fā)者接收到 輸入。被選任務(wù)流之外的表達式的執(zhí)行可W由LIVM導(dǎo)致執(zhí)行,而無需與開發(fā)者的交互。因 此,從LIVM 210的角度看,在邏輯桐察線程180-1的每個已執(zhí)行的表達式之后可能需要向虛 擬機150提供輸入W使執(zhí)行繼續(xù)。運個輸入是由LIVM 210自動提供給虛擬機150還是響應(yīng)于 經(jīng)由開發(fā)者計算機系統(tǒng)130-1接收到的開發(fā)者輸入可W基于是否已到達斷點或者開發(fā)者是 否請求了邏輯桐察線程的執(zhí)行在逐個表達式的基礎(chǔ)上單步進行。
[0068] LIVM 210可W包含任務(wù)流分析器212。任務(wù)流分析器212可W評估當(dāng)前正在邏輯桐 察線程180-1中被執(zhí)行的表達式(來自注入代碼)是否確實或者不對應(yīng)于由開發(fā)者選擇用于 調(diào)試的任務(wù)流。如果表達式是被選任務(wù)流的一部分,則調(diào)試功能經(jīng)由邏輯桐察用戶接口 220 被提供給開發(fā)者。如果當(dāng)前正在邏輯桐察線程180-1中被執(zhí)行的表達式不與被選任務(wù)流對 應(yīng),則任務(wù)流分析器212可W使得LIVM 210導(dǎo)致表達式的執(zhí)行繼續(xù),而無需經(jīng)由邏輯桐察用 戶接口 220向開發(fā)者提供調(diào)試功能。因此,在其中編譯器160已編譯邏輯桐察注入代碼W在 運行時模式下被執(zhí)行的同時具有調(diào)試功能的一些實施例中,LIVM 210只當(dāng)由用戶指示或W 其它方式選擇用于調(diào)試的任務(wù)流的表達式處于活動時,才向邏輯桐察用戶接口 220提供運 種調(diào)試功能。
[0069] 在邏輯桐察線程180-1的執(zhí)行期間,開發(fā)者能夠選擇和取消用于調(diào)試的邏輯桐察 注入代碼的一個或多個任務(wù)流,從而更改哪些表達式產(chǎn)生被提供給開發(fā)者的調(diào)試功能。如 果編譯器160在正在被編譯的注入代碼中添加和/或修改在注入代碼的所有任務(wù)流中都允 許調(diào)試功能的表達式,那么運種布置是可能的。當(dāng)非選擇的任務(wù)流正在被執(zhí)行時,LIVM 210 可W自動地(無需開發(fā)者輸入)向虛擬機150提供輸入,從而指示邏輯桐察線程180-1的執(zhí)行 應(yīng)該繼續(xù)。
[0070] LIVM 210也可W用來從邏輯桐察線程180接收變量值的變化。當(dāng)被選擇用于調(diào)試 的任務(wù)流正在被虛擬機150執(zhí)行時,可W使用運些變化來向開發(fā)者計算機系統(tǒng)130-1提供變 量值(例如,用于呈現(xiàn)給開發(fā)者)。邏輯桐察注入代碼運行時可能已被編譯器160編譯,使得 每次變量被創(chuàng)建或修改時,變量的值和變量的指示被輸出到LIVM 210。運種變量的值和變 量的指示可W被LIVM 210接收,并且當(dāng)如由任務(wù)流分析器212確定的、已被用戶選擇用于調(diào) 試的任務(wù)流正在使其表達式中的一個或多個表達式被執(zhí)行時,運種變量的值和變量的指示 可W用來經(jīng)由邏輯桐察用戶接口 220向開發(fā)者呈現(xiàn)變量的指示和變量值。開發(fā)者可W被允 許經(jīng)由邏輯桐察用戶接口 220修改變量值中的一個或多個變量值。如果未選擇的任務(wù)流是 活動的,則變量值可W不被LIVM 210輸出到邏輯桐察用戶接口220(但是,LIVM 210仍然可 W從虛擬機150接收它們,但是可W存儲、忽略或丟棄所接收到的值)。如果表達式是正在被 執(zhí)行的被選擇用于調(diào)試的任務(wù)流的一部分(但不是當(dāng)未選擇的任務(wù)流的表達式正在被虛擬 機150執(zhí)行時),LIVM 210可W向開發(fā)者指示當(dāng)前正在被執(zhí)行(或者將要被執(zhí)行)的邏輯桐察 線程的注入代碼中的當(dāng)前表達式。
[0071] 從LIVM 210的角度看,由邏輯桐察線程180-1執(zhí)行的所有任務(wù)流都可W被配置為 在代碼行執(zhí)行之后中斷并且輸出變量值。但是,LIVM 210的任務(wù)流分析器212可W基于經(jīng)由 邏輯桐察用戶接口 220的任務(wù)流選擇模塊225接收到的一個或多個被選任務(wù)流的指示確定 何時要由LIVM 210導(dǎo)致執(zhí)行被繼續(xù)W及何時調(diào)試功能要經(jīng)由邏輯桐察用戶接口 220被呈 現(xiàn)。
[0072] 可W使用邏輯桐察用戶接口化IUI)220經(jīng)由開發(fā)者計算機系統(tǒng)130-1從開發(fā)者接 收注入代碼。LIUI 220可W允許選擇將與代碼相關(guān)聯(lián)的適當(dāng)?shù)娜蝿?wù)流。LIUI 220可W是基 于網(wǎng)絡(luò)的接口并且可W經(jīng)由網(wǎng)絡(luò)瀏覽器來實現(xiàn)。例如,LIUI 220可W被呈現(xiàn)為網(wǎng)頁的一部 分,通過該網(wǎng)頁,用戶被允許直接輸入代碼(例如,作為文本)和/或選擇包含業(yè)務(wù)邏輯代碼 的文件W用于上傳(注入)到網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)HOW供編譯W及可能地供執(zhí)行。LIUI 220可W允許開發(fā)者指示希望業(yè)務(wù)邏輯代碼被編譯和執(zhí)行用于調(diào)試(作為邏輯桐察注入代 碼運行時)dLIUI 220可W允許用戶在邏輯桐察線程180正在被執(zhí)行的同時至少在注入代碼 上執(zhí)行調(diào)試功能。因此,由于運種調(diào)試發(fā)生在邏輯桐察線程180正在執(zhí)行時,因此運被稱為 實時調(diào)試。運種LIUI220可能被用來執(zhí)行的調(diào)試功能包括:設(shè)置斷點(和查看在運些斷點處 的變量的狀態(tài))、在逐個表達式的基礎(chǔ)上單步執(zhí)行業(yè)務(wù)邏輯代碼、和/或查看(和/或編輯)變 量的值。經(jīng)由與網(wǎng)絡(luò)服務(wù)計算機系統(tǒng)140的會話,可W使用邏輯桐察用戶接口 220來發(fā)送來 自開發(fā)者的輸入,W經(jīng)由LIVM 210控制邏輯桐察線程180的執(zhí)行和接收關(guān)于邏輯桐察線程 180的執(zhí)行的信息,W被輸出到LIUI 220用于呈現(xiàn)給開發(fā)者。
[0073] LIUI 220可W包括任務(wù)流選擇模塊225dLIUI 220可W從LIVM210接收由正在被執(zhí) 行的應(yīng)用定義的各種任務(wù)流的指示。任務(wù)流選擇模塊225可W允許開發(fā)者選擇開發(fā)者希望 調(diào)試的一個或多個任務(wù)流。任務(wù)流選擇模塊225可W允許開發(fā)者指示開發(fā)者不希望調(diào)試的 一個或多個任務(wù)流(諸如通過不選擇任務(wù)流)。被開發(fā)者選擇用于調(diào)試的任務(wù)流的指示可W 被提供給LIVM 210,使得只給開發(fā)者提供用于作為由開發(fā)者選擇的任務(wù)流的一部分的表達 式的調(diào)試功能(例如,變量值、執(zhí)行中的中斷KLIVM 210可W使執(zhí)行繼續(xù),而無需用于其它 任務(wù)流的調(diào)試功能。在邏輯桐察線程180-1的執(zhí)行期間,開發(fā)者可W經(jīng)由任務(wù)流選擇模塊 225調(diào)整哪些任務(wù)流被選擇。運種對任務(wù)流的選擇的修改可W被傳達給LIVM 210,LIVM 210 將進而修改用于哪些任務(wù)流的調(diào)試功能要經(jīng)由LIUI 220呈現(xiàn)給開發(fā)者。例如,開發(fā)者可W 啟用特定任務(wù)流的調(diào)試,然后在將來的時間在任務(wù)流正在運行的同時停用運種調(diào)試。運種 選擇和取消影響用于哪些任務(wù)流的調(diào)試功能要被LIVM 210輸出到邏輯桐察用戶接口220。 在一些實施例中,使用任務(wù)流選擇模塊225來在邏輯桐察線程180-1的執(zhí)行之前選擇一個或 多個任務(wù)流。在一些實施例中,也可W在邏輯桐察線程180-1的執(zhí)行期間做出對任務(wù)流的選 擇。
[0074] 圖3示出了被配置用于針對任務(wù)流的調(diào)試的系統(tǒng)300的實施例的框圖。系統(tǒng)300表 示可W被用來創(chuàng)建邏輯桐察注入代碼運行時的各種硬件、固件和/或軟件模塊。所示出模塊 中的每個模塊,除非另外指出,否則可W分別是圖1和圖2的系統(tǒng)100和200的網(wǎng)絡(luò)服務(wù)計算 機系統(tǒng)140的一部分(或被其執(zhí)行)。因此,在至少一些實施例中,系統(tǒng)300可W是系統(tǒng)100和/ 或系統(tǒng)200的一部分。系統(tǒng)300包括各種模塊,其中每個模塊可W利用軟件、固件和/或硬件 來實現(xiàn)。部件包括:代碼源模塊310、預(yù)編譯模塊315、解析器模塊320、轉(zhuǎn)換引擎340、編譯器 160、虛擬機150和LIVM 210。應(yīng)當(dāng)理解,運樣的部件可W被劃分為更多數(shù)量的部件和/或被 組合為更少數(shù)量的部件。
[0075] 代碼源模塊310可W用來接收注入(業(yè)務(wù)邏輯)代碼。運種代碼可W W編程語言的 語法編寫,當(dāng)該語法被編譯時,可W在語法樹級別被編輯。例如,可W使用Java?.作為用于 業(yè)務(wù)邏輯代碼的編程語言。在一些實施例中,代碼源模塊310可W被配置為從遠程計算機系 統(tǒng)接收代碼,諸如經(jīng)由基于網(wǎng)絡(luò)的接口(例如,如在圖2中呈現(xiàn)的LIUI220)從用戶計算機系 統(tǒng)或開發(fā)者計算機系統(tǒng)提交的代碼。運種接收到的代碼可W被稱為"注入"代碼,因為它是 從遠程計算機系統(tǒng)接收W用于編譯和/或執(zhí)行的。代碼源模塊310可W用來訪問包含要被編 譯的代碼的文件。注入代碼可W被系統(tǒng)編譯和執(zhí)行,該系統(tǒng)同時編譯和執(zhí)行其它注入代碼。
[0076] 預(yù)編譯模塊315可W完成由代碼源模塊310接收的業(yè)務(wù)邏輯代碼的編譯過程的一 部分。在一些實施例中,預(yù)編譯模塊315可W在由代碼源模塊310接收的業(yè)務(wù)邏輯代碼中插 入一個或多個表達式。解析器模塊320可W解析包含表達式的業(yè)務(wù)邏輯代碼,W創(chuàng)建語法 樹。所創(chuàng)建的語法樹可W是抽象的語法樹。在運個時候,在一些編程語言中,能夠在字節(jié)碼 被編譯為邏輯桐察注入代碼運行時之前修改語法樹。
[0077] 轉(zhuǎn)換引擎340可W修改由解析器模塊320創(chuàng)建的語法樹。轉(zhuǎn)換引擎340可W在語法 樹中添加或修改表達式中的一些或全部表達式。每當(dāng)變量值被初始設(shè)置或修改時,語法樹 可W被修改,使得變量和變量值的指示被輸出到LIVM 210。相應(yīng)地,在執(zhí)行期間,LIVM 210 可W維護在注入業(yè)務(wù)邏輯代碼中出現(xiàn)的每個變量的當(dāng)前值。經(jīng)由推送或提取,開發(fā)者的 LIUI可W從LIVM 210接收被設(shè)置或修改的變量W及相關(guān)聯(lián)的值的指示??蒞添加表達式, 使得在業(yè)務(wù)邏輯代碼中出現(xiàn)的每個表達式被執(zhí)行之后,執(zhí)行被停止(例如,置于掛起或循環(huán) 模式),直到從LIVM 210接收到指示執(zhí)行要繼續(xù)到至少下一個表達式的指令。被執(zhí)行的或?qū)?要被執(zhí)行的表達式的指示可W被提供給LIVM210"LIVM 210進而可W向開發(fā)者的LIUI提供 哪個表達式剛才已被執(zhí)行或?qū)⒁粓?zhí)行的指示(從而允許用戶監(jiān)視注入代碼的執(zhí)行的流 程)。
[0078] 在一些實施例中,轉(zhuǎn)換引擎340修改所有的注入代碼W允許調(diào)試,而不管哪些任務(wù) 流被選擇。在其它實施例中,只有與要被調(diào)試的任務(wù)流相關(guān)聯(lián)的注入代碼的部分被轉(zhuǎn)換引 擎340修改。在運種實施例中,可能需要開發(fā)者在編譯之前指定希望哪一個或多個任務(wù)流要 被調(diào)試。在其中所有任務(wù)流被轉(zhuǎn)換引擎340修改的實施例中,開發(fā)者可W在執(zhí)行期間更改用 于哪些任務(wù)流的調(diào)試功能要經(jīng)由LIUI 220提供給開發(fā)者。
[0079] 編譯器160可W將經(jīng)修改的語法樹編譯為字節(jié)碼。運種字節(jié)碼被稱為邏輯桐察注 入代碼運行時,其將作為邏輯桐察線程被執(zhí)行。如被預(yù)編譯模塊315和轉(zhuǎn)換引擎340所修改 的,由代碼源模塊310接收的注入代碼可W被編譯器160編譯。運種邏輯桐察注入代碼運行 時被配置為由虛擬機在運行時模式下執(zhí)行。
[0080] 與LIVM 210通信的虛擬機150可W將由編譯器160編譯的字節(jié)碼作為邏輯桐察注 入代碼運行時執(zhí)行。對于被轉(zhuǎn)換引擎340修改的每個表達式,可W聯(lián)系LIVM來確定執(zhí)行是否 應(yīng)該繼續(xù)。因此,LIVM210監(jiān)視哪些任務(wù)流將要具有調(diào)試功能W及在哪些表達式處執(zhí)行應(yīng)該 被停止直到接收到開發(fā)者輸入(例如,在開發(fā)者設(shè)置的斷點處和/或如果開發(fā)者已請求在逐 個表達式的基礎(chǔ)上執(zhí)行)dLIVM 210也可W接收變量的值(諸如每次運種變量值可能被虛擬 機150設(shè)置或修改時)"LIVM 210也可W接收被執(zhí)行的或?qū)⒁粓?zhí)行的業(yè)務(wù)邏輯代碼的當(dāng)前 表達式的指示。運種信息可W被LIVM 210接收到。在字節(jié)碼被允許繼續(xù)之前,LIVM 210可W 請求來自開發(fā)者計算機系統(tǒng)的輸入和/或信息(諸如變量值)可W通過LIVM 210經(jīng)由LIUI被 輸出給開發(fā)者。
[0081] 如果邏輯桐察注入代碼運行時被編譯為使得調(diào)試功能存在于邏輯桐察注入代碼 的所有任務(wù)流中,則任務(wù)流分析器212可W監(jiān)視W確定邏輯桐察線程的哪個任務(wù)流的表達 式正在被執(zhí)行,W確定是否應(yīng)該使調(diào)試功能對開發(fā)者可用。如果正在被虛擬機150執(zhí)行的表 達式不與開發(fā)者指示為希望要被調(diào)試的任務(wù)流鏈接,則任務(wù)流分析器212可W使LIVM 210 向虛擬機150指示執(zhí)行應(yīng)該繼續(xù)。對于運個表達式?jīng)]有調(diào)試信息可W被提供給開發(fā)者。例 如,LIVM 210可W指導(dǎo)虛擬機150自動繼續(xù)執(zhí)行和/或變量值可W不被輸出到開發(fā)者計算機 系統(tǒng)。但是,當(dāng)任務(wù)流分析器212檢測到開發(fā)者指示要被調(diào)試的任務(wù)流的表達式正在被執(zhí)行 時,LIVM 210可W強制執(zhí)行調(diào)試功能,使得調(diào)試功能被提供給LIUI 220。運可W包括強制執(zhí) 行斷點、輸出變量值到開發(fā)者計算機系統(tǒng)、W及提供哪個表達式正在被執(zhí)行的指示。在邏輯 桐察線程內(nèi),可W識別各種任務(wù)流。任務(wù)流可W通過被開發(fā)者插入到代碼中W將代碼分組 為邏輯代碼分組的標(biāo)簽或其它標(biāo)識符來識別,該邏輯代碼分組諸如與特定任務(wù)的執(zhí)行相關(guān) 的邏輯代碼分組。
[0082] 可W使用圖1至圖3的系統(tǒng)100至300來執(zhí)行各種方法。圖4示出了用于特定于任務(wù) 流的調(diào)試的方法400的實施例。方法400可W分別由圖1 -3的系統(tǒng)100、系統(tǒng)200和/或系統(tǒng)300 來執(zhí)行。方法400也可W通過用于執(zhí)行運行時線程和編譯并執(zhí)行邏輯桐察注入代碼的一些 其它形式的系統(tǒng)來執(zhí)行??蒞使用諸如網(wǎng)絡(luò)服務(wù)器的一個或多個計算機系統(tǒng)來執(zhí)行方法 400。用于執(zhí)行方法400的元件包括一個或多個計算機系統(tǒng)和網(wǎng)絡(luò)。方法400的每個步驟可W 利用計算機系統(tǒng)來執(zhí)行,其中計算機系統(tǒng)可W包括彼此通信的一個或多個單獨的計算機, 諸如一個或多個網(wǎng)絡(luò)服務(wù)器。參考圖2和圖3,方法400的每個步驟可W通過網(wǎng)絡(luò)服務(wù)計算機 系統(tǒng)140來執(zhí)行。
[0083] 在步驟410,注