56

PyCharm (Windows ホスト上) と django アプリケーションを実行している debian 仮想ホストの間でデバッグを開始しようとしています。指示には、卵をインストールし、インポートを追加してから、コマンドを呼び出すように書かれています。これらのことは debian ホストで行う必要があると思いますか?

では、この 2 行をどのファイルに入れればよいでしょうか。

from pydev import pydevd
pydevd.settrace('not.local', port=21000, stdoutToServer=True, stderrToServer=True)

settings.py に入れてみたのですが、こんな感じになりました...

File "/django/conf/__init__.py", line 87, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
File "/django/utils/importlib.py", line 35, in import_module
    __import__(name)
File "/settings.py", line 10, in <module>
    pydevd.settrace('dan.local', port=21000, stdoutToServer=True, stderrToServer=True)
File "/pycharm-debug.egg/pydev/pydevd.py", line 1079, in settrace
    debugger.connect(host, port)
File "/pycharm-debug.egg/pydev/pydevd.py", line 241, in connect
    s = StartClient(host, port)
File "/pycharm-debug.egg/pydev/pydevd_comm.py", line 362, in StartClient
    sys.exit(1)
SystemExit: 1

pycharm が「接続を待っている」間、そこに座っていました

4

3 に答える 3

121

PyCharm (または選択したアイデア) は「サーバー」として機能し、アプリケーションは「クライアント」として機能します。したがって、最初にサーバーを起動します-IDEに「デバッグ」するように指示します-次にクライアントを実行します-これは、settraceステートメントを含むコードです。Python コードがヒットするsettraceと、サーバー (pycharm) に接続し、デバッグ データの供給を開始します。

これを実現するには:

pydev1.ライブラリをリモート マシンにコピーする

そのため、ファイルをC:\Program Files\JetBrains\PyCharm 1.5.3\pycharm-debug.eggLinux マシンにコピーする必要がありました。私はそれを置く/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

終わり。

于 2011-08-15T05:30:40.753 に答える
12

実際には単なるメモですが、時間を節約できる情報が含まれています。

  1. 現在pip install pydevd 、ubuntuとcentos 6の両方で私のために働いていました

  2. ファイアウォールなどの背後にあるリモートサーバーを本当にデバッグしたい場合は、次のトリックを使用できます。

    ssh -R  8081:localhost:8081 user@remote-server.com
    

    これにより、リモート コードがリッスンしているマシンに接続できるようになります。 localhost:8081

  3. ソケット ポートが見つからないと言ってリモート デバッガーが起動しない場合は、ファイアウォール ルールを確認してください。のルール 127.0.0.1は と同じではないことに注意してくださいlocalhost

于 2016-08-16T15:04:25.000 に答える
1

何らかの理由で、デバッガーが PyCharm を使用して Windows ホストに接続できなかったようです。stderr に他のメッセージはありませんか? まだ実行していない場合は、もう一度実行してみてください。ただし、sterrToServer=false を使用してください。それは、接続できない本当の理由を示している可能性があります。

于 2011-08-10T17:17:48.523 に答える