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

如何在VS Code中正确脱离远程调试会话且不终止目标进程?

解决VS Code远程调试结束后不终止目标进程的问题

方法一:在现有Launch模式中添加detachOnExit配置

直接修改你的launch.json,加入"detachOnExit": true参数,这个配置会让调试会话结束时,gdb仅从目标进程**detach(分离)**而非终止它:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug",
            "type": "cppdbg",
            "request": "launch",
            "preLaunchTask": "Debug: Start gdbserver",
            "program": "/home/developer/src/build/Debug/myapp_unstripped",
            "cwd": "/home/developer/src",
            "MIMode": "gdb",
            "miDebuggerPath": "aarch64-linux-gnu-gdb",
            "miDebuggerServerAddress": "IP:1234",
            "stopAtEntry": false,
            "logging": {"engineLogging": false},
            "detachOnExit": true
        }
    ]
}

启用该参数后,当你点击VS Code的停止调试按钮时,gdb会向远程gdbserver发送detach命令,目标进程会继续正常运行,不会被终止。

方法二:切换到Attach模式并跳过本地进程选择

如果你倾向于用Attach模式,可以通过配置避免本地进程选择器弹出。修改launch.json为如下Attach模式配置,直接连接到已启动的远程gdbserver:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug Attach Remote",
            "type": "cppdbg",
            "request": "attach",
            "program": "/home/developer/src/build/Debug/myapp_unstripped",
            "cwd": "/home/developer/src",
            "MIMode": "gdb",
            "miDebuggerPath": "aarch64-linux-gnu-gdb",
            "miDebuggerServerAddress": "IP:1234",
            "processId": ""
        }
    ]
}

此时VS Code不会弹出本地进程选择器,直接连接到远程gdbserver进行调试。Attach模式默认在调试结束时仅执行detach操作,不会杀死目标进程。

额外注意事项

  • 确保目标端的gdbserver是通过gdbserver :1234 --attach $(pidof myapp)启动的(即attach到已有进程,而非启动新进程),这样detach后进程才能继续运行。
  • 调试结束后,远程的gdbserver会退出,但目标进程不受影响。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 18:42:34