/ / PyCharmでリモートデバッグを開始するにはどうすればいいですか? - python、django、リモートデバッグ、pycharm

PyCharmを使ってリモートデバッグを開始するにはどうすればよいですか? - python、django、リモートデバッグ、pycharm

PyCharm間でデバッグを開始しようとしています(Windowsホスト上)と私のDjangoアプリケーションを実行しているDebianの仮想ホスト。説明書には、eggをインストールし、インポートを追加してから、コマンドを呼び出すように指示されています。私はこれらのことが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はただ「接続を待って」そこに座っていましたが

回答:

回答№1の94

PyCharm(またはあなたが選んだアイディア)は「サーバー」として機能し、あなたのアプリケーションは「クライアント」です。つまり、最初にサーバーを起動し、IDEに "debug"を実行してからクライアントを実行します。 settrace その中の声明。あなたのPythonコードが settrace それはサーバに接続します - pycharm - そしてそれにデバッグデータを供給し始めます。

これを実現するには:

1.コピー pydev リモートマシンへのライブラリ

だから私はからファイルをコピーする必要がありました C:Program FilesJetBrainsPyCharm 1.5.3pycharm-debug.egg 私のLinuxマシンに。私はそれを置く /home/john/api-dependancies/pycharm-debug.egg

2.卵をPYTHONPATHに入れる

たぶん、pythonで見つけられない限り、eggを使うことができないことを嬉しく思います。私はほとんどの人がeasy_installを使っていると思いますが、私の場合は明示的にこれを追加しました。

   import sys
sys.path.append("/home/john/app-dependancies/pycharm-debug.egg")

これが必要なのは、まだ卵子の取り付けに成功していないからです。これが私の回避策です。

3.デバッグサーバの設定

PyCharmでは、次のようにしてデバッグサーバーを設定できます。

  • 走る - > 設定を編集する: "Run / Debug Configurations"ダイアログを開きます
  • デフォルト - > "Python Remote Debug":使用するテンプレートです
  • ローカルホスト名とポートを記入してください、あなたはおそらく "パスマッピングを使う"ことを望むでしょうが、以下のすべてについてもっと詳しく...
  • "OK"

    ローカルホスト名:の名前を意味します サーバ - これは私の場合はWindowsホストマシンです - またはホスト名は私のリモートマシンにはわからないので、実際にはWindowsホストマシンのIPアドレスです。そのため、仮想(リモート)マシンはホストに到達できなければなりません。 ping そして netstat これにはいいです。

    :あなたが好きな空いている非特権ポートにすることができます。例えば: 21000 使用されることはほとんどありません。

    今のところパスマッピングについては心配しないでください。

4.デバッグサーバーを起動します。

  • 走る - > デバッグ :デバッグサーバーを起動します - 今作成した設定を選択します。

デバッグコンソールタブが表示されます。

 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を実行している。あなたはあなたのコード/ウェブサイトを実行しているボックスからそのIPアドレスをpingすることができるはずです。ポートはあなたの選択です、ちょうどあなたが同じポートを監視するようにpycharmに言ったことを確認してください。 suspend=False デフォルトのデフォルトよりも問題は少なく、ただちに停止するだけでなく、それが機能しているかどうかわからないだけでなく、stdin / outにストリーミングしようとすると、悲しみを感じるかもしれません。

6.ファイアウォールを開く

Windows 7のファイアウォールは、デフォルトでは、ユーザーをブロックします。着信接続リモートホストでnetstatを使用すると、SYN_SENTがESTABLISHEDにならないことを確認できます。少なくともアプリケーション "pycharm"のWindowsファイアウォールに例外を追加するまでは可能です。

OS / XとUbuntuには、投げるためのファイアウォールがありません(デフォルトでは、後で誰かがファイアウォールを適用した可能性があります)。

7.ブレークポイントを設定してコードを実行する

結局のところ、すべてが計画に入ったら、ブレークポイントを設定することができます - settraceが実行された後のどこかに - そしてpycharmコンソールは表示するでしょう

Connected to pydev debugger (build 107.386)

そして[Debugger]タブの下で変数スタックが機能し始め、コードをステップスルーすることができます。

マッピング

マッピングは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

完了しました。


回答№2のための7

これは実際のところ単なるメモですが、時間を節約するための情報が含まれています。

  1. たった今 pip install pydevd Ubuntuとcentosの両方で私のために働いた6
  2. ファイアーウォールなどの背後にあるリモートサーバーを本当にデバッグしたい場合は、次のトリックを使用できます。

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

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

  1. リモートデバッガが起動したくない場合は、ソケットポートが見つからないため、ファイアウォールの規則を確認してください。 "127.0.0.1"の規則は "localhost"と同じではありません。

回答№3の場合は1

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