最近有一个需求,需要调试在远程服务器上运行的python项目。刚开始打算用ipdb直接调试,后来发现对多线程的支持有点问题。
接着又想用vscode的远程开发功能,直接打开远程服务器上的项目文件进行调试。vscode本身的这个功能十分的强大,也很方便。奈何网络不给力,SSH连接经常断,体验很不好。
所以,选择了,在远程服务器使用debugpy运行python代码,本地使用vscode连接上去直接调试。效果非常不错。
debugpy是微软开源的一个工具,配合vscode使用,十分的nice。
下面简单介绍一下使用方法,供大家参考。
首先假设我们有下面一段代码,存放于本地的test目录下:
#!/usr/bin/python3
import time
print("script is running...")
a = 0
while True:
a = a + 1
a = a + 2
print("a is {}".format(a))
time.sleep(3)
我们首先将文件夹test导入到vscode中,并创建工作区:
然后我们准备服务端的环境。
我还是习惯先创建一个virtualenv的环境用来演示,在虚拟环境中安装debugpy:
root@nick-dev-vm01:/home/vpndev# mkdir demo
root@nick-dev-vm01:/home/vpndev# cd demo
root@nick-dev-vm01:/home/vpndev/demo# python3 -m venv .venv
root@nick-dev-vm01:/home/vpndev/demo# source .venv/bin/activate
(.venv) root@nick-dev-vm01:/home/vpndev/demo# pip3 install debugpy
我们将刚才的python示例代码也保存到服务器的这个目录下:
(.venv) root@nick-dev-vm01:/home/vpndev/demo# file test.py
test.py: Python script, ASCII text executable
在服务器端使用debugpy来运行python代码(也可以加上--wait-for-client参数,表示等待客户端连接上来才开始运行代码):
(.venv) root@nick-dev-vm01:/home/vpndev/demo# python3 -m debugpy --listen 0.0.0.0:5678 test.py
好了,下面我们来配置本地的vscode:
点击侧边栏的调试按钮,然后点击create a launch.json:
在弹出的框框中选择workspace:
在选择Remote Attach:
输入你的服务器的IP地址:
输入端口号:
这样配置文件就生成好了。
我们回到test.py文件,点击左上角的调试按钮,连接成功后就可以看到出现一个调试的浮标栏:
我们在代码中第七行的这个位置点击一下,会出现一个小红点,这样我们就在这里设置了一个断点:
过一会儿,代码运行到这里就会被断住,侧边栏可以参考此时各个变量的值,底部DEBUG CONSOLE也可以输入变量值查看:
鼠标放置到浮标栏,可以看到每个按钮的作用:
好了,忘记ipdb,愉快地玩耍吧!
(注:为了演示方便,这里服务端直接开放了5678端口,如果你有安全性方面的考虑,可以考虑使用端口转发,具体可以参考vscode官方手册)
类似的,我们也能远程调试容器中的代码。后面有机会我们在说。
本文暂时没有评论,来添加一个吧(●'◡'●)