欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是DAP協(xié)議?DAP如何工作?詳解deepin-IDE中的調(diào)試功能

OSC開源社區(qū) ? 來(lái)源:OSCHINA 社區(qū) ? 2023-11-10 16:46 ? 次閱讀

作者:deepin-mozart、toberyan


前不久深度科技旗下 deepin 社區(qū)發(fā)布了自己的 IDE:deepin-IDE,得到了全網(wǎng)用戶尤其是開源社區(qū)用戶的廣泛關(guān)注,目前在 GitHub倉(cāng)庫(kù)的 star 數(shù)量已經(jīng)達(dá)到 600 多個(gè),說(shuō)明大家的熱情還是很高漲的。

為了從技術(shù)層面給大家的熱情做一個(gè)反饋,本文試著將 deepin-IDE 內(nèi)部的一些實(shí)現(xiàn)方法進(jìn)行分享,希望能夠解答友友們的疑惑并得到積極的反饋。

本篇挑了大家關(guān)心的 “調(diào)試” 部分進(jìn)行分享。需要說(shuō)明的是,deepin-IDE 的調(diào)試功能是選用 DAP(Debug Adapter Protocol )調(diào)試適配協(xié)議實(shí)現(xiàn)的,所以整體架構(gòu)是圍繞該協(xié)議搭建的,至于DAP具體是什么,讓我們帶著問號(hào)往下看。

什么是DAP協(xié)議

DAP即調(diào)試適配協(xié)議 (Debug Adapter Protocol),顧名思義,它是用來(lái)對(duì)多種調(diào)試器進(jìn)行抽象統(tǒng)一的適配層,將原有IDE和調(diào)試工具直接交互的模式更改為和DAP進(jìn)行交互。該模式可以讓IDE集成多種調(diào)試器變得更簡(jiǎn)單,且靈活性更好。

在IDE中的調(diào)試功能有許多小功能組成,包括單步執(zhí)行、斷點(diǎn)、查看變量值等,常規(guī)的實(shí)現(xiàn)方式是在每個(gè)IDE中去實(shí)現(xiàn)這些邏輯,且因?yàn)檎{(diào)試工具的接口不同,還需要為每個(gè)調(diào)試工具做一些適配工作,這將導(dǎo)致大量且重復(fù)的工作,如下圖所示:

6ee9c6c8-7eef-11ee-939d-92fbcf53809c.png




調(diào)試適配器協(xié)議背后的想法是標(biāo)準(zhǔn)化一個(gè)抽象協(xié)議,用于開發(fā)工具如何與具體調(diào)試器通信。這個(gè)思想和LSP(Language Server Protocol) 和BSP(Build Server Protocol) 類似,都是通過(guò)協(xié)議去統(tǒng)一相同功能在不同工具之間的差異性。其所處位置如下圖所示,其中左邊為不同的開發(fā)工具,右邊為不能同的調(diào)試器,不同于開發(fā)工具和調(diào)試器直接交互的方式,DAP將這些交互統(tǒng)一了起來(lái),讓開發(fā)工具和調(diào)試工具都面向DAP編程。

上圖中的交互是通過(guò)協(xié)議進(jìn)行,所以不會(huì)像通過(guò)API的方式存在語(yǔ)言限制,可以更好的適應(yīng)調(diào)試器的集成。

DAP 如何工作

以下部分解釋了開發(fā)工具(例如IDE或編輯器)和調(diào)試適配器之間的交互,包括具體的協(xié)議格式說(shuō)明、交互流程等。

調(diào)試會(huì)話

開發(fā)工具有兩種基礎(chǔ)的方式和調(diào)試器進(jìn)行交互,分別是:

【單會(huì)話模式】 在這種模式下,開發(fā)工具啟動(dòng)一個(gè)調(diào)試適配器作為一個(gè)單獨(dú)的進(jìn)程并且通過(guò)標(biāo)準(zhǔn)的 std 接口進(jìn)行通信。在調(diào)試會(huì)話的結(jié)束時(shí)調(diào)試適配器就終止,對(duì)于當(dāng)前的調(diào)試會(huì)話,開發(fā)工具往往需要實(shí)現(xiàn)多個(gè)調(diào)試適配。

【多會(huì)話模式】

在這種模式下,開發(fā)工具不會(huì)啟動(dòng)調(diào)試適配器,而是假定它已經(jīng)在運(yùn)行并且會(huì)在特定端口上偵聽連接嘗試,對(duì)于每個(gè)調(diào)試會(huì)話,開發(fā)工具在特定端口上啟動(dòng)一個(gè)新的通信會(huì)話并在會(huì)話結(jié)束時(shí)斷開連接。

在與調(diào)試適配器建立連接后,開發(fā)工具和調(diào)試適配器之間通過(guò)基礎(chǔ)協(xié)議進(jìn)行通信。

基礎(chǔ)協(xié)議

基礎(chǔ)協(xié)議由兩部分組成,包括頭和內(nèi)容 (類似于 HTTP),頭部和內(nèi)容部分通過(guò) “ ” 進(jìn)行分割:
【協(xié)議頭】


協(xié)議頭部分由字段組成, 每個(gè)頭字段由一個(gè)鍵和一個(gè)值組成,用‘:’(一個(gè)冒號(hào)和一個(gè)空格)分隔, 每個(gè)頭字段都以 “ “結(jié)尾。由于最后一個(gè)協(xié)議頭字段和整個(gè)協(xié)議頭本身都以 終止,并且由于協(xié)議頭是強(qiáng)制性的,所以消息的內(nèi)容部分總是在(并唯一標(biāo)識(shí))兩個(gè) 序列之前。當(dāng)前只支持一個(gè)協(xié)議頭字段:

Content-Length 數(shù)字 這個(gè)字段是必須的,用來(lái)記錄內(nèi)容字段的長(zhǎng)度,單位是字節(jié)。
頭字段名 值類型 描述


協(xié)議頭部分使用的是 “ASCII” 編碼。

【內(nèi)容部分】

內(nèi)容部分包含了實(shí)際要傳輸?shù)臄?shù)據(jù),這些數(shù)據(jù)用JSON格式來(lái)描述請(qǐng)求、響應(yīng)和事件。內(nèi)容部分用的是utf-8編碼

為了有個(gè)具體的認(rèn)識(shí),這里舉個(gè)簡(jiǎn)單的例子。在調(diào)試過(guò)程中,開發(fā)人員經(jīng)常會(huì)使用到下一步操作,在DAP中其協(xié)議為:

Content-Length: 119



{
  "seq": 153,
  "type": "request",
  "command": "next",
  "arguments": {
    "threadId": 3
   }
}
類型是 “請(qǐng)求”,命令是下一步,參數(shù)部分可以攜帶多個(gè),這里是用的線程 Id。這個(gè)協(xié)議看著挺簡(jiǎn)單的,是吧?接下來(lái)就講講如何使用它。


使用方法


詳細(xì)的使用方法這里就不涉及,因?yàn)橛靡粋€(gè)時(shí)序圖就可以說(shuō)明:

6f01278c-7eef-11ee-939d-92fbcf53809c.png


可以看到,初始化、請(qǐng)求、響應(yīng)等必要的步驟都在圖中。其中調(diào)試適配器可以理解為調(diào)試器的抽象,調(diào)試功能的最終執(zhí)行者是由對(duì)應(yīng)語(yǔ)言的調(diào)試工具實(shí)現(xiàn)的。



在 deepin-IDE 中的實(shí)現(xiàn)


在 deepin-IDE 中,調(diào)試功能的實(shí)現(xiàn)是結(jié)合cppdap+debugmanager實(shí)現(xiàn)的。

cppdap是一款基于 C++ 開發(fā)的SDK,基本實(shí)現(xiàn)了DAP的全量協(xié)議。deepin-IDE 的客戶端和服務(wù)端都是應(yīng)用的該SDK進(jìn)行開發(fā),據(jù)此可以實(shí)現(xiàn)以下功能:

1. 通信功能,包括服務(wù)端的 TCP 監(jiān)聽,客戶端的 TCP 連接等;

2.DAP協(xié)議的封裝,并實(shí)現(xiàn)協(xié)議的串行化和解串行化;

3. 提供注冊(cè)回調(diào)功能,從而可以在回調(diào)內(nèi)處理各種事件、請(qǐng)求等;

它的層級(jí)結(jié)構(gòu)如下:

6f1393c2-7eef-11ee-939d-92fbcf53809c.png


用cppdap可以減少客戶端和服務(wù)端不少工作量,也統(tǒng)一了兩邊的協(xié)議數(shù)據(jù)。而 debugmanager 可以理解為調(diào)試器的抽象,包含所有必要的調(diào)試要素。整體結(jié)構(gòu)如下:

6f266f4c-7eef-11ee-939d-92fbcf53809c.png


左邊是客戶端,右邊是服務(wù)端,內(nèi)部實(shí)現(xiàn)如下:


客戶端實(shí)現(xiàn)


客戶端包含了兩個(gè)個(gè)主要功能,一個(gè)是和DAP服務(wù)端進(jìn)行交互,發(fā)送調(diào)試命令或處理返回的數(shù)據(jù);另一個(gè)是將DAP數(shù)據(jù)轉(zhuǎn)換后顯示到用戶界面,并響應(yīng)界面發(fā)送的事件。概括起來(lái)就包含業(yè)務(wù)模塊、事件模塊、DAP模塊和界面 4 個(gè)部分。
業(yè)務(wù)模塊


業(yè)務(wù)模塊包含了插件類、調(diào)試參數(shù)、調(diào)試管理類等,其中插件類負(fù)責(zé)插件加載、初始化、獲取上下文等,調(diào)試管理類用來(lái)組合事件、DAP、界面幾個(gè)模塊。事件模塊

事件模塊包含兩個(gè)子模塊,分別是事件發(fā)送和事件接收,比如頁(yè)面跳轉(zhuǎn)事件、添加 移除斷點(diǎn)事件等。DAP模塊


DAP模塊基于cppdap開發(fā),采用層級(jí)結(jié)構(gòu),底層是原始DAP協(xié)議封裝,中間層是針對(duì)業(yè)務(wù)做的進(jìn)一步封裝,簡(jiǎn)化了向外提供的接口,最上層是對(duì)整個(gè)調(diào)試功能的整合,包括數(shù)據(jù)緩存、界面元素、命令收發(fā)。

6f469d76-7eef-11ee-939d-92fbcf53809c.png


界面部分 界面模塊包含堆棧界面、變量界面、斷點(diǎn)列表、異步對(duì)話框等,用于DAP的數(shù)據(jù)展示。

6f546514-7eef-11ee-939d-92fbcf53809c.png


如上圖所示,灰色部分為DAP客戶端的界面呈現(xiàn)。


服務(wù)端實(shí)現(xiàn)



服務(wù)端的功能分為兩個(gè)部分,一個(gè)是基于cppdap實(shí)現(xiàn)命令的收發(fā),另一個(gè)是與gdb交互,實(shí)現(xiàn)調(diào)試程序的啟動(dòng)、暫停、退出等一系列動(dòng)作。
DAP


和客戶端一樣,服務(wù)端也是基于cppdap實(shí)現(xiàn)的通信和協(xié)議封裝和解析。調(diào)試工具


和調(diào)試工具的交互是通過(guò)進(jìn)程調(diào)用的方式實(shí)現(xiàn),接收進(jìn)程輸出得到返回信息。如果調(diào)試工具本身支持DAP協(xié)議,則可以直接交互。


至此,本次的分享就到這兒啦!不知道你對(duì)deepin-IDE中的調(diào)試功能有所了解了嗎?

溫馨提示,deepin-IDE 還包含很多有意思的功能,如果大家感興趣可以積極反饋,后續(xù)有機(jī)會(huì)再進(jìn)行分享。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 適配器
    +關(guān)注

    關(guān)注

    8

    文章

    1976

    瀏覽量

    68289
  • IDE
    IDE
    +關(guān)注

    關(guān)注

    0

    文章

    341

    瀏覽量

    46901
  • 調(diào)試技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    6655
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    474

    瀏覽量

    16603

原文標(biāo)題:解密deepin-IDE:如何實(shí)現(xiàn)簡(jiǎn)單靈活的調(diào)試技術(shù)?

文章出處:【微信號(hào):OSC開源社區(qū),微信公眾號(hào):OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何通過(guò)DAP協(xié)議訪問內(nèi)部存儲(chǔ)器?

    我想使用 DAP 協(xié)議對(duì) TC38x 系列 MCU 的 pFlash/DFlash 進(jìn)行編程。 是否有任何記錄了 DAP 協(xié)議詳細(xì)信息的相關(guān)文檔? 如何通過(guò)
    發(fā)表于 01-23 07:51

    【仿真器,不只有J—Link】CMSIS-DAP調(diào)試標(biāo)準(zhǔn)解讀

    得到了openOCD和pyOCD的支持,同樣可以實(shí)現(xiàn)jlink上位機(jī)的功能。使用u*** hid協(xié)議,向下對(duì)于調(diào)試器的實(shí)現(xiàn)來(lái)說(shuō)降低了復(fù)雜度,向上對(duì)于IDE的集成帶來(lái)的好處則是免驅(qū)動(dòng),方
    發(fā)表于 04-05 10:35

    為什么無(wú)法在MCUXpresso IDE為導(dǎo)入的cmake項(xiàng)目設(shè)置LinkServer (CMSIS-DAP)調(diào)試?

    你好!我無(wú)法在 MCUXpresso IDE 為導(dǎo)入的 cmake 項(xiàng)目設(shè)置 LinkServer (CMSIS-DAP) 調(diào)試。是否可以?我找不到任何解決方案。 細(xì)節(jié): 我創(chuàng)建了簡(jiǎn)
    發(fā)表于 05-29 08:01

    CoreSight DAP相關(guān)資料

    本指南的目的是讓您更好地了解: ·什么是CoreSight調(diào)試訪問端口(DAP)及其工作原理。 ·什么是接入端口(AP)及其工作原理。 ·什么是ROM表,以及它是如何實(shí)現(xiàn)的。 ·使用A
    發(fā)表于 08-25 07:54

    GD32_CMSIS_DAP

    GD32_CMSIS_DAP,有需要的下來(lái)看看
    發(fā)表于 07-29 17:08 ?99次下載

    基于OpenOCD和DAP的嵌入式遠(yuǎn)程調(diào)試系統(tǒng)研究與設(shè)計(jì)

    統(tǒng)通過(guò)OpenOCD向目標(biāo)芯片發(fā)送調(diào)試命令,經(jīng)過(guò)JTAG仿真器傳給目標(biāo)芯片的JTACJ接口,并通過(guò)DAP生成總線事務(wù)完成調(diào)試操作。經(jīng)實(shí)際應(yīng)用表明,該系統(tǒng)支持插入斷點(diǎn)、單步執(zhí)行、讀寫寄存器和存儲(chǔ)空間等
    發(fā)表于 11-23 16:15 ?2次下載
    基于OpenOCD和<b class='flag-5'>DAP</b>的嵌入式遠(yuǎn)程<b class='flag-5'>調(diào)試</b>系統(tǒng)研究與設(shè)計(jì)

    介紹DAP Miniwiggler的安裝使用

    DAP Miniwiggler在DAVE3和Memtool的使用
    的頭像 發(fā)表于 07-11 01:21 ?1.3w次閱讀

    完全兼容CMSIS DAP調(diào)試適配器的IBDAP

    電子發(fā)燒友網(wǎng)站提供《完全兼容CMSIS DAP調(diào)試適配器的IBDAP.zip》資料免費(fèi)下載
    發(fā)表于 11-21 11:01 ?2次下載
    完全兼容CMSIS <b class='flag-5'>DAP</b>的<b class='flag-5'>調(diào)試</b>適配器的IBDAP

    deepin-IDE舊貌換新顏:從Qt到DTK

    deepin-IDEDeepin Union Code)新版本現(xiàn)已推出,具體更新內(nèi)容如下
    的頭像 發(fā)表于 12-28 09:45 ?1080次閱讀
    <b class='flag-5'>deepin-IDE</b>舊貌換新顏:從Qt到DTK

    dap協(xié)議的基本概念 dap協(xié)議在區(qū)塊鏈的應(yīng)用

    DAP協(xié)議,即分布式應(yīng)用協(xié)議(Distributed Application Protocol),是一種旨在促進(jìn)去中心化應(yīng)用(DApps)在區(qū)塊鏈網(wǎng)絡(luò)上的構(gòu)建和運(yùn)行的框架。DAP
    的頭像 發(fā)表于 11-22 15:39 ?494次閱讀

    dap協(xié)議與傳統(tǒng)協(xié)議的區(qū)別 dap協(xié)議工作原理詳解

    DAP(Distributed Application Protocol)是一種分布式應(yīng)用協(xié)議,旨在為分布式應(yīng)用提供一個(gè)去中心化的網(wǎng)絡(luò)環(huán)境。與傳統(tǒng)協(xié)議相比,DAP
    的頭像 發(fā)表于 11-22 15:40 ?518次閱讀

    dap協(xié)議的優(yōu)勢(shì)與劣勢(shì) dap協(xié)議的未來(lái)發(fā)展趨勢(shì)

    優(yōu)勢(shì) 標(biāo)準(zhǔn)化 :DAP協(xié)議提供了一套標(biāo)準(zhǔn)化的數(shù)據(jù)采集和處理流程,有助于不同系統(tǒng)和設(shè)備之間的互操作性。 靈活性 :DAP協(xié)議支持多種數(shù)據(jù)類型和格式,能夠適應(yīng)不同的應(yīng)用場(chǎng)景和需求。 實(shí)時(shí)性
    的頭像 發(fā)表于 11-22 15:42 ?351次閱讀

    dap協(xié)議在DApp開發(fā)的作用

    隨著區(qū)塊鏈技術(shù)的不斷發(fā)展,去中心化應(yīng)用(DApp)逐漸成為技術(shù)領(lǐng)域的熱門話題。DApp以其去中心化、透明性和安全性的特點(diǎn),為用戶和開發(fā)者提供了新的應(yīng)用模式。在這一背景下,DAP協(xié)議應(yīng)運(yùn)而生,為
    的頭像 發(fā)表于 11-22 15:43 ?311次閱讀

    dap協(xié)議在跨鏈技術(shù)的應(yīng)用

    隨著區(qū)塊鏈技術(shù)的快速發(fā)展,越來(lái)越多的區(qū)塊鏈網(wǎng)絡(luò)被創(chuàng)建以滿足特定行業(yè)或應(yīng)用的需求。然而,這些區(qū)塊鏈網(wǎng)絡(luò)往往相互獨(dú)立,缺乏有效的通信機(jī)制。DAP協(xié)議作為一種跨鏈技術(shù),旨在解決這一問題,通過(guò)標(biāo)準(zhǔn)化的接口
    的頭像 發(fā)表于 11-22 15:45 ?353次閱讀

    利用deepin-IDE的AI能力實(shí)現(xiàn)文件加密擴(kuò)展

    選擇的開發(fā)工具是 deepin-IDE,原因有兩個(gè):一是 deepin-IDE 本身集成了文管的插件模板,對(duì)研發(fā)者而言只需要通過(guò)引導(dǎo)創(chuàng)建模板代碼,然后在上面修修改改即可,不用再去閱讀大量的文管源碼;還有一個(gè)原因是 deepin-IDE
    的頭像 發(fā)表于 12-30 09:22 ?145次閱讀
    利用<b class='flag-5'>deepin-IDE</b>的AI能力實(shí)現(xiàn)文件加密擴(kuò)展