python基礎===利用PyCharm進行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添加至PYTHONPATHsys.pathimport 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 namePort,其中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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM