VS Code的其中一个关键的特征就是它极好的调试支持。VS Code的内置调试器帮助加速你的编辑、编译和调试循环。
调试扩展
- VS Code有Node.js运行的内置的调试支持,并且能够调试Java脚本或者任何其他可以转译为JavaScript的语言。
- 为了调试其他语言(包括PHP,Ruby,Python,C++),需要在VS Code的扩展市场查找相应的扩展。
在VS Code中进行Python的调试
- Python扩展支持集中类型的Python应用的调试。
- 简短的过一下基础的调试,首先在第2行打一个断点。
- 之后,为了初始化调试器,按键盘的F5键。注意: VS Code使用JSON文件来做大量的配置,launch.json是包含调试配置的文件的标准的名字。
- 解释一下这些不同的配置,一个配置在一个调试对话中驱使着VS Code的行为。launch.json文件被存储在你的工作空间的.vscode文件夹下。
- 为了初始化调试的配置,首先点击左边菜单的下面这个按钮:
- 打开launch.json文件,它包含一个预定义好的配置。
- 你也能够添加其他的设置,比如说args,它没有被包含在标准的配置中。
- 技巧:在一个项目中,创建一个配置来运行一个特定的startup文件非常有用。比如说,如果你总是想要运行startup.py文件,同时带有参数–port 1593,每次当你开始调试器的时候,可以创建一个像下面的条目:
{
"name": "Python: startup.py",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/startup.py",
"args" : ["--port", "1593"]
},
- name提供在VS Code的折叠列表中的名字;type标识使用的调试器的类型,对于Python代码设置为python就好;request指明在什么模式下来开启调试:
- launch:开启在program上特定的文件上的调试器;
- attach:将调试器附加于一个已经运行的进程。
使用SSH的远程脚本调试
- 远程调试允许你在本地一步一步过程序在VS Code内,当它实际上运行在一个远程的电脑上。
- 在本地电脑上,创建一个SSH tunnel通过在命令行运行下面的命令:
ssh -2 -L 5678:localhost:5678 -i identityfile user@1.2.3.4
- 以连接matpool中的机器为例:
ssh -2 -L 22:hz-t2.matpool.com:26000 root@hz-t2.matpool.com
- 在你的VS Code工作空间中,创建一个服务于远程调试的配置在你的launch.json文件,将端口号和你在ssh命令中使用的端口号设为一致。
{
"name": "Python: Attach",
"type": "python",
"request": "attach",
"port": 5678,
"host": "localhost",
"pathMappings": [
{
"localRoot": "${workspaceFolder}", // Maps C:\Users\user1\project1
"remoteRoot": "." // To current working directory ~/project1
}
]
}
- 有两种方式来连接到远程进程,在源代码中,增加下面的代码行,将address替换为远程电脑的ip地址和端口号。
import debugpy
# Allow other computers to attach to debugpy at this IP address and port.
debugpy.listen(('1.2.3.4', 5678))
# Pause the program until a remote debugger is attached
debugpy.wait_for_client()
- IP地址被使用在listen方法中的,应该是远程电脑的私有IP地址。你之后可以正常得运行程序,使得它知道调试器连接上才开始。
- 通过debugpy来运行远程进程,比如说:
python3 -m debugpy --listen 1.2.3.4:5678 --wait-for-client -m myproject
- 在本地电脑上,切换到Run and Debug视图,选择Python:Attach的配置。在代码中设置一个断点。
剩下的详情参加文档:
https://code.visualstudio.com/docs/python/debugging#_remote-script-debugging-with-ssh