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

0.前置條件

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

  • 在wsl下運(yùn)行我構(gòu)建的鏡像,此時(shí)掛載win10下的代碼目錄到鏡像中;
  • 然后在鏡像內(nèi)部運(yùn)行dlv debug相關(guān)命令
  • 在win10下設(shè)置好goland,開(kāi)啟debug
  • 觸發(fā)請(qǐng)求,開(kāi)始斷點(diǎn)調(diào)試。

1.docker 鏡像構(gòu)建

  • 注:如果不想自己build鏡像也可以直接拉起我制作的鏡像,只需要運(yùn)行 docker pull 10xjzheng/my-go:v1.0 即可跳過(guò)下面的構(gòu)建流程。
  • 編寫(xiě)Dockerfile,內(nèi)容如下:
FROM golang:1.14
# 設(shè)置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
  • 目錄內(nèi)容如下:
    image.png

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

2.運(yùn)行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) //設(shè)置訪問(wèn)路由
    err := http.ListenAndServe(":9090", nil) // 設(shè)置監(jiān)聽(tīng)端口
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }

}

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

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

然后執(zhí)行:

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

3.設(shè)置win10下的goland

image.png

image.png

image.png

image.png

image.png

image.png

開(kāi)啟調(diào)試后:


image.png

4.斷點(diǎn)調(diào)試

運(yùn)行命令:

 curl http://localhost:9090/hello

大功告成:


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

友情鏈接更多精彩內(nèi)容