You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用GoLand/IntelliJ/VSCode附加调试Mac平台Go编译的运行中进程?

可以!Delve完全支持附加到已运行的Go进程

当然可行!Delve对附加正在运行的Go进程有完善的支持,只要你的myapp二进制保留了调试信息(用常规go build编译的话默认是保留的,这点不用额外担心)。下面是针对Mac(darwin amd64)环境的具体操作步骤:

步骤1:获取目标进程的PID

首先得拿到正在运行的myapp进程ID(PID),两种简单方法任选:

  • 终端命令查询:
    ps aux | grep myapp
    
    从输出里找到对应进程的PID(通常是第二列的数值)。
  • 图形化方式:打开「活动监视器」,搜索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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:15:07