首頁 > 後端開發 > Golang > 主體

設定 Delve 和 Air 使用 VS Code 偵錯 Golang

王林
發布: 2024-08-10 06:49:32
原創
849 人瀏覽過

Setting up Delve and Air to debug Golang with VS Code

VS 程式碼擴充

在 VS Code Extensions 中搜尋 Go 並安裝。

  • https://marketplace.visualstudio.com/items?itemName=golang.Go

偵錯工具

您需要安裝 Delve 才能在 VS Code 中進行偵錯(斷點、單步執行等)。

go install github.com/go-delve/delve/cmd/dlv@latest
登入後複製

如果你使用 asdf 安裝 Go,delve 將位於:

~/.asdf/shims/dlv
登入後複製

您可能想要在安裝 go 軟體包後執行 asdf reshim。

即時重新載入

由於 GoLang 是一種編譯語言,因此程式碼將被編譯為單一執行檔。在開發過程中,進行更改將需要我們不斷地重新編譯,這可能是一個手動過程,尤其是在 VS Code 中。

我們將使用 https://github.com/air-verse/air 為我們進行即時重新載入。

它是一個命令列工具,只需在專案資料夾中執行一次即可監視變更。

安裝

安裝軟體套件。假設你有 go v1.22 或更高版本。

go install github.com/air-verse/air@latest
登入後複製

如果您使用 asdf 安裝 Go,air 將位於:

~/.asdf/shims/air
登入後複製

在專案根目錄中初始化一個air.toml設定檔

cd ~/myproject
air init
登入後複製

將air.toml [[go build]]指令編輯為:
- all:標誌應該應用於建置包中的所有包
- -N:停用最佳化以確保產生的程式碼更接近原始碼,以便於偵錯
- -l:停用內聯優化,其中小函數會就地擴展以減少函數呼叫的開銷,從而更容易調試
- 來自 Delve Reference 的推理

- cmd = "go build -o ./tmp/main ."
+ cmd = 'CGO_ENABLED=0 go build -gcflags=all="-N -l"-o ./tmp/main .'"'
登入後複製

[!資訊]
如果滿足以下條件,air 將以預設配置運行:

  • air.toml 檔案無效
  • 透過運行命令air在專案資料夾中運行它

它不會使用您的air.toml 檔案。

編輯 air.toml full_bin 以使用 [[Delve]] 運行已建置的二進位檔案。

- full_bin = ""
+ full_bin = "dlv exec ./tmp/main --listen=127.0.0.1:2345 --headless=true --api-version=2 --accept-multiclient --continue --log --"
登入後複製

這將在連接埠 2345 上執行 Delve。

在專案資料夾中執行air。您應該看到以下輸出。

> cd ~/my-project
> air
  __    _   ___  
 / /\  | | | |_) 
/_/--\ |_| |_| \_ v1.52.3, built with Go go1.22.5

mkdir ~/my-project/tmp
watching .
!exclude tmp
building...
running...
API server listening at: 127.0.0.1:2345
2024-07-28T18:47:07+07:00 info layer=debugger launching process with args: [./tmp/main]
2024-07-28T18:47:09+07:00 debug layer=debugger entryPoint 0x1006e8000 machoOff 0x100000000
2024-07-28T18:47:09+07:00 warning layer=debugger debug_frame workaround not applied: function internal/abi.(*RegArgs).IntRegArgAddr (at 0x1006e9070) covered by 0x1006e9070-0x1006e9110
2024-07-28T18:47:09+07:00 debug layer=debugger Adding target 11503 "/Users/alaay/projects/scheduleasy/tmp/main"
2024-07-28T18:47:09+07:00 debug layer=debugger continuing
2024-07-28T18:47:09+07:00 debug layer=debugger ContinueOnce
2024/07/28 18:47:09 Starting server on :5602
登入後複製

將 VS Code 附加到 Delve

在 .vscode/launch.config 檔案中,加入以下內容:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Attach to Air",
      "type": "go",
      "request": "attach",
      "mode": "remote",
      "port": 2345,
      "host": "127.0.0.1"
    }
  ]
}
登入後複製

在 VS Code 運行和調試 (CMD + SHIFT + D) 中,使用 Attach to Air 開始調試

[!info] VS Code 無法連線
如果 VS Code 無法連接,則很可能 Delve 未在連接埠 2345 上運作。嘗試使用 lsof -i :2345 檢查 dlv 是否正在使用該連接埠執行。如果它正在運行,您應該看到:

$ lsof -i :2345
COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
dlv     15464 username    3u  IPv4 0x201bff14586139e3      0t0  TCP localhost:dbm (LISTEN)
登入後複製

陷阱

Go 是一種編譯語言。這意味著程式碼被編譯成二進位檔案然後執行。每當我們在 vscode 中更改程式碼時:

  • 空氣會留意變化
  • 重建二進位檔案
  • 在 2345 開始 Delve

這表示 vscode 會斷開連接,您需要重新連接 vscode 才能進行 delve。

以上是設定 Delve 和 Air 使用 VS Code 偵錯 Golang的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!