大部分人都用过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://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。