如何通过Python调用Go应用并在VSCode中同时调试两者?
实现Python脚本与Go CLI应用的联合调试
可以实现同时调试Python脚本和它启动的Go应用,按以下步骤操作:
1. 添加Go的Attach调试配置
你当前看到的配置里没有attach选项,是因为没手动添加。直接在.vscode/launch.json中补充Go的远程附加配置:
{ "name": "Attach to Go CLI", "type": "go", "request": "attach", "mode": "remote", "port": 2345, "host": "127.0.0.1" }
2. 修改Python脚本,让Go应用以调试模式启动
在Python的subprocess.Popen调用中,不能直接启动Go二进制,要通过Delve调试器(dlv)启动并开启调试端口,等待VSCode的调试器附加。修改后的代码示例:
import subprocess import time import os # 替换成你的Go二进制路径和启动参数 go_binary_path = "./your-go-cli-app" go_args = ["--your-cli-arg", "value"] # 用dlv启动Go应用,开启调试端口2345 debug_cmd = [ "dlv", "exec", go_binary_path, "--listen=:2345", "--headless=true", "--api-version=2", "--" ] + go_args # 启动Go调试进程 go_process = subprocess.Popen(debug_cmd, env=os.environ.copy()) # 等待2秒让调试服务初始化完成 time.sleep(2) # 继续执行Python脚本的后续逻辑 # ...
3. 配置复合调试实现一键启动
为了不用手动先后启动两个调试会话,在launch.json中添加复合调试配置,实现一键启动Python调试并自动附加Go调试器:
{ "version": "0.2.0", "configurations": [ { "name": "Python API", "type": "python", "request": "launch", "program": "foo.py", "justMyCode": true, }, { "name": "Attach to Go CLI", "type": "go", "request": "attach", "mode": "remote", "port": 2345, "host": "127.0.0.1" } ], "compounds": [ { "name": "Python + Go联合调试", "configurations": ["Python API", "Attach to Go CLI"], "stopAll": true } ] }
前置准备
- 确保已安装Delve调试器:执行
go install github.com/go-delve/delve/cmd/dlv@latest - 如果是自行编译Go二进制,需带调试信息:
go build -gcflags="all=-N -l"(禁用优化和内联,方便调试)
内容的提问来源于stack exchange,提问作者HelloWorld
相关产品推荐
相关产品推荐

