一種輕量級的在線調(diào)試php程序的方法
【專利摘要】本發(fā)明公開了一種輕量級的在線調(diào)試PHP程序的方法。該方法包括步驟:1.開發(fā)者使用鼠標(biāo)在代碼中劃取需要查看的變量,這些變量顯示在Debug控制臺中,便于開發(fā)者查看管理;2.開發(fā)者點擊調(diào)試按鈕,瀏覽器將項目路徑和劃取的變量發(fā)送到服務(wù)器;3.服務(wù)器在文件中找到這些變量,并在其下一行插入輸出語句以將變量輸出到日志文件中,再將修改后的代碼進(jìn)行部署;4.開發(fā)者運行應(yīng)用時,變量信息被寫入日志文件中,包含變量名稱、變量值、變量類型和變量位置等;5.開發(fā)者點擊查看變量,向服務(wù)器發(fā)送指令,服務(wù)器獲日志文件,返回變量信息到瀏覽器端并顯示。采用本發(fā)明的方法,可以滿足了開發(fā)者進(jìn)行程序調(diào)試時的基本需求,即查看程序運行時變量的相關(guān)信息,同時大大減輕了服務(wù)器的負(fù)擔(dān)。
【專利說明】一種輕量級的在線調(diào)試PHP程序的方法
【技術(shù)領(lǐng)域】:
[0001]本發(fā)明是一種輕量級的在線調(diào)試PHP程序的方法,應(yīng)用于在線集成開發(fā)環(huán)境中,屬于軟件【技術(shù)領(lǐng)域】。
【背景技術(shù)】:
[0002]集成開發(fā)環(huán)境(IntegratedDevelopment Environment,簡稱 IDE)是一種輔助程序開發(fā)人員開發(fā)軟件的應(yīng)用軟件。在線集成開發(fā)環(huán)境是一種基于云的IDE。開發(fā)者通過瀏覽器進(jìn)行應(yīng)用軟件的開發(fā),程序在云端運行或部署。
[0003]Eclipse等本地集成開發(fā)環(huán)境調(diào)試代碼時采用的方式是單步調(diào)試,即在需要調(diào)試的代碼段設(shè)置斷點,一步一步跟蹤程序執(zhí)行的流程,根據(jù)變量的值,找到錯誤的原因。但對于在線集成開發(fā)環(huán)境,實現(xiàn)單步調(diào)試是一個很大的挑戰(zhàn),因為首先要考慮同步問題,保證服務(wù)器端的運行數(shù)據(jù)和瀏覽器端的顯示內(nèi)容完全一致;其次,對于每個調(diào)試中的項目,服務(wù)器端都需要始終保持其調(diào)試進(jìn)程或線程處于運行中,等待用戶發(fā)來的指令,因而大大增加了服務(wù)器的負(fù)擔(dān)。
[0004]另外,在最新的TIOBE編程語言排行榜中,PHP語言位居第六(前五名為Java、C及C的擴(kuò)展語言),其在Web應(yīng)用開發(fā)中具有重要的地位。而PHP語言是一種動態(tài)語言,其具有較大的靈活性,在線環(huán)境下并不能直接獲取到變量的信息。
[0005]基于以上原因,目前已有的在線集成開發(fā)環(huán)境對PHP程序的調(diào)試基本無法提供良好的支持。
【發(fā)明內(nèi)容】
:
[0006]針對上述問題,本發(fā)明提出了一種輕量級的在線調(diào)試PHP程序的方法。這種方法的提出基于對軟件開發(fā)者編程習(xí)慣的觀察,在編寫程序時,如果出現(xiàn)問題,一般開發(fā)者會在代碼中插入echo語句從而輸出關(guān)鍵變量的值,判斷應(yīng)用運行到該處時是否出錯。
[0007]這種新的調(diào)試方法主要思想即是將開發(fā)者的這種手動輸入echo語句的過程自動化?;玖鞒倘缦?
[0008]I)開發(fā)者使用鼠標(biāo)在代碼中劃取需要查看的PHP變量,這些變量顯示在Debug控制臺中,便于開發(fā)者查看管理;
[0009]2)開發(fā)者點擊調(diào)試按鈕,瀏覽器將項目路徑和劃取的變量發(fā)送到服務(wù)器;
[0010]3)服務(wù)器在文件中找到這些變量,并在其下一行插入eirorjog語句以將變量輸出到日志文件中,再將修改后的代碼進(jìn)行部署;
[0011]4)開發(fā)者運行應(yīng)用時,變量信息被寫入日志文件中,包含變量名稱、變量值、變量類型和變量位置等;
[0012]5)開發(fā)者點擊查看變量,向服務(wù)器發(fā)送指令,服務(wù)器獲取日志文件,返回變量信息到瀏覽器端并顯示。
[0013]上述的在線集成開發(fā)環(huán)境的輕量級調(diào)試方法,所述步驟3)中,需要查看的變量位于普通語句,則在該語句之后插入輸出語句。
[0014]上述的在線集成開發(fā)環(huán)境的輕量級調(diào)試方法,所述步驟3)中,需要查看的變量位于條件語句,首先檢查該語句的條件體是否被大括號包圍,否則應(yīng)添加大括號,然后在大括號內(nèi)插入輸出語句。
[0015]上述的在線集成開發(fā)環(huán)境的輕量級調(diào)試方法,所述步驟3)中,需要查看的變量位于循環(huán)語句,首先檢查該語句的條件體是否被大括號包圍,否則應(yīng)添加大括號,然后在大括號內(nèi)插入輸出語句,同時若用戶提出變量輸出次數(shù)的要求,則應(yīng)控制輸出語句的執(zhí)行次數(shù)。
[0016]上述的在線集成開發(fā)環(huán)境的輕量級調(diào)試方法,所述步驟3)中,需要查看的變量位于返回語句,則將返回的表達(dá)式賦值給臨時變量,然后插入輸出語句,最后返回臨時變量。
[0017]本發(fā)明的技術(shù)效果在于:本發(fā)明的方法滿足了開發(fā)者進(jìn)行PHP程序調(diào)試時的基本需求,即查看程序運行時變量的相關(guān)信息,同時相對于傳統(tǒng)的單步調(diào)試,該輕量級方法大大減輕了服務(wù)器的負(fù)擔(dān),使得服務(wù)器不需要保持多個活動進(jìn)程以等待每個用戶的單步請求,符合在線集成開發(fā)環(huán)境快速響應(yīng)和降低服務(wù)器資源消耗的要求。
【專利附圖】
【附圖說明】
[0018]圖1表示在本發(fā)明中輕量級調(diào)試方法流程圖。
【具體實施方式】:
[0019]本發(fā)明提出了輕量級的在線調(diào)試PHP程序的方法,并進(jìn)行了具體實現(xiàn)。
[0020]作為在線集成開發(fā)環(huán)境的一個模塊,輕量級調(diào)試的整體實現(xiàn)可采用三層架構(gòu)設(shè)計,即表現(xiàn)層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層。
[0021]表現(xiàn)層顯示用戶界面,顯示代碼、控制臺,進(jìn)行用戶交互,以及調(diào)用后臺調(diào)試服務(wù)時向服務(wù)器端通過AJAX發(fā)送請求和獲取響應(yīng)。
[0022]業(yè)務(wù)邏輯層將調(diào)試功能封裝為獨立的服務(wù),通過標(biāo)準(zhǔn)的HTTP GET/POST方法訪問,該服務(wù)當(dāng)中又細(xì)化為不同的操作,包括代碼插裝和變量選擇,用戶向服務(wù)發(fā)送請求可進(jìn)行其中的一項操作。
[0023]數(shù)據(jù)訪問層主要是在插裝代碼時對文件的操作,包括原文件備份、修改文件內(nèi)容和恢復(fù)文件。
[0024]以上三層有機(jī)結(jié)合在一起,業(yè)務(wù)邏輯層使用數(shù)據(jù)訪問層實現(xiàn)文件操作,表現(xiàn)層通過調(diào)用業(yè)務(wù)邏輯層的服務(wù)將結(jié)果呈現(xiàn)給用戶。這樣的架構(gòu)使得該輕量級調(diào)試方法的實現(xiàn)層次更加清晰,利于代碼的復(fù)用和后期維護(hù)。
[0025]完成總體結(jié)構(gòu)設(shè)計之后,以下對三個主要步驟進(jìn)行詳細(xì)實現(xiàn)說明。
[0026]1、變量選擇
[0027]在瀏覽器端當(dāng)用戶使用鼠標(biāo)劃取或雙擊選擇了編輯區(qū)中的詞時,編輯區(qū)的選中詞條發(fā)生變化,該事件觸發(fā)函數(shù)判斷該詞是否以“$”開頭,如果是則該詞為PHP變量,顯示浮動Watch按鈕,其定位為當(dāng)前光標(biāo)之后,具體坐標(biāo)值由編輯區(qū)、代碼標(biāo)簽頁、光標(biāo)所在行列和滾動條位置綜合計算得出。
[0028]用戶點擊Watch按鈕,觸發(fā)變量選擇函數(shù),獲取當(dāng)前文件路徑、變量名、所在行和列,存儲于JSON格式數(shù)據(jù),該種格式數(shù)據(jù)可以表示各種復(fù)雜的結(jié)構(gòu),同時易于人閱讀和編寫也易于機(jī)器解析和生成。JSON數(shù)據(jù)顯示于Debug控制臺中,用戶可以直接點擊控制臺的某一項跳轉(zhuǎn)到變量所在的行,也可以刪除其中的一項。
[0029]另外,如果用戶所選變量處于循環(huán)中,用戶可在工具欄的文本框里填寫想要查看的循環(huán)次數(shù)(默認(rèn)為3,最大值為20,應(yīng)對惡意代碼中的死循環(huán)情況),例如對于一個次數(shù)為10的循環(huán),用戶填寫的次數(shù)為3,則只會在結(jié)果中顯示前3次循環(huán)中變量的值。
[0030]2、代碼插裝
[0031]變量選擇完畢后,用戶點擊調(diào)試按鈕,傳遞到服務(wù)器端的參數(shù)包括項目名稱、JSON格式的變量信息和設(shè)定的循環(huán)次數(shù)。
[0032]自動添加輸出變量代碼的過程需要進(jìn)行語法分析,使用了JavaCC和JTB工具進(jìn)行語法分析和建立語法樹。通過遍歷AST,得到需要插入文件的代碼和其位置,并存儲于數(shù)組中。主要涉及的節(jié)點有PHP頁面、語句結(jié)束符、復(fù)合語句、條件語句、迭代語句、跳轉(zhuǎn)語句和變量。
[0033]進(jìn)行代碼插裝的基本方法是,對于每個變量節(jié)點,如果其行、列值與待查看變量相同,則將其存放于數(shù)組中,當(dāng)其所在語句結(jié)束后,在下一行插入代碼如下形式的代碼:
[0034]error_log (genstr (2,12, " \$a" , $a, gettype ($a) ),3, " debug.log");
[0035]表示將第一個參數(shù)中的字符串發(fā)送到文件目標(biāo)debug, log。函數(shù)genstr O生成包含文件路徑、行號、列號、變量名、變量值、變量類型信息的JSON數(shù)據(jù),需要在PHP文件開始處插入如下所示代碼(為便于閱讀,該代碼經(jīng)格式化,插入的代碼無換行和縮進(jìn)以減少占用空間)。
[0036]
【權(quán)利要求】
1.一種輕量級的在線調(diào)試PHP程序的方法,滿足了開發(fā)者進(jìn)行程序調(diào)試時的基本需求,即查看程序運行時變量的相關(guān)信息,同時大大減輕了服務(wù)器的負(fù)擔(dān),其特征在于,包括如下步驟: 1)開發(fā)者使用鼠標(biāo)在代碼中劃取需要查看的變量,這些變量顯示在Debug控制臺中,便于開發(fā)者查看管理; 2)開發(fā)者點擊調(diào)試按鈕,瀏覽器將項目路徑和劃取的變量發(fā)送到服務(wù)器; 3)服務(wù)器在文件中找到這些變量,并在其下一行插入輸出語句以將變量輸出到日志文件中,再將修改后的代碼進(jìn)行部署; 4)開發(fā)者運行應(yīng)用時,變量信息被寫入日志文件中,包含變量名稱、變量值、變量類型和變量位置等; 5)開發(fā)者點擊查看變量,向服務(wù)器發(fā)送指令,服務(wù)器獲取日志文件,返回變量信息到瀏覽器端并顯示。
2.如權(quán)利要求1所述的在線集成開發(fā)環(huán)境的輕量級調(diào)試方法,其特征在于,所述步驟3)中,需要查看的變量位于普通語句,則在該語句之后插入輸出語句。
3.如權(quán)利要求1所述的在線集成開發(fā)環(huán)境的輕量級調(diào)試方法,其特征在于,所述步驟3)中,需要查看的變量位于條件語句,首先檢查該語句的條件體是否被大括號包圍,否則應(yīng)添加大括號,然后在大括號內(nèi)插入輸出語句。
4.如權(quán)利要求1所述的在線集成開發(fā)環(huán)境的輕量級調(diào)試方法,其特征在于,所述步驟3)中,需要查看的變量位于循環(huán)語句,首先檢查該語句的條件體是否被大括號包圍,否則應(yīng)添加大括號,然后在大括號內(nèi)插入輸出語句,同時若用戶提出變量輸出次數(shù)的要求,則應(yīng)控制輸出語句的執(zhí)行次數(shù)。
5.如權(quán)利要求1所述的在線集成開發(fā)環(huán)境的輕量級調(diào)試方法,其特征在于,所述步驟3)中,需要查看的變量位于返回語句,則將返回的表達(dá)式賦值給臨時變量,然后插入輸出語句,最后返回臨時變量。
【文檔編號】G06F17/50GK103473431SQ201310445315
【公開日】2013年12月25日 申請日期:2013年9月25日 優(yōu)先權(quán)日:2013年9月25日
【發(fā)明者】楊楠, 吳凌, 張化勁, 王千祥 申請人:北京大學(xué)