Openstack Pycharm 的遠程調試


問題背景

最近再研究openstack cinder api的時候遇到了個問題:使用命令行調用API的時候,使用domain的token時,會產生一個錯誤,但是通過cinder的api都無法確定產生錯誤的具體位置或者具體錯誤信息,使得運維或者測試看的一頭霧水。所以,就需要對openstack的源代碼進行debug,由於opesntack部署在服務器的一個虛擬機上面,而開發環境又在自己的本機環境,在這種情況下,就需要對源代碼進行遠程debug來定位分析問題了。再此,我將這個配置和debug的過程記錄下來,希望可以幫助到其他的小伙伴-

遠程調試的工作原理

遠程調試的功能再Eclipse、IntelLiJ IDEA等大型IED中均有支持,實現原理基本相同,這里采用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添加至引用路徑,可以采用多種方式:

  • 采用esay_install pycharm-debug.egg命令進行安裝(pip命令無法安裝,只能使用easy_install);
  • 將pychram-debug.egg添加至PYTHON或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則隨便填寫一個未被占用的端口即可;需要注意的是,由於遠程計算機需要連接至本地開發環境,因此本地IP應該保證遠程可以訪問的到
  • 【Apply】and 【OK】
    如下圖所示:

3、在本地開發環境的pycharm中配置Mapping映射

  • 【Tools】-> 【Depioyment】->【Configuration】如下圖所示:

  • 【Mappings】配置Local path和Deployment path on server(這里選擇遠程計算上需要映射的代碼文件即可):

  • 點擊OK,等待遠程代碼下載到本地pycharm里面
    4、在遠程計算機的應用程序中插入代碼
    將如下代碼插入至遠程計算機的應用程序中

import pydevd
pydevd.settrace('172.18.0.131', port=8090, stdoutToServer=True, stderrToServer=True)

其中,IP地址和端口號要與pycharm中監聽配置保持一致
如下截圖:

5、在pycharm中啟動Debug Server
【Run】->【Debug】或者點擊pycharm的有個蟲子的圖標,選擇剛創建的遠程調試配置項,在Debug Console中會顯示如下信息:

這說明Debug Server已經啟動並處於監聽狀態
6、向遠程計算機應用程序發送請求(命令行、postman或者horizon都可以)
向遠程計算機程序發送請求,當執行到pydevd.settrace語句時,便會與本地開發環境中的pycharm建立通訊連接,接下來便可以在本地IDE中進行單步調試了。
需要注意的是,本地開發環境必須保證IP地址和端口號可以從遠程計算機訪問的到,否真會無法建立連接。
通訊建立起來,進入調試如下圖所示:

至此,調試開始,有疑問的小伙伴可以留言交流。
原文轉載地址


免責聲明!

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



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