日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Ruby調(diào)試器可以用來(lái)調(diào)試代碼

許多開(kāi)發(fā)人員都認(rèn)為Ruby調(diào)試器是不存在的。這實(shí)際上是一個(gè)錯(cuò)誤的觀念。那么Ruby調(diào)試器到底起到一個(gè)什么樣的作用,下面我們將會(huì)為大家做一個(gè)詳細(xì)的解讀。有些人說(shuō)這是Ruby的一個(gè)問(wèn)題。其他人則試圖將所謂的缺少調(diào)試工具解釋為智慧之舉和良好風(fēng)格。#t#

在網(wǎng)站建設(shè)、做網(wǎng)站中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營(yíng)銷成為有效果、有回報(bào)的無(wú)錫營(yíng)銷推廣。成都創(chuàng)新互聯(lián)公司專業(yè)成都網(wǎng)站建設(shè)十年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。

這些觀點(diǎn)都是誤解。Ruby明明是有調(diào)試工具的——實(shí)際上有很多。讓我們來(lái)看一看這些現(xiàn)有的工具,包括調(diào)試GUI、調(diào)試器實(shí)現(xiàn)和各種Ruby實(shí)現(xiàn)中的調(diào)試支持。

什么是調(diào)試器?

首先,讓我們搞清楚“調(diào)試器”實(shí)際上涉及了哪些東西?

調(diào)試的GUI和接口

當(dāng)然了,交互式調(diào)試器最重要的部分——至少對(duì)于用戶來(lái)說(shuō)——是用戶接口。用戶可以使用Ruby調(diào)試器的命令行接口,例如和Ruby標(biāo)準(zhǔn)庫(kù)一起提供的Rubinius調(diào)試器。它顯然可以用來(lái)調(diào)試代碼,只不過(guò)設(shè)置斷點(diǎn)或查看運(yùn)行狀態(tài)會(huì)比較麻煩。

IDE雖然有時(shí)在Ruby世界中不太受推崇,但它無(wú)疑令調(diào)試變得更簡(jiǎn)單了——畢竟,IDE就是集成開(kāi)發(fā)環(huán)境。集成對(duì)于調(diào)試來(lái)說(shuō)很重要,而IDE正是把代碼編輯和調(diào)試工具整合在一起了。你可以在源代碼編輯器中直接管理斷點(diǎn)——而不用記下代碼的行號(hào),進(jìn)入命令行調(diào)試器中,然后手工設(shè)置斷點(diǎn)。在IDE中,諸如基于行的單步調(diào)試之類的功能也更加實(shí)用,可以正確的找到所打開(kāi)的文件的棧結(jié)構(gòu)和所在行。

帶有嵌入式腳本支持的IDE還允許對(duì)腳本進(jìn)行調(diào)試。例如 ,Eclipse的EclipseMonkey擴(kuò)展支持用JRuby寫成的腳本。由于這些腳本和Eclipse IDE都運(yùn)行在同一個(gè)JVM上,由此調(diào)試器實(shí)例便可以被訪問(wèn)和控制了。

調(diào)試器協(xié)議還是連接到后端

把像IDE這樣的調(diào)試器用戶接口和調(diào)試器后端連接起來(lái)的一個(gè)簡(jiǎn)單方法是:使用命令行接口,并通過(guò)標(biāo)準(zhǔn)的stdin/stdout/stderr流來(lái)進(jìn)行控制。這樣,編輯器或者IDE的調(diào)試器支持就可以控制調(diào)試器,同時(shí)也讓用戶管理斷點(diǎn)變得更加方便了。

另外一個(gè)方法是采用線路(wire)協(xié)議,它允許通過(guò)某種模式的進(jìn)程通訊(IPC),現(xiàn)在一般是通過(guò)TCP/IP來(lái)連接到調(diào)試器。基于網(wǎng)絡(luò)的協(xié)議還允許GUI和調(diào)試器分布在不同的機(jī)器上,也就是說(shuō)可以使用本地的用戶接口來(lái)對(duì)遠(yuǎn)程機(jī)器進(jìn)行調(diào)試。

基于文本的或者至少基于文檔的簡(jiǎn)單調(diào)試協(xié)議也允許使用任何語(yǔ)言來(lái)編寫調(diào)試進(jìn)程腳本。實(shí)際上,連接到Ruby調(diào)試器和打開(kāi)telnet一樣簡(jiǎn)單。debug-commons和DBGp命令的協(xié)議就是由單行字符串和XML應(yīng)答構(gòu)成的。

VM支持還是調(diào)試后端

為了支持?jǐn)帱c(diǎn)等功能,語(yǔ)言運(yùn)行時(shí)至少得提供監(jiān)視和控制執(zhí)行的支持。可以簡(jiǎn)單地像Ruby的跟蹤(tracing)功能一樣:在一行Ruby代碼執(zhí)行之前,Ruby調(diào)試器會(huì)調(diào)用一個(gè)叫做set_trace_func的回調(diào)函數(shù)。傳過(guò)去的參數(shù)包括即將執(zhí)行的那行代碼的環(huán)境信息,比如行號(hào),所屬文件的名字和所屬的類等等。

這些信息就足以實(shí)現(xiàn)斷點(diǎn)功能了:在一個(gè)斷點(diǎn)注冊(cè)表里面檢查文件名和行號(hào),看看是否被注冊(cè)了。 當(dāng)遇到一個(gè)斷點(diǎn)時(shí),執(zhí)行就被掛起,只要不從回調(diào)中返回即可——Ruby運(yùn)行時(shí)只能在回調(diào)返回后才能繼續(xù)運(yùn)行?;谶@些,就可以實(shí)現(xiàn)單步調(diào)試等功能了。 雖然使用跟蹤功能可以實(shí)現(xiàn)一個(gè)調(diào)試器,但是在執(zhí)行每一行之前都要先執(zhí)行跟蹤回調(diào),顯然太慢了。理想地解決方案是僅在執(zhí)行有斷點(diǎn)的行時(shí)才引發(fā)斷點(diǎn)處理。

運(yùn)行時(shí)可以通過(guò)修改已加載的代碼來(lái)實(shí)現(xiàn)此功能——不論是AST還是操作碼(opcodes)——在有斷點(diǎn)的行上。有些語(yǔ)言的運(yùn)行時(shí)提供了內(nèi)建的調(diào)試支持,與執(zhí)行機(jī)制整合在一起。Java和.NET的二進(jìn)制代碼都提供調(diào)試信息(即從文件和行到字節(jié)代碼位置一個(gè)映射),讓內(nèi)建的調(diào)試支持能使用這些信息來(lái)進(jìn)行調(diào)試。

在Java世界中,例如,JVM配合JVM工具接口(JVM TI)一起實(shí)現(xiàn)了這個(gè)功能以及用來(lái)連接到JVM的Java調(diào)試線路協(xié)議(JDWP)。 還有一個(gè)方法是Rubinius調(diào)試器所使用的,它使用可訪問(wèn)和可修改的Ruby調(diào)試器代碼中的操作碼(Rubinius把Ruby源代碼先編譯成操作碼然后再執(zhí)行)。通過(guò)把一個(gè)一般操作碼替換成一個(gè)特殊操作碼來(lái)設(shè)置一個(gè)斷點(diǎn),而這個(gè)特殊操作碼則用來(lái)掛起當(dāng)前進(jìn)程并通知調(diào)試堆棧中的高層。 通過(guò)設(shè)置大量的基礎(chǔ)體系和管理數(shù)據(jù)結(jié)構(gòu)以供語(yǔ)言來(lái)訪問(wèn),語(yǔ)言本身就可以用來(lái)建立調(diào)試機(jī)制。


本文名稱:Ruby調(diào)試器可以用來(lái)調(diào)試代碼
網(wǎng)頁(yè)路徑:http://www.5511xx.com/article/djsgjeo.html