亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        JavaScript調(diào)試器軟件架構(gòu)

        2015-04-09 12:24:16王婷婷申啟杰
        關(guān)鍵詞:引擎代碼調(diào)試

        王婷婷 申啟杰

        摘 要 JavaScript編程變得越來越重要,一個獨立運行的輕量的JavaScript調(diào)試器工具成為許多Web應(yīng)用開發(fā)人員迫切需要的一種工具.采用基于C++的V8引擎作為調(diào)試器的腳本解釋器,構(gòu)建出包含編輯模塊、結(jié)果顯示模塊、JavaScript模塊三個模塊的JavaScript調(diào)試器.其中JavaScript模塊又包含JavaScript引擎、代碼檢查器、參數(shù)配置器、代碼壓縮器、代碼輔助五個子模塊.使用委派的信息交互方式來實現(xiàn)模塊間的信息傳遞,使提出的調(diào)試器具有簡便易用、突出重點、容錯高的軟件界面.

        關(guān)鍵詞 JavaScript編程;C#語言;V8引擎;JavaScript調(diào)試器;委派;軟件界面

        中圖分類號 TP311 文獻標識碼 A 文章編號 1000-2537(2014)06-0088-05

        Abstract JavaScript programming is becoming increasingly important. An independent-running lightweight JavaScript debugger has become an important tool for Web application developers. The JavaScript debugger three modules, namely the editing module, the result displaying module and the JavaScript module is constructed by the script interpreter which adopts v8 engine based on C# language as debugger. Among them, the JavaScript module includes five submodules such as JavaScript engine, code checker, parameters configuration, code compressors and code assistance. Using the delegation information-interacted means to achieve information transmission between modules, the established debuger owns a software interface with qualities as using simply and easily, highlighting the keys and high fault tolerance.

        Key words JavaScript programming; C# language; V8 engine; JavaScript debugger; delegation; software interface

        當前,基于Web瀏覽器的應(yīng)用越來越受到用戶的喜愛和開發(fā)商的重視,而越來越多的成熟用戶對Web應(yīng)用的易用性提出新的高要求,這就迫使開發(fā)商不斷地改進應(yīng)用.例如,使用JavaScript代碼控制Web頁面的展現(xiàn);使用AJAX技術(shù)改善Web頁面的控制等等.這些都使得作為Web應(yīng)用的開發(fā)人員不得不去學(xué)習(xí)并使用JavaScript語言編寫應(yīng)用程序.

        提供JavaScript代碼調(diào)試的工具目前主要分為兩類:第一類工具是與大型的IDE工具集成的調(diào)試工具,如微軟的InterDev, Visual Studio. NET 2003/2005,Eclipse上的HTML編輯器插件,NetBeans上的HTML編輯器等等;第二類工具是作為瀏覽器的一個插件的調(diào)試工具,如FireFox瀏覽器上的FireBug插件[1-2].這兩類工具不同的是:第一類不能對JavaScript代碼進行單步調(diào)試、設(shè)置斷點等代碼的跟蹤功能.相同的地方就是:為了調(diào)試JavaScript代碼,不得不啟動應(yīng)用自身,從而占用大量不必要的系統(tǒng)內(nèi)存資源.

        盡管JavaScript的編程變得越來越重要,目前還沒有真正獨立的JavaScript調(diào)試工具.因此,一個獨立運行的輕量的調(diào)試器工具成為許多Web應(yīng)用開發(fā)人員迫切需要的一種工具.它將使得Web應(yīng)用的開發(fā)人員能更好地調(diào)試JavaScript代碼,從而減輕開發(fā)的成本、提高開發(fā)工作的效率.

        筆者采用C#語言構(gòu)建了一個獨立的、輕量的JavaScript代碼調(diào)試工具.所謂獨立性,是指該JavaScript代碼調(diào)試工具無須與現(xiàn)在的IDE和Web瀏覽器結(jié)合,它是一個獨立的應(yīng)用;所謂輕量級,是指該JavaScript代碼調(diào)試工具只占用系統(tǒng)很少的資源.該JavaScript代碼調(diào)試工具提供如下主要功能為:(1)對JavaScript代碼的單步調(diào)試;(2)設(shè)置斷點;(3)取消斷點;(4)跟蹤指定的變量;(5)定位出錯代碼位置.本文主要介紹該JavaScript代碼調(diào)試工具的軟件架構(gòu)思想.

        JavaScript調(diào)試器分為3個模塊:編輯模塊,結(jié)果顯示模塊,JavaScript模塊[3-4].整體架構(gòu)如圖1所示.

        在JavaScript調(diào)試器中,編輯模塊負責編輯功能,包括新建文檔、打開文檔、保存、另存為、剪切、復(fù)制、粘貼、查找、撤銷、重做、跳轉(zhuǎn)到指定行列、放大、縮小等基本功能.編輯模塊采用窗體控制器對多個編輯窗口進行管理和控制,支持多文檔的打開和編輯.

        JavaScript模塊是JavaScript調(diào)試器的核心,包括JavaScript引擎、代碼檢查器、參數(shù)配置器、代碼壓縮器、代碼輔助5個子模塊[5-7].

        JavaScript調(diào)試器的結(jié)果顯示模塊以列表的形式顯示當前JavaScript代碼的錯誤.結(jié)果顯示模塊分析代碼檢查器的檢查結(jié)果,顯示錯誤總數(shù)及錯誤明細,錯誤明細會細致顯示出錯的行號、字符位置、錯誤描述.

        2 JavaScript模塊架構(gòu)

        JavaScript模塊是軟件的核心,JavaScript模塊包括JavaScript引擎、代碼檢查器、參數(shù)配置器、代碼壓縮器、代碼輔助5大子模塊[8-9],如圖2所示.

        2.1 JavaScript調(diào)試器的C#開發(fā)語言和V8引擎

        JavaScript引擎是JavaScript代碼執(zhí)行的解釋器[10-11].目前,國際上開源的JavaScript引擎是Mozilla公司的Rhino和Google公司的V8[12-14].Rhino是用純 Java 實現(xiàn)的開源 JavaScript 引擎,F(xiàn)irefox瀏覽器采用了該引擎;而V8引擎則是用C++開發(fā)的開源引擎,用于Chrome瀏覽器上[15].Rhino引擎和V8引擎都為客戶端提供了JavaScript腳本執(zhí)行能力.它們都是開源的引擎,能很方便地將JavaScript腳本嵌入到程序中.

        由于本軟件使用C#進行開發(fā),所以設(shè)計者采用基于C++的V8引擎作為調(diào)試器的腳本解釋器,并用C#把V8引擎封裝起來,作為一個獨立的運行模塊.通過向CLI提供接口,使得調(diào)試器的其他部件能夠通過C#函數(shù)直接調(diào)用V8引擎.封裝后的V8引擎提供了C#語言到JavaScript語言的直接映射,能夠通過C#語言直接對JavaScript變量賦值;能夠獲取運行中的JavaScript變量的值;也能夠直接獲得JavaScript腳本的運行結(jié)果.

        2.2 JavaScript調(diào)試器的代碼檢查器

        代碼檢查器是JSLint標準的封裝,JSLint是JavaScript驗證工具,它定義了一組比歐洲計算機制造商協(xié)會(ECMA)定義更為嚴格的編碼約定,可以掃描JavaScript源代碼來查找問題.如果JSLint發(fā)現(xiàn)一個問題,便會顯示描述這個問題的消息,并指出錯誤在源代碼中的大致位置.代碼檢查器封裝了JSLint,對外開放3個接口:(1)參數(shù)配置接口,可以接受參數(shù)配置器設(shè)置的調(diào)試信息;(2)代碼解釋接口,用于連接JavaScript引擎,將JavaScript提交到引擎中執(zhí)行;(3)結(jié)果輸出接口,可以格式化輸出錯誤信息(包括出錯的行、字符、錯誤描述),供結(jié)果顯示模塊進行顯示.

        2.3 JavaScript調(diào)試器的代碼壓縮器

        代碼壓縮器使用了YUICompressor對JavaScript代碼進行壓縮處理.用戶在編輯JavaScript語言時,應(yīng)當做到格式清晰、注釋清楚、變量含義明確.但是這樣會導(dǎo)致JavaScript文件的體積變大,不利于網(wǎng)絡(luò)的傳輸.于是很有必要對編寫的代碼進行代碼壓縮,實現(xiàn)去除注釋、去除空格、去除換行、替換長的函數(shù)或變量名等操作,將大而松散的JavaScript文件變得小巧而緊湊.

        2.4 JavaScript調(diào)試器的參數(shù)配置器

        參數(shù)配置器主要用于配置整個JavaScript模塊的參數(shù),包括代碼檢查器的參數(shù)、壓縮器的參數(shù)、腳本檢查超時時間等.這些配置參數(shù)會以xml配置文件的形式保存在本地,當程序執(zhí)行時,從xml配置文件讀取配置信息,存儲在程序的臨時變量中,以方便程序快速調(diào)用.當使用參數(shù)配置器進行參數(shù)配置后,參數(shù)配置器一方面將配置結(jié)果存儲到xml配置文件,另一方面更新臨時變量的配置值,使配置能夠馬上生效.

        參數(shù)配置器配置界面如圖3所示.

        2.5 JavaScript調(diào)試器的代碼輔助子模塊

        代碼輔助子模塊提供JavaScript編輯窗的代碼折疊、語法高亮、代碼片段、代碼縮進功能.代碼輔助模塊的功能是基于xml配置的,xml中配置了需要高亮的語法關(guān)鍵詞、代碼縮進空格數(shù)、代碼片段等信息.

        3 JavaScript調(diào)試器的軟件架構(gòu)

        3.1 JavaScript調(diào)試器的軟件架構(gòu)

        JavaScript調(diào)試器采用了柔性可擴展的軟件架構(gòu),調(diào)試器的底層,為一個軟件基礎(chǔ)平臺,主要用于個模塊的接口通訊,基礎(chǔ)平臺之上,則是各個核心模塊,如圖4所示.上層模塊之間是相互獨立的,只要符合模塊的接口規(guī)范,可以很簡易的將功能模塊進行優(yōu)和升級.

        比如Javascript引擎模塊,有常見的V8和Rhino,它們通過不同的語言進行編寫,通過封裝后,都可以動態(tài)部署到軟件中.又比如常見的代碼檢查模塊,有JSLint和JSHint,它們提供了不同規(guī)范程度的語法檢查,Javascript調(diào)試器的這種柔性架構(gòu),能夠很方便的在它們之間進行選擇,也可以更具實際的需要,選擇其他的一些代碼檢查器.

        通過這種架構(gòu)的設(shè)計,核心的功能都實現(xiàn)了可配置、可替換、可升級.當有新的Javascript標準發(fā)布,或者更好的功能模塊時,能夠快速實現(xiàn)軟件升級,而不會對整個系統(tǒng)造成影響.

        3.2 模塊間信息傳遞

        軟件使用了松散耦合的設(shè)計思想,不同的模塊都是獨立設(shè)計的,在與其他模塊進行交互的時候,不直接操作對方模塊,而是使用基礎(chǔ)平臺的接口.本軟件主要使用委派的信息交互方式來實現(xiàn)模塊間的信息傳遞.

        委派其實是一個容器,或稱為函數(shù)指針,里面存放需要調(diào)用的接口函數(shù),如圖5所示.完全封閉的兩個對象A和B.A對象中有一個接口,負責處理傳遞過來的消息.B對象中定義了委派(Delegate),指向A對象中的Interface A,當B對象需要傳遞消息時,對委派(Delegate)進行調(diào)用(Invoke),將消息傳遞到A對象,由Interface A對消息進行處理.

        軟件中廣泛使用了委派來處理不同封閉對象的信息傳遞.比如代碼檢查后,將檢查結(jié)果傳遞到結(jié)果顯示模塊,就是這樣處理的.如圖6所示,DocumentForm中包含了ShowDebugResultArr的定義,這個定義指向DebugResultForm對象中的ShowDebugResultAction,當語法檢查完成后,檢查的結(jié)果會通過委派,將語法檢查結(jié)果傳遞到錯誤顯示窗口(DebugResultForm)中,DebugResultForm通過函數(shù)ShowDebugResultAction來對傳過來的信息進行處理和加工,并顯示到錯誤顯示窗口中.

        4 軟件界面

        JavaScript調(diào)試器的軟件界面具有簡便易用、突出重點、容錯高等特點,見圖7.

        5 結(jié)論

        上文所述獨立運行的輕量的JavaScript調(diào)試器的軟件結(jié)構(gòu)思想為:

        第一,基于C#的V8引擎作為調(diào)試器的腳本解釋器,通過C#將V8引擎封裝,并向CLI開放函數(shù)接口;

        第二,包含編輯模塊、結(jié)果顯示模塊、JavaScript模塊3個模塊;

        第三,JavaScript模塊包含JavaScript引擎、代碼檢查器、參數(shù)配置器、代碼壓縮器、代碼輔助5個子模塊;

        第四,使用委派的信息交互方式來實現(xiàn)模塊間的信息傳遞;

        第五,軟件界面簡便易用、重點突出、容錯高.

        參考文獻:

        [1] SURPASS L.Javascript腳本的調(diào)試工具有哪些 [DB/OL].(2012-01-06)[2013-12-01].http://www.cnblogs.com/lidabo/archive/2012/01/06/2314739.html.

        [2] 佚 名.5個優(yōu)秀的Javascript 調(diào)試工具[DB/OL].(2012-02-24)[2013-12-01].http://www.php100.com/html/webkaifa/javascript/2012/0224/9911.html.

        [3] 廖立新,全秀娥.基于Flash的熱傳導(dǎo)綜合實驗儀的模擬軟件設(shè)計[J].吉首大學(xué)學(xué)報自然科學(xué)版, 2013,34 (6):22-25.

        [4] 薛 輝,鄧 軍,葉柏龍,等.分布式數(shù)據(jù)交換平臺在電子政務(wù)中設(shè)計與實現(xiàn)[J].湖南師范大學(xué)自然科學(xué)學(xué)報, 2012,35(6):44-47.

        [5] 谷 偉.基于網(wǎng)絡(luò)的自適應(yīng)測試系統(tǒng)的設(shè)計與實現(xiàn)[J].湘潭大學(xué)自然科學(xué)學(xué)報, 2013,35(2):98-102.

        [6] 李振亭,王一博.基于云計算的網(wǎng)絡(luò)學(xué)習(xí)生態(tài)系統(tǒng)模型[J].河南師范大學(xué)學(xué)報:自然科學(xué)版, 2013,41(2):64-67.

        [7] 羅江河,孫松林,肖名濤,等.基于Matlab的油菜移栽機栽植機構(gòu)運動學(xué)建模與分析 [J].湖南農(nóng)業(yè)大學(xué)學(xué)報:自然科學(xué)版, 2013,39(6):693-698.

        [8] 武俊生.雙基、改性雙基數(shù)據(jù)庫應(yīng)用系統(tǒng)設(shè)計[J].湖南師范大學(xué)自然科學(xué)學(xué)報, 2013,36(2):35-39.

        [9] 文雄軍,劉樹錕,廖曙光.智能公交系統(tǒng)電子站牌的研究與設(shè)計[J].湖南師范大學(xué)自然科學(xué)學(xué)報, 2012,35(5):42-46.

        [10] [美]JOHN R.精通JavaScript DOM [M].陳賢安,江疆,譯.北京:人民郵電出版社, 2008.

        [11] 張亞飛.JavaScript開發(fā)王[M].北京:電子工業(yè)出版社, 2008.

        [12] 陳爭航.JavaScript編程寶典[M].2版.北京:電子工業(yè)出版社, 2008.

        [13] [美]DAVID F.JavaScript權(quán)威指南[M].5版.李強,譯.北京:機械工業(yè)出版社, 2007.

        [14] [英]JEREMY K. JavaScript DOM編程藝術(shù)[M].楊濤,王建橋,楊曉云,等譯.北京:人民郵電出版社, 2007.

        [15] [美]JOHN R. NET 2.0應(yīng)用程序調(diào)試[M].陳緣,鄒建峰,鄭瓊,譯.北京:電子工業(yè)出版社, 2008.

        (編輯 胡文杰)

        猜你喜歡
        引擎代碼調(diào)試
        創(chuàng)世代碼
        動漫星空(2018年11期)2018-10-26 02:24:02
        創(chuàng)世代碼
        動漫星空(2018年2期)2018-10-26 02:11:00
        創(chuàng)世代碼
        動漫星空(2018年9期)2018-10-26 01:16:48
        創(chuàng)世代碼
        動漫星空(2018年5期)2018-10-26 01:15:02
        基于航拍無人機的設(shè)計與調(diào)試
        電子制作(2018年12期)2018-08-01 00:47:44
        FOCAS功能在機床調(diào)試中的開發(fā)與應(yīng)用
        藍谷: “涉藍”新引擎
        商周刊(2017年22期)2017-11-09 05:08:31
        無線通信中頻線路窄帶臨界調(diào)試法及其應(yīng)用
        電子制作(2017年19期)2017-02-02 07:08:38
        調(diào)壓柜的調(diào)試與試運行探討
        無形的引擎
        河南電力(2015年5期)2015-06-08 06:01:46
        一区二区三区熟妇人妻18| 国产色综合天天综合网| 日韩AV无码一区二区三| 蜜桃在线一区二区三区| 亚州终合人妖一区二区三区| 国精品午夜福利视频不卡| 无码人妻一区二区三区免费n鬼沢| 亚州五十路伊人网| 日本岛国一区二区三区四区| 国产电影无码午夜在线播放| 成人亚洲性情网站www在线观看 | 欧美极品jizzhd欧美| 国产爆乳乱码女大生Av| 少妇勾引视频网站在线观看| 日本一二三区在线观看视频| 最近在线更新8中文字幕免费| 国产精品嫩草影院午夜| 又爽又猛又大又湿的视频| 一区二区三区四区国产99| 免费特级毛片| 日韩女人毛片在线播放| 在线观看一区二区三区国产| 亚洲日韩精品一区二区三区无码 | 日本一区二区在线高清观看 | 亚洲AV成人综合五月天在线观看| 全亚洲最大的私人影剧院在线看| 久久久久亚洲av片无码| 国产女合集小岁9三部 | 日本丰满熟妇videossexhd| a在线观看免费网站大全| 亚洲一区二区三区免费av在线| 中国黄色一区二区三区四区| 天天做天天爱天天综合网2021| 国产精品九九九无码喷水| 国产成人高清亚洲一区二区| 优优人体大尺大尺无毒不卡 | 精品一区二区三区免费视频| 国产综合激情在线亚洲第一页| 风韵丰满妇啪啪区老老熟女杏吧| 91九色老熟女免费资源 | 北条麻妃在线视频观看|