この問題は PyDev に固有のものではなく、任意の python デバッガーに固有のものだと思います。
Eclipse と pydev を使用すると、dev_appserver (Google アプリ エンジン開発サーバー) プロセスで WSGI ハンドラーを中断できません。100% 確実ではありませんが、これは GAE 1.7.6 または 1.7.7 でのリグレッションだと思います。1.7.7 にアップグレードする前にコードをデバッグできたことはほぼ確実です。
GAE は、PyDev によって制御されない新しいプロセス ('_python_runtime.py') を作成するようです。「サブプロセスのデバッグ」機能が PyDev で利用可能であるという証拠を見つけることができなかったので、今は少し迷っています。
GAE コード (1.7.7) を見ると、サブプロセスが tools/devappserver2/http_runtime.py に作成され、 が呼び出されているようsafe_subprocess.py/start_process
です。
ふざけてみても、次のいずれかの明確な方法は見当たりませんでした。 1. 同じプロセスから、サーバーからユーザー ハンドラーへの GAE に通知します。2. 新しいプロジェクトのコマンド ラインを から に変更するように GAE に指示python _python_runtime.py
しますpython pydev.py ... --file _python_runtime.py
(それでも、PyDev がそれを取得できるかどうかはわかりません)。
なにか提案を?それは本当に回帰ですか?
編集(部分的な回答):
これは部分的な回答です。IN SDK 1.7.6 Google App Engine には完全に新しいサーバーがあります。サーバーはマルチプロセスになりました。メイン プロセスは、サブプロセス (ランタイムと呼ばれる) を生成して、WSGI ハンドラーを実行します。これらのサブプロセスはデバッグされていません。
この変更はコミュニティで多くの反応を引き起こしましたが、どうやら GAE コミュニティは主に SO ではなく Google グループに住んでいるようです (私は昨日まで知りませんでした)。ディスカッションへのリンクは次のとおりです。
https://groups.google.com/forum/?fromgroups=#!topic/google-appengine/ep5BWYKpQpU
基本的に 2 つの解決策があります。
簡単なことは、1.7.7 の時点でまだ利用可能な古いサーバーを使用することです。dev_appserver.py の代わりに、単純に old_dev_appserver.py を起動します。Eclipse PyDev で、Debug Configuration... に移動し、'Main Module' を $(GOOGLE_APP_ENGINE)/old_dev_appserver.py に置き換えて、あたかも新しいサーバーが発生しなかったかのように起動します。このソリューションには明らかに古いサーバーを実行するという欠点があり、この設定がいつまで維持されるかは不明です。
2 番目の解決策はもう少し複雑で、まだ完全には理解できていません。これは、PyDev のリモート デバッグ機能と、ランタイム プロセスの開始時にスクリプトを実行するように GAE に指示する機能に基づいています。だから、これはそれを行う方法です:
- スクリプトを作成し、gae_runtime_startup.py という名前を付けます。Put はどこか (下) にあります。
- グローバル PyDev 設定 (ウィンドウ メニュー -> 設定 -> PyDev -> インタープリター Python -> 文字列置換変数) で、新しい PYDEV 変数を追加し、値を Eclipse の PyDev プラグインに設定します (私のコンピューターでは、これは c:\eclipse\ です)。 plugins\org.python.pydev_2.7.1.2012100913)。
- プロジェクトのプロパティで、${PYDEV}/pysrc を PYTHONPATH に追加します。このようにして、pydevdをインポートできるようになります
- gae_runtime_startup.py を実行するように GAE に指示する必要があります。ランチャーに移動し、次のオプションをコマンド ラインに追加します ([デバッグ構成] -> [引数]): --python_startup_script=<フル パス>/gae_runtime_startup.py --max_server_instances=1
- PyDev リモート サーバーを起動します。
# gae_runtime_startup.py
import pydevd;
pydevd.settrace()
関連リンク: