两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種在線調(diào)試C/C++程序的方法與流程

文檔序號:11803634閱讀:865來源:國知局
一種在線調(diào)試C/C++程序的方法與流程
:本發(fā)明屬于軟件技術(shù)領(lǐng)域,具體涉及一種在線調(diào)試C/C++程序的方法。

背景技術(shù):
:傳統(tǒng)上,程序員在本地集成開發(fā)環(huán)境中開發(fā)并調(diào)試程序。調(diào)試客戶端和被調(diào)試程序都運(yùn)行在一臺機(jī)器上。程序員通過設(shè)置斷點(diǎn)、單步運(yùn)行、查看變量等操作,查看程序的運(yùn)行時狀態(tài)是否與預(yù)期相符,從而查找錯誤,修復(fù)程序。隨著云計算的興起,越來越多的程序員開始使用在線集成開發(fā)環(huán)境,在瀏覽器中開發(fā)程序。使用在線集成開發(fā)環(huán)境使得程序員可以不受使用的機(jī)器性能配置、操作系統(tǒng)的限制,隨時隨地開發(fā)程序,即時把開發(fā)的程序同步到服務(wù)器上。傳統(tǒng)的調(diào)試方法在面對這一新場景時,無法應(yīng)對以下幾個挑戰(zhàn):(1)同步問題。在線集成開發(fā)環(huán)境下,程序的調(diào)試動作發(fā)生在瀏覽器端,而調(diào)試的程序運(yùn)行在服務(wù)器端,服務(wù)器端的調(diào)試狀態(tài)與瀏覽器端同步存在問題;(2)多用戶管理。本地開發(fā)環(huán)境中,一次調(diào)試只有一個用戶,不需要進(jìn)行多用戶的管理;但是對于在線開發(fā)環(huán)境來說,需要并行的支持許多用戶同時的調(diào)試,動態(tài)分配云端資源給多個調(diào)試實(shí)例,因此不可避免要涉及多用戶的管理和資源分配。(3)安全問題。由于用戶的程序需要在服務(wù)器端運(yùn)行,如果用戶輸入惡意程序,將可能使整個系統(tǒng)癱瘓。因此,傳統(tǒng)的基于本地集成開發(fā)環(huán)境的調(diào)試方法在在線集成開發(fā)環(huán)境中運(yùn)用存在局限,不能滿足基于瀏覽器的在線調(diào)試。

技術(shù)實(shí)現(xiàn)要素:
:針對上述問題,本發(fā)明的目的是提供一種基于瀏覽器的在線程序調(diào)試方法。該方法使得程序員能夠在在線集成開發(fā)環(huán)境中發(fā)送調(diào)試命令、實(shí)時獲取服務(wù)器端調(diào)試程序狀態(tài)、進(jìn)行控制臺輸入輸出,從而在瀏覽器中完成程序的調(diào)試工作。本發(fā)明的技術(shù)方案如下:(1)程序員在瀏覽器端發(fā)送“開始調(diào)試”的命令,服務(wù)器端的控制進(jìn)程接收到“開始調(diào)試”的命令,安全掃描將要運(yùn)行的程序代碼,掃描通過后啟動一個以用戶名標(biāo)識的被調(diào)試進(jìn)程。同時啟動一個守護(hù)線程,監(jiān)控被調(diào)試進(jìn)程的運(yùn)行時間。(2)程序員在瀏覽器端控制臺可以輸入數(shù)據(jù),服務(wù)器端的控制進(jìn)程接收到控制臺輸入后,導(dǎo)入被調(diào)試進(jìn)程的輸入流中。同時,控制進(jìn)程獲取被調(diào)試進(jìn)程的控制臺輸出。服務(wù)器把控制臺輸出推送到瀏覽器端,顯示給程序員。(3)在調(diào)試過程中,程序員可以在瀏覽器端發(fā)送一系列調(diào)試命令,包括斷點(diǎn)添加、斷點(diǎn)刪除、單步進(jìn)入、單步跳出、運(yùn)行到當(dāng)前行、繼續(xù)、查看變量值。控制進(jìn)程接收到調(diào)試命令后,對被調(diào)試程序執(zhí)行調(diào)試命令對應(yīng)的操作。(4)被調(diào)試進(jìn)程實(shí)時地把狀態(tài)信息反饋給控制進(jìn)程??刂七M(jìn)程解析狀態(tài)信息文本,推送相應(yīng)狀態(tài)到瀏覽器端。(5)調(diào)試結(jié)束后,控制進(jìn)程終止被調(diào)試進(jìn)程,調(diào)試結(jié)束。上述的在線程序調(diào)試方法,所屬步驟(1)中,程序員在瀏覽器端發(fā)送“開始調(diào)試”命令時,同時附帶用戶名信息、被調(diào)試程序相對地址??刂七M(jìn)程通過上述信息定位被調(diào)試程序的絕對地址,啟動被調(diào)試程序。上述的在線程序調(diào)試方法,所屬步驟(1)中,當(dāng)被調(diào)試程序運(yùn)行時間超過設(shè)定的閾值時,守護(hù)線程終止被調(diào)試進(jìn)程,本次調(diào)試結(jié)束。上述的在線程序調(diào)試方法,所屬步驟(3)(4)中,服務(wù)器端的控制進(jìn)程獲取被調(diào)試進(jìn)程狀態(tài)信息和控制臺輸出后,通過服務(wù)器端推送技術(shù)(comet),把控制臺輸出和被調(diào)試進(jìn)程狀態(tài)信息推送到瀏覽器端。上述的在線程序調(diào)試方法,所屬步驟(4)中,服務(wù)器端的控制進(jìn)程獲取被調(diào)試進(jìn)程狀態(tài)信息文本后,通過文本語言的詞法分析、語法分析,得到運(yùn)行狀態(tài)。運(yùn)行狀態(tài)包括:程序當(dāng)前運(yùn)行的位置、瀏覽器端需要查看變量的值。上述的在線程序調(diào)試方法,所屬步驟(5)中,被調(diào)試程序的終止有三種可能:程序運(yùn)行結(jié)束自然終止、用戶手動終止調(diào)試、運(yùn)行超時守護(hù)進(jìn)程終止調(diào)試。本發(fā)明的技術(shù)效果在于:本發(fā)明的方法保證了在在線集成開發(fā)環(huán)境中,程序員在瀏覽器端能夠正確的調(diào)試程序,保證了瀏覽器端和服務(wù)器端調(diào)試狀態(tài)的一致性;提供了多用戶的管理機(jī)制;使得程序員在瀏覽器端能夠控制被調(diào)試進(jìn)程的運(yùn)行過程。附圖說明圖1表示在本發(fā)明中調(diào)試的流程。圖2表示在本發(fā)明中設(shè)置斷點(diǎn)的示例圖3表示在本發(fā)明中控制臺輸入的示例圖4表示在本發(fā)明中單步調(diào)試的示例圖5表示在本發(fā)明中調(diào)試命令“下一行”的示例圖6表示在本發(fā)明中查看變量值的示例圖7表示在本發(fā)明中調(diào)試結(jié)束的示例具體實(shí)施方式:附圖1示意了一個示例程序的調(diào)試流程。啟動應(yīng)用服務(wù)器后,自動啟動調(diào)試的控制進(jìn)程。這個控制進(jìn)程負(fù)責(zé)控制所有用戶的被調(diào)試進(jìn)程。首先,用戶登錄在線開發(fā)環(huán)境,完成程序的編輯、保存。在程序需要停止的位置設(shè)置斷點(diǎn)。點(diǎn)擊“開始調(diào)試”按鈕開始調(diào)試。瀏覽器端向服務(wù)器端的控制進(jìn)程發(fā)送“調(diào)試開始”的命令,控制進(jìn)程根據(jù)用戶名和被調(diào)試程序地址,啟動被調(diào)試進(jìn)程,同時設(shè)定最大運(yùn)行時間,啟動守護(hù)進(jìn)程??刂七M(jìn)程啟動被調(diào)試進(jìn)程后,返回瀏覽器端調(diào)試開始的信息,瀏覽器端顯示調(diào)試正在進(jìn)行。被調(diào)試進(jìn)程在遇到斷點(diǎn),運(yùn)行停止??刂七M(jìn)程獲得被調(diào)試進(jìn)程的停止信息后,將被調(diào)試進(jìn)程的狀態(tài)信息,推送到瀏覽器端。瀏覽器端顯示程序停止在斷點(diǎn)處。在瀏覽器端控制臺輸入數(shù)據(jù)??蛻舳藢⒖刂婆_輸入發(fā)送給控制進(jìn)程??刂七M(jìn)程把控制臺輸入寫入被調(diào)試進(jìn)程的輸入流上。如果發(fā)現(xiàn)被調(diào)試進(jìn)程的輸入流已經(jīng)關(guān)閉,則直接返回。瀏覽器端點(diǎn)擊調(diào)試命令,比如“單步進(jìn)入、單步跳過”,發(fā)送命令至控制進(jìn)程??刂七M(jìn)程會對被調(diào)試進(jìn)程發(fā)送相關(guān)命令操作。瀏覽器端可以查看當(dāng)前棧的局部變量,或者具體一個變量的值??刂瞥绦蚴盏讲榭醋兞空埱蠛螅虮徽{(diào)試進(jìn)程發(fā)送查看變量的命令。被調(diào)試進(jìn)程返回狀態(tài)結(jié)果文本,控制進(jìn)程解析狀態(tài)結(jié)果文本后得到變量的值,再推送值至瀏覽器端。被調(diào)試進(jìn)程有控制臺輸出時,控制進(jìn)程獲取到控制臺輸出,推送到瀏覽器端。程序自然終止、用戶手動終止或者守護(hù)線程超時終止后,控制進(jìn)程嘗試殺掉被調(diào)試進(jìn)程,同時把調(diào)試終止的消息推送到瀏覽器端。其中的關(guān)鍵技術(shù)如下:(1)服務(wù)器端調(diào)試的控制進(jìn)程控制進(jìn)程主要由三個模塊組成:命令解釋器??刂七M(jìn)程從瀏覽器端接受調(diào)試命令,并將命令轉(zhuǎn)化為被調(diào)試進(jìn)程可接受的指令。解釋器支持的所有指令如下:操作可接受指令插入斷點(diǎn)-break-insert(linenumber)刪除斷點(diǎn)clear(linenumber)開始運(yùn)行-exec-run繼續(xù)運(yùn)行-exec-continue終止運(yùn)行-exec-abort單步進(jìn)入-exec-step單步退出-exec-next查看變量的值-data-evaluate-expression(varname)查看所有當(dāng)前棧的變量的值-list-locals1狀態(tài)解析器。被調(diào)試進(jìn)程的狀態(tài)改變,會輸出相應(yīng)的狀態(tài)信息文本。這些狀態(tài)信息以文本的形式被控制進(jìn)程獲取。由于狀態(tài)種類繁多,狀態(tài)信息的文本的語法較為復(fù)雜,,如果只是運(yùn)用一般的字符串匹配或者正則表達(dá)式匹配,很難正確的得到狀態(tài)信息。在狀態(tài)解析器中,對返回的調(diào)試狀態(tài)文本進(jìn)行語法分析、詞法分析,建立語法樹,通過遍歷語法樹,最終獲取需要獲取的狀態(tài)信息??刂婆_輸入輸出控制器。從瀏覽器端來的控制臺輸入,需要控制臺輸入輸出器通過用戶名找到客戶端對應(yīng)的被調(diào)試進(jìn)程,在之后對被調(diào)試進(jìn)程導(dǎo)入控制臺輸入;被調(diào)試進(jìn)程的控制臺輸出,需要經(jīng)過控制臺輸入輸出控制器,找到對應(yīng)的瀏覽器端,把控制臺輸出推送至目標(biāo)瀏覽器端。同時,控制臺輸入輸出控制器還控制輸入輸出的長度。超過閾值后,控制臺輸入輸出控制器會終止輸入輸出流,避免對系統(tǒng)性能造成損害。(1)代碼安全檢查傳統(tǒng)的基于本地集成開發(fā)環(huán)境的調(diào)試,程序員在自己的機(jī)器上調(diào)試,不存在安全問題。而對于基于在線開發(fā)環(huán)境的調(diào)試,程序員可以在任意編寫程序,包括惡意程序。因此,必須對程序的代碼做安全檢查。在具體實(shí)現(xiàn)上,本發(fā)明采用黑名單的處理方式。即禁止與操作系統(tǒng)相關(guān)函數(shù)的使用,包括fork和system兩個函數(shù)。Fork函數(shù)可以在操作系統(tǒng)中新建進(jìn)程,system函數(shù)可以調(diào)用操作系統(tǒng)的shell命令。(2)被調(diào)試進(jìn)程死循環(huán)、輸出溢出的處理方法與傳統(tǒng)的本地調(diào)試不同的是,在線集成開發(fā)環(huán)境的調(diào)試需要面對多用戶的問題。多個用戶同時在一個服務(wù)器上調(diào)試,必須避免他們之間相互影響。對于某些程序無限制死循環(huán),耗盡服務(wù)器CPU資源的情況,控制進(jìn)程會給每個被調(diào)試進(jìn)程指定最大運(yùn)行時間。一旦超過這個時間,守護(hù)進(jìn)程就會殺死被調(diào)試進(jìn)程,終止調(diào)試過程,避免無休止的運(yùn)行影響其他租戶,降低系統(tǒng)開銷。最大運(yùn)行時間的設(shè)定參照經(jīng)驗(yàn)。對于本發(fā)明涉及的場景而言,一個程序的一次調(diào)試運(yùn)行時間不會超過5分鐘,設(shè)為5分鐘是個合適的值。對于某些程序大量控制臺輸出結(jié)果,服務(wù)器端不得不大量傳送控制臺輸出數(shù)據(jù)到瀏覽器端的情況,控制進(jìn)程會設(shè)定控制臺輸出的上限。一旦超過上限,控制進(jìn)程停止對被調(diào)試進(jìn)程輸出流的獲取,讓被調(diào)試程序忽略控制臺輸出的情況下繼續(xù)運(yùn)行。這樣避免了個別調(diào)試程序大量占用網(wǎng)絡(luò)帶寬的情況。(2)服務(wù)器推送技術(shù)傳統(tǒng)的Http請求協(xié)議的順序是:瀏覽器端發(fā)出一個HttpRequest,服務(wù)器端接受請求后返回HttpResponse。這就要求是瀏覽器發(fā)起一個請求,瀏覽器端進(jìn)行響應(yīng)。對于在線開發(fā)環(huán)境的調(diào)試,服務(wù)器端的調(diào)試進(jìn)程會產(chǎn)生狀態(tài)數(shù)據(jù)和控制臺輸出。這些輸出需要服務(wù)器端推送到瀏覽器端,這就與傳統(tǒng)的Http請求相違背。在本發(fā)明中,客戶端通過服務(wù)器推送技術(shù)(Comet),把相關(guān)的數(shù)據(jù)推送到瀏覽器端。具體說來,一種方法是客戶端每隔固定時間去獲取服務(wù)器端的待推送數(shù)據(jù)。這樣看起來就是服務(wù)器能夠把數(shù)據(jù)推送到客戶端了,繞過了Http請求協(xié)議的順序。
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
视频| 建瓯市| 万宁市| 临沭县| 搜索| 孝昌县| 昌都县| 上栗县| 措勤县| 县级市| 交城县| 卢湾区| 嵊泗县| 曲阜市| 漳浦县| 明星| 浙江省| 彰武县| 福安市| 庆城县| 新丰县| 常宁市| 河池市| 南溪县| 郴州市| 东至县| 观塘区| 中西区| 顺平县| 全州县| 岑巩县| 新民市| 常山县| 迭部县| 衡阳市| 古浪县| 朝阳县| 衡南县| 定结县| 清新县| 长垣县|