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

python远程调试_python基础===利用PyCharm进行Python远程调试(转)

背景描述

有时候Python应用的代码在本地开发环境运行十分正常,但是放到线上以后却出现了莫名其妙的异常,经过再三排查以后还是找不到问题原因,于是就在想,要是可以在服务器环境中进行单步跟踪调试就好了。

然而,在服务器系统上安装一个IDE肯定是不现实的;通过SSH远程到服务器端,采用pdb进行调试虽然可行,但是操作还是较为繁琐,而且也不够直观。

那么,是否可以将开发环境中的IDE与服务器环境相连,实现利用开发环境的IDE调试服务器环境中运行的程序呢? 答案是肯定的,这就是远程调试(Remote Debug)。

远程调试的工作原理

远程调试的功能在Eclipse、IntelliJ IDEA等大型IDE中均有支持,实现原理都基本相同,这里采用PyCharm进行说明。

在远程调试的模式下,PyCharm(IDE)扮演服务端(Server)的角色,而运行在远程计算机上的应用程序扮演客户端(Client)的角色。正因如此,进行远程调试时,需要先在本地开发环境中设定端口并启动IDE,IDE会对设定的端口开始监听,等待客户端的连接请求;那远程计算机中的应用程序又是怎样与IDE建立通讯连接的呢?

针对远程调试功能,PyCharm提供了pydevd模块,该模块以pycharm-debug.egg的形式存在于PyCharm的安装路径中。远程计算机安装该库文件后,然后就可以调用pydevd.settrace方法,该方法会指定IDE所在机器的IP地址和监听的端口号,用于与IDE建立连接;建立连接后,便可在IDE中对远程在远程计算机中的程序进行单步调试。

远程调试的配置方法

1、在远程计算机上安装pydevd模块

首先,在本地开发环境的PyCharm安装路径中找到pycharm-debug.egg文件(若远程计算机运行的是Python3,则需要pycharm-debug-py3k.egg);

然后,将pycharm-debug.egg文件拷贝至远程计算机,在远程计算机中将pycharm-debug.egg添加至引用路径,可以采用多种方式:

采用easy_install pycharm-debug.egg命令进行安装(pip命令无法安装,只能使用easy_install)

将pycharm-debug.egg添加至PYTHONPATH或sys.path: import sys; sys.path.append('/home/leo/app-dependancies/pycharm-debug.egg')

解压pycharm-debug.egg,将其中的pydev文件夹拷贝至远程应用程序目录下

最后,在远程计算机的Python命令行中输入import pydevd,若没有报错则说明pydevd模块安装成功。

2、在本地开发环境的PyCharm中进行监听配置

在PyCharm中配置说明如下:

【Run】->【Edit Configurations】

【Add New Configuration】->【Python Remote Debug】

填写Local host name和Port,其中Local host name指的是本机开发环境的IP地址,而Port则随便填写一个10000以上的即可;需要注意的是,由于远程计算机需要连接至本地开发环境,因此本地IP地址应该保证远程可以访问得到

【Apply】and【OK】

3、在本地开发环境的PyCharm中配置Mapping映射

4、在远程计算机的应用程序中插入代码

将如下代码插入至远程计算机的应用程序中。

import pydevd

pydevd.settrace('100.84.48.156', port=31235, stdoutToServer=True, stderrToServer=True)

其中,IP地址和端口号要与PyCharm中的监听配置保持一致。

5、在PyCharm中启动Debug Server

【Run】->【Debug…】,选择刚创建的远程调试配置项,在Debug Console中会显示如下信息:

Starting debug server at port 31235

Waiting for process connection...

Use the following code to connect to the debugger:

import pydevd

pydevd.settrace('100.84.48.156', port=31235, stdoutToServer=True, stderrToServer=True)

这说明Debug Server已经启动并处于监听状态。

6、在远程计算机中启动应用程序

在远程计算机中启动应用程序,当执行到pydevd.settrace语句时,便会与本地开发环境中的PyCharm建立通讯连接,接下来便可以在本地IDE中进行单步调试了。

需要注意的是,本地开发环境必须保证IP地址和端口号可从远程计算机访问得到,否则会无法建立连接。

$ telnet 100.84.48.156 31235

Trying 100.84.48.156...

telnet: Unable to connect to remote host: Connection refused

$ python devicedectector.py

Could not connect to 100.84.48.156: 31236

Traceback (most recent call last):

File "/usr/local/lib/python2.7/dist-packages/pycharm-debug.egg/pydevd_comm.py", line 478, in StartClient

s.connect((host, port))

File "/usr/lib/python2.7/socket.py", line 224, in meth

return getattr(self._sock,name)(*args)

error: [Errno 111] Connection refused

相关文章:

  • JAVA实现整句汉字拆分、转换为ASCII
  • numpy有什么功能python_Numpy的介绍与基本使用方法
  • 在Window XP家庭版上安装IIS
  • python中表达式4+0.5值的数据类型为_Python之路【第五篇】:Python基本数据类型
  • 单片机c语言必背代码_单片机入门-要从汇编开始
  • 敬琏:货币政策
  • sql 一段时间内相同的只统计一次_DBA的五款最佳SQL查询优化工具,收藏了
  • 什么样的公司程序员待遇好?
  • python中线性回归的标签可以是分类的吗_python – Spark中的分组线性回归
  • 关于就业叨咕几句
  • 滴滴抢单功能实现_为什么说滴滴货运会给货运市场带来很大的变化?
  • 网站特殊设计技巧(转贴,感谢发布人的整理)
  • python实现b树多条件检索_数据库索引算法——B树与B+树
  • python中fontproperties_Python读书笔记:70个注意的小Notes
  • 如何快速的成为一个合格的Oracle DBA?
  • AngularJS指令开发(1)——参数详解
  • ES10 特性的完整指南
  • HTTP--网络协议分层,http历史(二)
  • Java到底能干嘛?
  • Java多态
  • js ES6 求数组的交集,并集,还有差集
  • Nodejs和JavaWeb协助开发
  • Odoo domain写法及运用
  • ReactNative开发常用的三方模块
  • Yii源码解读-服务定位器(Service Locator)
  • 分享一份非常强势的Android面试题
  • 类orAPI - 收藏集 - 掘金
  • 面试总结JavaScript篇
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 移动端唤起键盘时取消position:fixed定位
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 组复制官方翻译九、Group Replication Technical Details
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • "无招胜有招"nbsp;史上最全的互…
  • ###C语言程序设计-----C语言学习(6)#
  • #define、const、typedef的差别
  • #pragam once 和 #ifndef 预编译头
  • ( 10 )MySQL中的外键
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (175)FPGA门控时钟技术
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (SpringBoot)第二章:Spring创建和使用
  • (二)丶RabbitMQ的六大核心
  • (九)c52学习之旅-定时器
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (一)u-boot-nand.bin的下载
  • .Net 6.0 处理跨域的方式
  • .NET delegate 委托 、 Event 事件
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [ACTF2020 新生赛]Upload 1
  • [BZOJ3757] 苹果树
  • [C\C++]读入优化【技巧】