win10下goland&dlv&docker打造遠程斷點調試環(huán)境

0.前置條件

具備docker運行環(huán)境。
本人的環(huán)境是:在win10的wsl下安裝了docker運行環(huán)境。配置可以參照:win10下wsl2(Ubuntu)搭建及docker安裝、zsh&&cmder終端美化
簡單流程:

  • 在wsl下運行我構建的鏡像,此時掛載win10下的代碼目錄到鏡像中;
  • 然后在鏡像內部運行dlv debug相關命令
  • 在win10下設置好goland,開啟debug
  • 觸發(fā)請求,開始斷點調試。

1.docker 鏡像構建

  • 注:如果不想自己build鏡像也可以直接拉起我制作的鏡像,只需要運行 docker pull 10xjzheng/my-go:v1.0 即可跳過下面的構建流程。
  • 編寫Dockerfile,內容如下:
FROM golang:1.14
# 設置go mod 代理
RUN go env -w GO111MODULE=on
RUN go env -w GOPROXY=https://goproxy.io,direct
RUN go get -v github.com/go-delve/delve/cmd/dlv
RUN dlv version
  • 目錄內容如下:
    image.png

    在當前目錄執(zhí)行:docker build -t 10xjzheng/my-go:v1.0 . 最后的點別丟了。
  • 執(zhí)行命令 docker images 可以看到build完的鏡像。
    image.png

2.運行demo

server.go 代碼如下:

package main

import (
    "fmt"
    "log"
    "net/http"
    "strings"
)

func sayHelloWord(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()       // 解析參數(shù)
    fmt.Println(r.Form)
    for k, v := range r.Form {
        fmt.Println("key:", k)
        fmt.Println("value", strings.Join(v, ""))
    }
    fmt.Fprintf(w, "hello world")
}

func main() {
    http.HandleFunc("/hello", sayHelloWord) //設置訪問路由
    err := http.ListenAndServe(":9090", nil) // 設置監(jiān)聽端口
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }

}

執(zhí)行docker命令進入容器:

docker run -it -v "$PWD":"/go/src"  -p 9090:9090 -p 2345:2345 10xjzheng/my-go:v1.0
# 我這里掛載的是我win10下的$GOAPTH/src目錄,這里似乎需要保證遠程被調試的代碼和本地代碼都必須在 $GOAPTH/src 目錄下

然后執(zhí)行:

dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient  TestProject/server.go
# --accept-multiclient  參數(shù)的意思是:允許多個客戶端連接

3.設置win10下的goland

image.png

image.png

image.png

image.png

image.png

image.png

開啟調試后:


image.png

4.斷點調試

運行命令:

 curl http://localhost:9090/hello

大功告成:


image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容