PyCharm(windows Host)とdebian virtual Hostを実行しているDjangoアプリケーション。デバッグは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はただそこに座っていたが、「接続を待っている」
PyCharm(または選択したide)は「サーバー」として機能し、アプリケーションは「クライアント」です。そのため、最初にサーバーを起動します-IDEに 'debug'を指示し、次にクライアントを実行します-これはsettrace
ステートメントを含むコードです。 pythonコードがsettrace
にヒットすると、サーバー(pycharm)に接続し、デバッグデータの供給を開始します。
これを実現するには:
1。pydev
ライブラリをリモートマシンにコピー
そのため、ファイルをC:\Program Files\JetBrains\PyCharm 1.5.3\pycharm-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')
Eggのインストールがまだ成功していないため、これが必要なだけです。これが私の回避策です。
。デバッグサーバー設定のセットアップ
PyCharmでは、次の方法でデバッグサーバーを構成できます。
"OK"
ローカルホスト名:serverの名前を意味します-私の場合はWindowsホストマシンです-または実際にはIPアドレスホスト名がリモートマシンに認識されていないため、Windowsホストマシンのそのため、仮想(リモート)マシンはホストに到達できる必要があります。 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 __== "__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を使用すると、少なくともアプリケーション「pycharm」のWindowsファイアウォールに例外を追加するまでは、SYN_SENTがESTABLISHEDにならないことがわかります。
OS/XとUbuntuには、パンチスルーを行うファイアウォールがありません(デフォルトでは、誰かが後でそれを適用した可能性があります)。
7。ブレークポイントを設定してコードを実行
その後、すべてが計画どおりになったら、ブレークポイントを設定できます-settraceが実行された後のどこかに-pycharmコンソールが表示されます
Connected to pydev debugger (build 107.386)
[デバッガ]タブで変数スタックが機能し始め、コードをステップ実行できます。
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
できた.
実際には単なるメモですが、時間を節約できる情報が含まれています。
pip install pydevd
ubuntuとcentos 6の両方で私のために働いたssh -R 8081:localhost:8081 [email protected]
これにより、リモートコードがlocalhost:8081でリッスンしているマシンに接続できます。
何らかの理由でデバッガがPyCharmでWindowsホストに接続できなかったようです。 stderrに他のメッセージはありませんか?まだ実行していない場合は、sterrToServer = falseでもう一度実行してください。それは接続しない本当の理由を示すかもしれません。