这个问题是关于使用 delve 调试器远程调试 golang 代码。具体来说,如何在不终止远程进程的情况下断开客户端调试器的连接。
我在需要调试的 docker 容器内运行一个进程。该进程在 docker 的入口点通过以下方式启动
dlv debug /go/src/path/to/package --headless --listen=:2345 --log
docker 容器通过以下方式启动
docker run --rm -it -p 2345:2345 my_image:tag
从我的工作站,我通过以下方式连接到 delve 无头服务器
$dlv connect :2345
Type 'help' for list of commands.
(dlv)
Run Code Online (Sandbox Code Playgroud)
此时我会进行一些调试。当我完成后,我希望能够在不终止正在调试的进程的情况下断开与无头服务器的连接。
(dlv) exit
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的命令断开了 delve 客户端与无头服务器的连接,并且还终止了我正在调试的远程进程,并且由于那是 docker 容器的入口点,因此容器停止。我想避免因终止远程进程而断开连接,如何?
我已经查看了 的论点(dlv) exit
,但看不到有帮助的论点。
(dlv) help exit
Exit the debugger.
exit [-c]
When connected to a headless instance started with the --accept-multiclient, pass -c to resume the execution of the target process before disconnecting.
(dlv) exit -c
Command failed: not connected to an --accept-multiclient server
Run Code Online (Sandbox Code Playgroud)
使用以下参数启动 delve:
dlv debug /go/src/path/to/package --headless --listen=:2345 --log --continue --accept-multiclient
Run Code Online (Sandbox Code Playgroud)
exit -c
这将在启动时继续调试过程,并允许您从 delve 客户端使用。确保清除所有断点,否则您的进程将陷入困境。
来源:https ://github.com/go-delve/delve/issues/2324#issuecomment-1024700094
归档时间: |
|
查看次数: |
2377 次 |
最近记录: |