如何在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
相关产品推荐
相关产品推荐

