vscode远程调试python程序,基于debugpy库

vscode 之所以能支持调试这么多种编程语言,其中一个原因就是微软定义了一套DAP协议(Debug Adapter Protocol),而vscode内置了DAP协议的客户端

DAP协议
https://microsoft.github.io/debug-adapter-protocol/overview

debugpy实现了下面的红色框中的部分

debugpy里面的Adapter负责和vscode这个调试客户端通信,debugpy的另外一部分是内嵌了一个pydevd库,这个pydevd库负责加载被调试的程序,给被调试的程序添加断点,运行一行代码后停在下一行代码,告知调试客户端当前调试到哪一行了......,只是pydevd的数据格式不是DAP协议的格式,Adapter相当于把它原本的格式转换成DAP协议的格式了。(pycharm调试程序用的就是pydevd库)

准备工作:

  • Windows电脑安装vscode,安装python相关插件
  • Linux主机,pip安装debugpy库
  • vscode打开被调试的python程序,Linux主机上也要存放相同的python程序

远程调试方式1

launch.json这样配置

最后生成的调试配置长这样,host,port是远程主机的ip,端口

在远程的Linux主机上面启动被调试的程序

选择前面设置的deubg配置,设置断点后,就可以调试了

可以看到vscode成功连接到远端的Adapter

远端的Linux主机,被调试的程序也有相应的输出内容

远程调试方式2

有时候,vscode所在的主机不能连接到远程的主机,比如远端是个容器,而且又没有暴露端口出来,但是远端的容器可以连接 vscode所在的主机,就可以用这种反向连接的办法

launch.json改成这样

先在vscode上面启动调试,vscode会等待adapter连接进来

Linux主机上面把--listen 改成--connect, ip改成vscode所在的主机ip

adapter连接到vscode所在主机后,继续运行,单步运行按钮就可用了

注意事项:在公网环境,像方式1那样让adapter监听在0.0.0.0:5678,可能会有不怀好意的DAP客户端连接到adapter,执行继续、单步运行指令,所以还是推荐监听在localhost:5678这样的地址,然后vscode所在的主机用SSH隧道的方式连接到adapter

相关推荐
装不满的克莱因瓶3 分钟前
自然语言处理常见任务——从文本理解到生成式AI的完整任务体系
人工智能·pytorch·python·深度学习·ai·自然语言处理
游戏开发爱好者87 分钟前
iPhone真机调试有哪些方法?一次定位推送权限问题时整理出来的几种方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
ptc学习者7 分钟前
python 中描述符@property property 大概的样子
开发语言·python
zmzb01039 分钟前
Python课后习题训练记录Day129
开发语言·python
秋931 分钟前
Python工程师面试常问提问和回答(AI工程化方向 · 2026版)
人工智能·python·面试
炎武丶航34 分钟前
LeNet-5深度学习详解:从手写数字识别到代码实战
人工智能·python·深度学习·机器学习·ai·cnn·lenet
sitellla34 分钟前
Pydub:用 Python 处理音频,不写废话
开发语言·python·其他·音视频
TechWayfarer44 分钟前
云服务器地域怎么选:用离线IP数据库识别用户来源并优化部署
服务器·数据库·python·tcp/ip·数据分析
梦想不只是梦与想1 小时前
Python 中的进程(Process)
python·进程·进程间通
郑洁文1 小时前
基于Python的恶意流量监测系统的设计与实现
开发语言·python