专业的编程技术博客社区

网站首页 > 博客文章 正文

Python调试还在用ipdb?debugpy快速入门

baijin 2024-09-04 02:11:41 博客文章 5 ℃ 0 评论

最近有一个需求,需要调试在远程服务器上运行的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官方手册)

类似的,我们也能远程调试容器中的代码。后面有机会我们在说。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表