色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是DAP協議?DAP如何工作?詳解deepin-IDE中的調試功能

OSC開源社區 ? 來源:OSCHINA 社區 ? 2023-11-10 16:46 ? 次閱讀

作者:deepin-mozart、toberyan


前不久深度科技旗下 deepin 社區發布了自己的 IDE:deepin-IDE,得到了全網用戶尤其是開源社區用戶的廣泛關注,目前在 GitHub倉庫的 star 數量已經達到 600 多個,說明大家的熱情還是很高漲的。

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

本篇挑了大家關心的 “調試” 部分進行分享。需要說明的是,deepin-IDE 的調試功能是選用 DAP(Debug Adapter Protocol )調試適配協議實現的,所以整體架構是圍繞該協議搭建的,至于DAP具體是什么,讓我們帶著問號往下看。

什么是DAP協議

DAP即調試適配協議 (Debug Adapter Protocol),顧名思義,它是用來對多種調試器進行抽象統一的適配層,將原有IDE和調試工具直接交互的模式更改為和DAP進行交互。該模式可以讓IDE集成多種調試器變得更簡單,且靈活性更好。

在IDE中的調試功能有許多小功能組成,包括單步執行、斷點、查看變量值等,常規的實現方式是在每個IDE中去實現這些邏輯,且因為調試工具的接口不同,還需要為每個調試工具做一些適配工作,這將導致大量且重復的工作,如下圖所示:

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




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

上圖中的交互是通過協議進行,所以不會像通過API的方式存在語言限制,可以更好的適應調試器的集成。

DAP 如何工作

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

調試會話

開發工具有兩種基礎的方式和調試器進行交互,分別是:

【單會話模式】 在這種模式下,開發工具啟動一個調試適配器作為一個單獨的進程并且通過標準的 std 接口進行通信。在調試會話的結束時調試適配器就終止,對于當前的調試會話,開發工具往往需要實現多個調試適配。

【多會話模式】

在這種模式下,開發工具不會啟動調試適配器,而是假定它已經在運行并且會在特定端口上偵聽連接嘗試,對于每個調試會話,開發工具在特定端口上啟動一個新的通信會話并在會話結束時斷開連接。

在與調試適配器建立連接后,開發工具和調試適配器之間通過基礎協議進行通信。

基礎協議

基礎協議由兩部分組成,包括頭和內容 (類似于 HTTP),頭部和內容部分通過 “ ” 進行分割:
【協議頭】


協議頭部分由字段組成, 每個頭字段由一個鍵和一個值組成,用‘:’(一個冒號和一個空格)分隔, 每個頭字段都以 “ “結尾。由于最后一個協議頭字段和整個協議頭本身都以 終止,并且由于協議頭是強制性的,所以消息的內容部分總是在(并唯一標識)兩個 序列之前。當前只支持一個協議頭字段:

Content-Length 數字 這個字段是必須的,用來記錄內容字段的長度,單位是字節。
頭字段名 值類型 描述


協議頭部分使用的是 “ASCII” 編碼。

【內容部分】

內容部分包含了實際要傳輸的數據,這些數據用JSON格式來描述請求、響應和事件。內容部分用的是utf-8編碼

為了有個具體的認識,這里舉個簡單的例子。在調試過程中,開發人員經常會使用到下一步操作,在DAP中其協議為:

Content-Length: 119



{
  "seq": 153,
  "type": "request",
  "command": "next",
  "arguments": {
    "threadId": 3
   }
}
類型是 “請求”,命令是下一步,參數部分可以攜帶多個,這里是用的線程 Id。這個協議看著挺簡單的,是吧?接下來就講講如何使用它。


使用方法


詳細的使用方法這里就不涉及,因為用一個時序圖就可以說明:

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


可以看到,初始化、請求、響應等必要的步驟都在圖中。其中調試適配器可以理解為調試器的抽象,調試功能的最終執行者是由對應語言的調試工具實現的。



在 deepin-IDE 中的實現


在 deepin-IDE 中,調試功能的實現是結合cppdap+debugmanager實現的。

cppdap是一款基于 C++ 開發的SDK,基本實現了DAP的全量協議。deepin-IDE 的客戶端和服務端都是應用的該SDK進行開發,據此可以實現以下功能:

1. 通信功能,包括服務端的 TCP 監聽,客戶端的 TCP 連接等;

2.DAP協議的封裝,并實現協議的串行化和解串行化;

3. 提供注冊回調功能,從而可以在回調內處理各種事件、請求等;

它的層級結構如下:

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


用cppdap可以減少客戶端和服務端不少工作量,也統一了兩邊的協議數據。而 debugmanager 可以理解為調試器的抽象,包含所有必要的調試要素。整體結構如下:

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


左邊是客戶端,右邊是服務端,內部實現如下:


客戶端實現


客戶端包含了兩個個主要功能,一個是和DAP服務端進行交互,發送調試命令或處理返回的數據;另一個是將DAP數據轉換后顯示到用戶界面,并響應界面發送的事件。概括起來就包含業務模塊、事件模塊、DAP模塊和界面 4 個部分。
業務模塊


業務模塊包含了插件類、調試參數、調試管理類等,其中插件類負責插件加載、初始化、獲取上下文等,調試管理類用來組合事件、DAP、界面幾個模塊。事件模塊

事件模塊包含兩個子模塊,分別是事件發送和事件接收,比如頁面跳轉事件、添加 移除斷點事件等。DAP模塊


DAP模塊基于cppdap開發,采用層級結構,底層是原始DAP協議封裝,中間層是針對業務做的進一步封裝,簡化了向外提供的接口,最上層是對整個調試功能的整合,包括數據緩存、界面元素、命令收發。

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


界面部分 界面模塊包含堆棧界面、變量界面、斷點列表、異步對話框等,用于DAP的數據展示。

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


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


服務端實現



服務端的功能分為兩個部分,一個是基于cppdap實現命令的收發,另一個是與gdb交互,實現調試程序的啟動、暫停、退出等一系列動作。
DAP


和客戶端一樣,服務端也是基于cppdap實現的通信和協議封裝和解析。調試工具


和調試工具的交互是通過進程調用的方式實現,接收進程輸出得到返回信息。如果調試工具本身支持DAP協議,則可以直接交互。


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

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 適配器
    +關注

    關注

    8

    文章

    1960

    瀏覽量

    68101
  • IDE
    IDE
    +關注

    關注

    0

    文章

    338

    瀏覽量

    46790
  • 調試技術
    +關注

    關注

    0

    文章

    7

    瀏覽量

    6637
  • GitHub
    +關注

    關注

    3

    文章

    472

    瀏覽量

    16494

原文標題:解密deepin-IDE:如何實現簡單靈活的調試技術?

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何通過DAP協議訪問內部存儲器?

    我想使用 DAP 協議對 TC38x 系列 MCU 的 pFlash/DFlash 進行編程。 是否有任何記錄了 DAP 協議詳細信息的相關文檔? 如何通過
    發表于 01-23 07:51

    【仿真器,不只有J—Link】CMSIS-DAP調試標準解讀

    得到了openOCD和pyOCD的支持,同樣可以實現jlink上位機的功能。使用u*** hid協議,向下對于調試器的實現來說降低了復雜度,向上對于IDE的集成帶來的好處則是免驅動,方
    發表于 04-05 10:35

    為什么無法在MCUXpresso IDE為導入的cmake項目設置LinkServer (CMSIS-DAP)調試

    你好!我無法在 MCUXpresso IDE 為導入的 cmake 項目設置 LinkServer (CMSIS-DAP) 調試。是否可以?我找不到任何解決方案。 細節: 我創建了簡
    發表于 05-29 08:01

    CoreSight DAP相關資料

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

    GD32_CMSIS_DAP

    GD32_CMSIS_DAP,有需要的下來看看
    發表于 07-29 17:08 ?99次下載

    基于OpenOCD和DAP的嵌入式遠程調試系統研究與設計

    統通過OpenOCD向目標芯片發送調試命令,經過JTAG仿真器傳給目標芯片的JTACJ接口,并通過DAP生成總線事務完成調試操作。經實際應用表明,該系統支持插入斷點、單步執行、讀寫寄存器和存儲空間等
    發表于 11-23 16:15 ?2次下載
    基于OpenOCD和<b class='flag-5'>DAP</b>的嵌入式遠程<b class='flag-5'>調試</b>系統研究與設計

    介紹DAP Miniwiggler的安裝使用

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

    完全兼容CMSIS DAP調試適配器的IBDAP

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

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

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

    dap協議的基本概念 dap協議在區塊鏈的應用

    DAP協議,即分布式應用協議(Distributed Application Protocol),是一種旨在促進去中心化應用(DApps)在區塊鏈網絡上的構建和運行的框架。DAP
    的頭像 發表于 11-22 15:39 ?330次閱讀

    dap協議與傳統協議的區別 dap協議工作原理詳解

    DAP(Distributed Application Protocol)是一種分布式應用協議,旨在為分布式應用提供一個去中心化的網絡環境。與傳統協議相比,DAP
    的頭像 發表于 11-22 15:40 ?342次閱讀

    dap協議的優勢與劣勢 dap協議的未來發展趨勢

    優勢 標準化 :DAP協議提供了一套標準化的數據采集和處理流程,有助于不同系統和設備之間的互操作性。 靈活性 :DAP協議支持多種數據類型和格式,能夠適應不同的應用場景和需求。 實時性
    的頭像 發表于 11-22 15:42 ?240次閱讀

    dap協議在DApp開發的作用

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

    dap協議在跨鏈技術的應用

    隨著區塊鏈技術的快速發展,越來越多的區塊鏈網絡被創建以滿足特定行業或應用的需求。然而,這些區塊鏈網絡往往相互獨立,缺乏有效的通信機制。DAP協議作為一種跨鏈技術,旨在解決這一問題,通過標準化的接口
    的頭像 發表于 11-22 15:45 ?264次閱讀

    利用deepin-IDE的AI能力實現文件加密擴展

    選擇的開發工具是 deepin-IDE,原因有兩個:一是 deepin-IDE 本身集成了文管的插件模板,對研發者而言只需要通過引導創建模板代碼,然后在上面修修改改即可,不用再去閱讀大量的文管源碼;還有一個原因是 deepin-IDE
    的頭像 發表于 12-30 09:22 ?77次閱讀
    利用<b class='flag-5'>deepin-IDE</b>的AI能力實現文件加密擴展
    主站蜘蛛池模板: 天天躁日日躁狠狠躁午夜剧场| 麻豆第一区MV免费观看网站| 午夜福利免费视频921000电影| 久久精品WWW人人爽人人| 啊轻点灬大JI巴又大又粗| 动漫美女被吸奶| 日韩AV无码一区二区三区不卡毛片| 擦擦擦在线视频观看| 亚洲视频中文字幕在线观看| 久久99久久成人免费播放| 富婆大保健嗷嗷叫普通话对白| 中文在线日韩亚洲制服| 亚洲AV福利天堂一区二区三| 久久电影精品| 国产精品一区二区20P| japanesen女同| 小货SAO边洗澡边CAO你动漫| 欧美亚洲国产手机在线有码| 久爱精品亚洲电影午夜| 国产精品人妻久久无码不卡| 伊人久久大香线蕉电影院| 无罩看奶禁18| 日韩内射美女人妻一区二区三区| 伦理片在线线249| 精品蜜臀AV在线天堂| 国产精品久久久久精品A片软件| WWW久久只有这里有精品| 性欧美FREE少妇XXX| 色www.亚洲免费视频| 琪琪电影午夜理论片YY6080| 免费A级毛片无码无遮挡| 久久热这里面只有精品| 精品视频一区二区三三区四区| 善良的小峓子2在钱中文版女主角 善良的小峓子2在钱免费中文字 | 竹菊精品久久久久久久99蜜桃| 午夜伦理在线观看| 色戒床震视频片段| 色狠狠xx| 歪歪漫画羞羞漫画国产| 久久这里只精品热在线99| 精品四虎国产在免费观看|