Go语言 使用热重载进行深入调试

aamkag61  于 2024-01-04  发布在  Go
关注(0)|答案(1)|浏览(104)

我目前的开发设置是一个docker文件,它在每次使用CompileDaemon进行保存时编译代码,并使用Delve进行调试。
目前我几乎可以让所有的东西都工作。唯一的问题是当我再次尝试启动调试时,端口已经在使用中了。
在docker容器中使用debug来完成live reload是否是一种更好的方法?
Dockerfile:

FROM golang:latest

RUN go get github.com/githubnemo/CompileDaemon && \
  go get github.com/go-delve/delve/cmd/dlv  
WORKDIR /app
COPY go.* ./
RUN go mod download

COPY ./ ./

EXPOSE 5000 2345
# echo 1 is to block build command 
ENTRYPOINT CompileDaemon --build="echo 1" --command="dlv debug --headless --listen=:2345 --api-version=2 --accept-multiclient cmd/app/main.go"

字符串

5lhxktic

5lhxktic1#

如果你在PudeDaemon中使用了callfulkill和stop命令,这是可行的,因为我希望我的应用程序的子进程被dlv杀死,而在内部,PudeDaemon使用os.process.Kill(),它不会杀死整个进程树,只是dlv一个。如果只有dlv被杀死,go进程仍然会运行,所以新的dlv不能在同一个端口上启动同一个进程,这会导致像[GIN-debug] [ERROR] listen tcp :5100: bind: address already in use这样的错误。
为了确保go进程被杀死,对我有效的完整命令是:

ENTRYPOINT CompileDaemon -log-prefix=false -command-stop=true -graceful-kill=true -build="go build -o __debug_service ./" -command="dlv debug --listen=:2001 --continue --headless=true --api-version=2 --accept-multiclient"

字符串

相关问题