banner
TerryHu

Terry's Site

bilibili

用Pycharm斷點調試遠程uwsgi啟動的代碼

image

這個 blog 只為記錄和梳理自己整個探索的流程,細節方面如有需要可以評論或者聯繫我,雖然估計也沒人看

  1. 在公司 JetBrains 官網被禁的情況下,下載 Pycharm 2025.1.2 並激活專業版

  2. 保證本地與遠程文件同步
    用 pycharm->deployment 一勞永逸

  3. 使用遠程容器內的 py 解釋器
    因為很多庫裝在容器鏡像裡的,pycharm 裡可以用 ssh 連上容器然後用容器裡的 py 解釋器,要連上容器裡的解釋器就要在容器裡裝 sshd

yum install install openssh-server  
vim /etc/ssh/sshd_config(PermitRootLoging改成yes)  
/usr/sbin/sshd -D &  

其實到這一步就可以單個文件遠程調試了,看 Pycharm Run/Debug 裡自帶一個 current file 的調試模式,打上斷點就能斷點調試了

  1. 項目遠程斷點調試
    裝 pydevd-pycharm~=251.26094.141 (具體哪個版本,你點開 python debug server 的 edit configurations 會提醒你的)
    pydevd-pycharm·PyPI裡下載 tar.gz,用 tar -zxvf 解壓,python3 setup.py install 安裝,最後可以看 pip3 list 驗證下

在項目代碼入口加代碼,ip 填本地的,port 只要不衝突的隨便填一個

import pydevd_pycharm  
pydevd_pycharm.settrace('1.2.3.4', port=50010, stdoutToServer=True, stderrToServer=True)  

先啟動本地 python debug server,會提示你 Waiting for process connection... 這時再啟動遠程項目,我這裡用的是 uwsgi --ini platform.ini,uwsgi 會調用 wsgi.py 文件,我的 import pydevd_pycharm 就是加在這個文件開頭的

但最後還是遇到一個問題,wsgi.py 文件裡可以斷點調試,但是之後發起 http 請求後在 url 處理函數裡沒停住,問題的表現就是請求看似被斷點卡住,但實則 pycharm 也沒抓住,大概率是因為 uwsgi 我配置的是多進程處理高並發請求,而後把 uwsgi 配置改成

[uwsgi]  
http=0.0.0.0:9000  
processes = 1  
threads = 1  
master = false  
vacuum=true  
enable-threads=true  
chdir=/xx/xxx  
module=xxxx.wsgi  

掃了一眼 python debug server 裡有個 "allow multiple instances",這個我也給順手勾選了,但這個選項到底是否搭嘎我也不知道。

Finally, it fucking works!

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。