如何用GoLand/IntelliJ/VSCode附加调试Mac平台Go编译的运行中进程?
可以!Delve完全支持附加到已运行的Go进程
当然可行!Delve对附加正在运行的Go进程有完善的支持,只要你的myapp二进制保留了调试信息(用常规go build编译的话默认是保留的,这点不用额外担心)。下面是针对Mac(darwin amd64)环境的具体操作步骤:
步骤1:获取目标进程的PID
首先得拿到正在运行的myapp进程ID(PID),两种简单方法任选:
- 终端命令查询:
从输出里找到对应进程的PID(通常是第二列的数值)。ps aux | grep myapp - 图形化方式:打开「活动监视器」,搜索
myapp,在「PID」列查看数值。
步骤2:用Delve附加到进程
打开终端,执行Delve的attach命令,把<PID>替换成你刚才拿到的进程ID:
dlv attach <PID>
权限问题处理
第一次在Mac上用Delve附加进程时,系统可能会弹出权限请求,要求允许dlv调试其他进程。你需要进入「系统设置」→「隐私与安全性」,找到对应的权限请求并点击「允许」。如果还是遇到权限报错,可以临时用sudo运行命令(不推荐长期这么做,优先通过系统授权解决):
sudo dlv attach <PID>
步骤3:开始调试
附加成功后会进入Delve的交互调试环境,接下来就能执行常规调试操作:
- 设置断点:比如给指定函数加断点
break package/function,或者直接给主函数加断点break main.main - 恢复进程运行:输入
continue(简写c),进程会继续执行直到触发断点 - 单步控制:
next(简写n,跳过函数调用)、step(简写s,进入函数内部) - 查看变量:
print <变量名>(简写p) - 查看调用栈:
stack(简写bt)
额外注意事项
- 如果你的
myapp是用go build -ldflags="-s -w"编译的(该参数会去掉符号表和调试信息),Delve无法正常附加调试。这种情况需要重新编译,去掉-s -w参数:go build -o myapp - 如果你习惯用IDE调试(比如Goland、VS Code),也可以直接在IDE里找到「附加到进程」的功能,选择
myapp进程即可,操作逻辑和命令行一致,更可视化。
内容的提问来源于stack exchange,提问作者07_05_GuyT
相关产品推荐
相关产品推荐

