远程调试配置的核心在于launch.json文件的正确设置,需指定调试类型、连接方式、主机端口及SSH隧道。首先在远程环境启动调试代理:Node.js使用--inspect-brk=0.0.0.0:9229,Python通过debugpy.listen(("0.0.0.0", 5678))。随后在VSCode中配置launch.json,Node.js用"address"和"port",Python用"connect"对象指定连接信息,并设置localRoot与remoteRoot或pathMappings实现源码映射。推荐通过SSH隧道转发端口(如ssh -L 9229:localhost:9229)以保障安全。常见问题包括防火墙阻断、应用未监听0.0.0.0、SSH隧道错误等,可通过netstat、telnet和VSCode日志排查。还需确保远程环境语言版本一致、代码同步、SSH免密登录,并在容器化场景下正确映射端口和路径。不同语言差异体现在调试协议:Node.js内置Inspector,Python依赖debugpy,Java使用JDWP,Go依赖Delve,但核心逻辑均为本地调试器连接远程调试代理。

VSCode的远程调试配置,核心在于
launch.json
要让VSCode的调试器支持远程调试,我们通常需要以下几个步骤,以Node.js和Python为例,因为它们代表了两种常见的调试协议和配置模式:
1. 准备远程环境
node --inspect-brk=0.0.0.0:9229 your-app.js
这里的
0.0.0.0
9229
--inspect-brk
debugpy
pip install debugpy
然后,在你的Python脚本中,或者通过命令行,启动
debugpy
import debugpy
debugpy.listen(("0.0.0.0", 5678)) # 监听所有接口的5678端口
debugpy.wait_for_client() # 等待调试器连接
# 你的应用代码或者通过命令行:
python -m debugpy --listen 0.0.0.0:5678 --wait-for-client your_script.py
--wait-for-client
2. 配置launch.json
在VSCode中,打开你的项目,进入“运行和调试”视图(或按
Ctrl+Shift+D
launch.json
Node.js 远程附加配置示例:
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach to Remote Node",
"type": "node",
"request": "attach",
"address": "localhost", // 如果使用SSH隧道,这里是本地转发端口
"port": 9229,
"localRoot": "${workspaceFolder}", // 本地项目根目录
"remoteRoot": "/path/to/your/remote/app", // 远程项目根目录
"protocol": "inspector",
"skipFiles": [
"<node_internals>/**"
]
}
]
}这里的
address
port
address
localRoot
remoteRoot
Python 远程附加配置示例:
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach to Remote Python",
"type": "python",
"request": "attach",
"connect": {
"host": "localhost", // 如果使用SSH隧道,这里是本地转发端口
"port": 5678
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/path/to/your/remote/app" // 远程项目根目录
}
],
"justMyCode": false // 根据需要设置,是否只调试自己的代码
}
]
}Python的配置与Node.js类似,
connect.host
connect.port
pathMappings
3. 建立SSH隧道(推荐且常用)
由于直接暴露调试端口到公网存在安全风险,通常我们会通过SSH隧道将远程调试端口转发到本地。
在本地终端执行:
本文档主要讲述的是eclipse maven工程配置说明;编写本文的目的解决因环境问题带来的一系别问题,比如类没找到异常,JAR新旧并成,导致有些方法不可用,支持热拔插式的修改,当调试程序时,修改后不用重启tomcat等问题;感兴趣的朋友可以过来看看
0
ssh -L 9229:localhost:9229 user@remote_host # 或对于Python ssh -L 5678:localhost:5678 user@remote_host
这条命令的意思是:将远程服务器(
remote_host
localhost:9229
9229
localhost:9229
localhost:5678
4. 启动调试
SSH隧道建立后,在VSCode中选择你配置好的调试任务(如“Attach to Remote Node”),然后点击运行按钮。如果一切顺利,VSCode会连接到远程应用,你就可以设置断点、单步执行、检查变量了。
远程调试中,连接问题是家常便饭,我个人就遇到过不少。最让人头疼的往往是那些看似简单却又难以捉摸的配置错误。排查这些问题,其实有点像侦探工作,需要一步步缩小范围。
一个常见的问题是端口不通。这可能由几个原因引起:
ufw
firewalld
sudo ufw status
sudo firewall-cmd --list-all
sudo ufw allow 9229/tcp
sudo firewall-cmd --add-port=9229/tcp --permanent
127.0.0.1
0.0.0.0
127.0.0.1
--inspect
debugpy.listen
ssh -L 9229:localhost:9229
0.0.0.0:9229
localhost:9229
192.168.1.100:9229
ssh -L 9229:192.168.1.100:9229
排查步骤:
ping remote_host
netstat -tulnp | grep <port>
lsof -i :<port>
telnet localhost <local_forwarded_port>
telnet localhost 9229
launch.json
除了
launch.json
debugpy
rsync
~/.ssh/authorized_keys
config
~/.ssh/config
docker run -p 9229:9229 ...
host
bridge
launch.json
remoteRoot
remoteRoot
这些配置的正确性,直接决定了远程调试的“舒适度”和“成功率”。忽视任何一个环节,都可能导致你花大量时间去排查那些与代码本身无关的问题。
虽然远程调试的核心理念——本地调试器连接远程调试代理——是通用的,但在不同编程语言或框架下,具体的配置和实现机制确实存在显著差异。这主要是因为它们使用了不同的调试协议和启动调试代理的方式。
Node.js (Chrome DevTools Protocol / Inspector Protocol):
--inspect
--inspect-brk
launch.json
type
"node"
request
"attach"
port
address
Python (Debug Adapter Protocol - DAP):
debugpy
debugpy
python -m debugpy
debugpy
launch.json
type
"python"
request
"attach"
connect.host
connect.port
debugpy
Java (Java Debug Wire Protocol - JDWP / JPDA):
launch.json
type
"java"
request
"attach"
hostName
port
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar your-app.jar
这里的
address=*:5005
Go (Delve):
launch.json
type
"go"
request
"attach"
host
port
总的来说,不同语言和框架的差异主要体现在:调试代理是内置的还是需要额外安装的库;启动调试代理的命令行参数或代码片段;以及
launch.json
type
以上就是VSCode 的调试器如何配置以支持远程调试?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号