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
相關文章
相關標籤/搜索