banner
TerryHu

Terry's Site

bilibili

Pycharmを使用して、リモートuwsgiで起動したコードのブレークポイントデバッグを行う

image

このブログは、自分の探索のプロセスを記録し整理するためのものです。詳細についてはコメントするか、私に連絡してください。誰も見ないと思いますが。

  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 にはローカルの 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」というオプションがあり、これもチェックしましたが、このオプションが本当に関係しているかはわかりません。

最後に、うまくいきました!

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。