大部分人都用过goland的debug,但这种debug只是一个初级阶段的应用,适合用于单体服务,数据流转比较单一的,在开发或调试过程中,http请求可以直接发到由goland启动的进程中。

但如果是请求并非直接到goland,而是发送给已经是二进制的进程呢?

如果是单纯点击“Debug”按钮的话,虽然进入了debug状态,但会发现http请求发起了,但没有被goland捕捉到,所以没有办法通过goland的“Step into”、“Step out”等调试按钮实现调试过程。

想本地调试GO远程服务器的代码,参考: https://www.jianshu.com/p/b52...

解决方案: Attach to Process

package main

import (
    "github.com/gin-gonic/gin"
)
func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })
    r.Run()
}
①为了能够Attach to Process进程绑定,方便调试,需要用以下命令生成二进制文件,运行程序

go build -gcflags="all=-N -l"     # -gcflags="all=-N -l"目的是去掉编译优化,方便调试

②进入goland,打上断点,鼠标点击菜单栏“Run”

③点击Attach to Process

④这时候ide会弹出进程选择框,即选择绑定哪个进程,进行调试。

⑤绑定进程后就进入到了ide的调试状态

注意:一定要用指定的命令生成的二进制文件,才能被ide捕捉到,否则就会说“No process to attach to”

go build -gcflags="all=-N -l"    # -gcflags="all=-N -l"目的是去掉编译优化,方便调试

实验一下,发起请求,可以看到请求在之前打的断点中拦住了,说明操作是正确的,可以debug本地机器的go进程了。

浏览器访问 http://127.0.0.1:8080/ping

image.png

参考文章: https://blog.csdn.net/qq_4240...


goper
413 声望25 粉丝

go 后端开发