当前位置: 首页 > news >正文

PyCharm利用pydevd-pycharm实现Python远程调试

一、介绍

Python远程调试,即在远程机器上运行python代码在本地进行调试,之前文章里的方式方法已经out,现在更新为当前版本已经成功实现远程调试的新内容。

依赖环境:

  • 本地Pycharm:PyCharm 2022.1.3(Professional Edition)
    IP:192.168.30.111

  • 远程Ubuntu:VMware Ubuntu 20.04.03
    IP:192.168.30.132

二、安装

远程主机安装:pydevd-pycharm库,且需要安装指定版本:
pip3 install pydevd-pycharm~=221.5921.27 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

三、配置

3.1 PyCharm端配置

  1. 点击PyCharm菜单栏:Edit Configurations
    在这里插入图片描述

  2. Run/Debug Configurations中点击+加号按钮,在弹出列表中选择Python Debug Server
    在这里插入图片描述

  3. 需要配置字段如下:

  • Name:ubuntu python
  • IDE host name:192.168.30.111
  • Port:2233
  1. 点击OK保存该配置

至此,本地端PyCharm配置完成,配置无误可以在菜单栏看到ubuntu python这个配置,且图标无正常状态,如果上述配置项有误,则会展示打红叉标记的图标,比如配置错误的端口号。

3.2 Ubuntu端配置

远程环境需要的配置主要是修改被调试的代码文件,在代码中增加相关配置:

  • 被调试代码文件:/home/test/super2.py
  • 需要增加的配置:
import pydevd_pycharm
pydevd_pycharm.settrace('192.168.30.111', port=2233, stdoutToServer=True, stderrToServer=True)

class A:
    def __init__(self):
        self.n = 2

    def add(self, m):
        print('self is {0} @A.add'.format(self))
        self.n += m


class B(A):
    def __init__(self):
        self.n = 3

    def add(self, m):
        print('self is {0} @B.add'.format(self))
        super().add(m)
        self.n += 3


b = B()
b.add(2)
print(b.n)

需要导入远程调试库,配置信息需要和PyCharm端配置的内容保持一致:
在这里插入图片描述
至此,远程被调试的代码需要的配置完成。

四、实际调试

  1. 在本地PyCharm端,打开调试服务,即点击菜单栏中ubuntu python后的Debug ubuntu python按钮:
    在这里插入图片描述

  2. 启动成功,会出现等待连接的提示信息:
    在这里插入图片描述

  3. 此时,我们需要在Ubuntu端,启动被调试的代码:python3 super2.py,运行成功后Ubuntu端不会里面执行代码,需要等待远程PyCharm端开始调试过程,才会执行代码并打印结果,而PyCharm端会在Console下展示连接成功的提示:Connected to pydev debugger (build 221.5921.27)
    在这里插入图片描述

  4. 此时我们会看到PyCharm弹出了一个提示,这个提示里的内容就是我们调试的是远程文件,而本地没有与之对应的文件,可以通过提示给出的三个解决方案进行解决,这里我选择了:Download选项
    在这里插入图片描述

  5. 最后开始执行具体的调试即可:
    在这里插入图片描述

相关文章:

  • Mysql中DQL(查询类)语句的执行顺序
  • CMake Tutorial 巡礼(2)_添加库
  • java毕业设计蛋糕店会员系统Mybatis+系统+数据库+调试部署
  • IntelliJ IDEA中构建Spring Boot的项目
  • 计算机视觉项目-实时目标追踪
  • 初始数据结构
  • Qt5开发从入门到精通——第六篇一节( 图像与图片——位置相关函数 )
  • 最新版校园招聘进大厂系列----------(5)百度篇 -----未完待续
  • 计算机网络——物理层(互联网接入技术)
  • IntegralUI Web 22.3组件
  • 细说卷积神经网络(CNN)中所谓的“感受野”(Receptive Field)
  • Python 自动化教程(5) : 自动生成Word文件
  • 2022 9.8 模拟
  • Python 页面解析:Beautiful Soup库的使用
  • 请你设计一个LRU(最近最少使用)缓存约束的数据结构
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • CentOS 7 修改主机名
  • CSS居中完全指南——构建CSS居中决策树
  • extjs4学习之配置
  • Javascript 原型链
  • JavaScript函数式编程(一)
  • Java的Interrupt与线程中断
  • Java精华积累:初学者都应该搞懂的问题
  • jquery cookie
  • JS实现简单的MVC模式开发小游戏
  • vue数据传递--我有特殊的实现技巧
  • 如何进阶一名有竞争力的程序员?
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 小程序01:wepy框架整合iview webapp UI
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 交换综合实验一
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C语言)共用体union的用法举例
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET开源快速、强大、免费的电子表格组件
  • /bin、/sbin、/usr/bin、/usr/sbin
  • :not(:first-child)和:not(:last-child)的用法
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • []常用AT命令解释()
  • [android] 切换界面的通用处理
  • [Android] 修改设备访问权限
  • [autojs]autojs开关按钮的简单使用
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子
  • [CF543A]/[CF544C]Writing Code
  • [CTF]php is_numeric绕过
  • [i.MX]飞思卡尔IMX6处理器的GPIO-IOMUX_PAD说明
  • [IE6 only]关于Flash/Flex,返回数据产生流错误Error #2032的解决方式