VS Code 斷點調試golang

實現效果

安裝 delve

windows

go get -u github.com/go-delve/delve/cmd/dlvlinux

linux

方式一:
go get -u github.com/go-delve/delve/cmd/dlv
方式二git

$ git clone https://github.com/go-delve/delve.git $GOPATH/src/github.com/go-delve/delve
$ cd $GOPATH/src/github.com/go-delve/delve
$ make install
注意: 若果你go版本爲1.5須要設置 GO15VENDOREXPERIMENT=1

OSX

$ go get -u github.com/go-delve/delve/cmd/dlv

執行上述代碼前,確保你電腦上有編譯工具github

設置 launch.json 配置文件

ctrl+shift+p 輸入 Debug: Open launch.json 打開 launch.json 文件,若是第一次打開,會新建一個配置文件,默認配置內容以下json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${fileDirname}",
            "env": {},
            "args": []
        }
    ]
}

常見屬性以下windows

屬性 介紹
name 調試界面下拉選擇項的名稱
type 設置爲go無需改動,是 vs code 用於計算調試代碼須要用哪一個擴展
mode 能夠設置爲 auto, debug, remote, test, exec 中的一個
program 調試程序的路徑(絕對路徑)
env 調試時使用的環境變量。例如:{ "ENVNAME": "ENVVALUE" }
envFile 包含環境變量文件的絕對路徑,在 env 中設置的屬性會覆蓋 envFile 中的配置
args 傳給正在調試程序命令行參數數組
showLog 布爾值,是否將調試信息輸出
logOutput 配置調試輸出的組件(debugger, gdbwire, lldbout, debuglineerr, rpc),使用,分隔, showLog 設置爲 true 時,此項配置生效
buildFlags 構建 go 程序時傳給 go 編譯器的標誌
remotePath 遠程調試程序的絕對路徑,當 mode 設置爲 remote 時有效

在 debug 配置中使用 VS Code 變量

  • ${workspaceFolder} 調試 VS Code 打開工做空間的根目錄下的全部文件
  • ${file} 調試當前文件
  • ${fileDirname} 調試當前文件所在目錄下的全部文件

使用構建標記(build tags)

若是須要使用構建標記(e.g. go build -tags=whatever_tag)在參數 buildFlags 裏寫入 -tags=whatever_tag" 便可,支持多標籤,使用單引號將標籤包圍,例如: "-tags='first_tag second_tag third_tag'"api

debug 配置代碼片斷

能夠在 launch.json 文件中,使用 Go 關鍵詞調出 debug 配置項的代碼片斷。數組

調試當前文件配置片斷

{
    "name": "Launch file",
    "type": "go",
    "request": "launch",
    "mode": "auto",
    "program": "${file}"
}

調試單個測試用例配置片斷

{
    "name": "Launch test function",
    "type": "go",
    "request": "launch",
    "mode": "test",
    "program": "${workspaceFolder}",
    "args": [
        "-test.run",
        "MyTestFunction"
    ]
}

調試包中全部的測試用例配置片斷

{
    "name": "Launch test package",
    "type": "go",
    "request": "launch",
    "mode": "test",
    "program": "${workspaceFolder}"
}

調試構建二進制文件配置片斷

{
    "name": "Launch executable",
    "type": "go",
    "request": "launch",
    "mode": "exec",
    "program": "absolute-path-to-the-executable"
}

遠程調試

遠程調試須要在服務器上期一個無頭的 Delve 服務
例如:服務器

$ dlv debug --headless --listen=:2345 --log --api-version=2

若是須要傳給參數到程序中則須要將參數傳入到 Delve 服務中
例如:less

dlv debug --headless --listen=:2345 --log -- -myArg=123

launch.json 配置以下:工具

{
    "name": "Launch remote",
    "type": "go",
    "request": "launch",
    "mode": "remote",
    "remotePath": "服務器調試文件的目錄(絕對路徑)",
    "port": 2345,
    "host": "127.0.0.1",
    "program": "本地調試文件所在的目錄(絕對路徑)",
    "env": {}
}
  • 將上述配置中的 hostport 修改 Delve 服務所在的服務器ip和其監聽的端口號。
  • remotePath 應該配置爲調試文件的絕對路徑
  • program 須要配置本地機器文件所在的絕對路徑,是 remotePath 的一個副本

配置完成後,點擊調試按鈕,VS Code 將會項遠程的 dlv 服務發出調試指令,而不是使用本機的 dlv 實例。

參考連接

Debugging Go code using VS Code
Delve Installation

相關文章
相關標籤/搜索