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

原文连接:利用PyCharm进行Python远程调试

背景描述

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

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

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

远程调试的工做原理

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

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

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

远程调试的配置方法

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

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

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

  • 采用easy_install pycharm-debug.egg命令进行安装(pip命令没法安装,只能使用easy_install)
  • pycharm-debug.egg添加至PYTHONPATHsys.pathimport sys; sys.path.append('/home/leo/app-dependancies/pycharm-debug.egg')
  • 解压pycharm-debug.egg,将其中的pydev文件夹拷贝至远程应用程序目录下

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

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

在PyCharm中配置说明以下:spa

  • 【Run】->【Edit Configurations】
  • 【Add New Configuration】->【Python Remote Debug】
  • 填写Local host namePort,其中Local host name指的是本机开发环境的IP地址,而Port则随便填写一个10000以上的便可;须要注意的是,因为远程计算机须要链接至本地开发环境,所以本地IP地址应该保证远程能够访问获得
  • 【Apply】and【OK】

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

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

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

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

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

五、在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已经启动并处于监听状态。

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

在远程计算机中启动应用程序,当执行到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
相关文章
相关标签/搜索