PyCharm (または選択したアイデア) は「サーバー」として機能し、アプリケーションは「クライアント」として機能します。したがって、最初にサーバーを起動します-IDEに「デバッグ」するように指示します-次にクライアントを実行します-これは、settrace
ステートメントを含むコードです。Python コードがヒットするsettrace
と、サーバー (pycharm) に接続し、デバッグ データの供給を開始します。
これを実現するには:
pydev
1.ライブラリをリモート マシンにコピーする
そのため、ファイルをC:\Program Files\JetBrains\PyCharm 1.5.3\pycharm-debug.egg
Linux マシンにコピーする必要がありました。私はそれを置く/home/john/api-dependancies/pycharm-debug.egg
2. 卵を PYTHONPATH に入れる
Python が卵を見つけられない限り、卵を使用できないことを理解していただければ幸いです。ほとんどの人は easy_install を使用していると思いますが、私の場合は、次のように明示的に追加しました。
import sys
sys.path.append('/home/john/app-dependancies/pycharm-debug.egg')
これは、まだ卵のインストールに成功していないために必要です。これが私の回避策です。
3. デバッグ サーバー構成をセットアップする
PyCharm では、次の方法でデバッグ サーバーを構成できます。
- 実行->構成の編集: 「実行/デバッグ構成」ダイアログを開きます
- Defaults -> "Python Remote Debug": 使用するテンプレートです
- ローカルホスト名とポートを入力すると、おそらく「パスマッピングを使用」したくなるでしょうが、これについては以下で詳しく説明します...
"わかった"
ローカル ホスト名:サーバーの名前 (私の場合は Windows ホスト マシン) を意味します。または、ホスト名がリモート マシンに認識されていないため、実際には Windows ホスト マシンの IP アドレスを意味します。そのため、仮想 (リモート) マシンはホストに到達できる必要があります。 ping
これにnetstat
は適しています。
Port : 任意の空いている非特権ポートを指定できます。例:21000
使用される可能性は低いです。
今のところ、パス マッピングについて心配する必要はありません。
4. デバッグ サーバーを起動します。
- Run -> Debug : デバッグ サーバーを起動します - 作成した構成を選択します。
デバッグ コンソール タブが表示されます。
Starting debug server at port 21000
これは、コードが接続を開くのを ide デバッグ サーバーが待機していることを意味します。
5. コードを挿入する
これは単体テスト内で機能します。
from django.test import TestCase
class APITestCase(TestCase):
def test_remote_debug(self):
import sys
sys.path.append('/home/john/dependancies/pycharm-debug.egg')
from pydev import pydevd
pydevd.settrace('192.168.33.1', port=21000, suspend=False)
print "foo"
そして、django Webアプリケーションでは、どこに置くかについて少し気難しいです-他のすべてが完了した後にのみ機能するようです:
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
sys.path.append('/vagrant/pycharm-debug.egg')
import pydevd
pydevd.settrace('192.168.33.1', port=21000, suspend=False)
繰り返しますが、IP アドレスは Pycharm を実行しているボックスです。コード/Webサイトを実行しているボックスからそのIPアドレスにpingできるはずです。ポートはあなたの選択です。同じポートでリッスンするようにpycharmに指示したことを確認してください。そして、デフォルトよりも問題が少ないことがわかりましたsuspend=False
。すぐに停止するだけでなく、機能しているかどうかわからないだけでなく、悲しみを与える可能性のある標準入力/出力にストリーミングしようとしています。
6.ファイアウォールを開く
Windows 7 ファイアウォールは、デフォルトで着信接続をブロックします。リモートホストで netstat を使用すると、少なくともアプリケーション「pycharm」の Windows ファイアウォールに例外を追加するまで、SYN_SENT が ESTABLISHED にならないことがわかります。
OS/X と Ubuntu には、パンチ スローするためのファイアウォールがありません (デフォルトでは、誰かが後で適用した可能性があります)。
7. ブレークポイントを設定してコードを実行する
結局のところ、すべてが計画どおりになったら、settrace が実行された後のどこかにブレークポイントを設定すると、pycharm コンソールが表示されます。
Connected to pydev debugger (build 107.386)
「Debugger」タブの下で、変数スタックが機能し始め、コードをステップ実行できます。
8. マッピング
マッピングは、ソースコードを見つけることができる場所を pycharm に伝えます。そのため、デバッガーが「ファイル /foo/bar/nang.py の 393 行目を実行しています」と言った場合、Pycharm はそのリモート絶対パスを絶対ローカル パスに変換し、ソース コードを表示します。
/Users/john/code/app/ /opt/bestprice/app/
/Users/john/code/master/lib /opt/bestprice/lib/python2.7/site-packages
終わり。