2014-05-25 113 views
8

基礎知識:PyCharm遠程調試 - 連接,但無法啓動調試

  • 我有細(本地和遠程服務器上)運行的Django項目。
  • 我使用「遠程調試」配置文件在本地啓動pycharm,它看起來很好。

    Starting debug server at port 4000 
    Use the following code to connect to the debugger: 
    import pydevd 
    pydevd.settrace('<my local machines public ip addr>', port=4000, suspend=False) 
    Waiting for connection... 
    
  • 在遠程服務器上,我把相應的調用pycharm-debug.egg在__init__.py(但我試圖把它在代碼中的其他地方,太)。

  • 我啓動遠程服務器這樣python manage.py runserver <remote domain name>:8000並在當地pycharm IDE /調試器我看到:

    "Connected to pydev debugger (build 133.1347)" 
    
  • 在這之後,事情就坐在那裏......我不想得到任何反饋在pycharm IDE中執行和沒有能力來「啓動/繼續/運行」任何東西。

  • 在遠程服務器上,如果我<ctrl-c>它,我看到:

    File "/<path here>/pycharm-debug.egg/pydevd.py", line 1256, in settrace 
    File "/<path here>/pycharm-debug.egg/pydevd.py", line 1305, in _locked_settrace 
    

我的猜測是正確完成所有連接,但我沒有看到一個方法來啓動運行一切。我有「暫停=錯誤」,所以我預料它會開始。當我嘗試在遠程服務器上顯示一個頁面時,我得到「未連接」,所以Web服務器顯然還沒有運行(如果curl http://<remote server domain>:8000我得到curl: (7) Failed connect to <remote server domain>:8000; Connection refused)。沒有遠程調試,這可以在我的本地開發機器或遠程服務器上正常運行。

我在做什麼錯? :) 謝謝!

詳情:

  • 在遠程服務器上運行的代碼/過程中,我想在主__init__.py調試,我有:

    import os 
    import sys 
    BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
    sys.path.append(BASE_DIR + '/pycharm-debug.egg') 
    import pydevd 
    pydevd.settrace('<my local machines public ip addr>', port=4000, suspend=False) 
    
  • 本地pycharm IDE表明這一點:

    Starting debug server at port 4000 
    Use the following code to connect to the debugger: 
    import pydevd 
    pydevd.settrace('localhost', port=4000, suspend=False) (tried with <public ip addr> for this, too. 
    Waiting for connection... 
    ---- and then, after I start the remote server process: ---- 
    Connected to pydev debugger (build 133.1347) 
    

其他說明:

  • 我已經在遠程服務器上使用和不使用virtualenv。
  • 我正在一個普通的Comcast電纜調制解調器路由器後面運行本地pycharm IDE,端口轉發爲4000端口打開(並通過一個節點服務器連接到端口4000進行了測試,當我對它做了wget時,我的遠程服務器)。

我不知道如何「碰」任何東西讓事情運行,讓我開始調試。

感謝您的幫助。

+0

有時候,pycharm只是需要重啓......真的。 –

+0

嘿,是啊...也嘗試了幾次。 :) –

+0

你是否也放棄了'suspend = False'?明確表示不設置斷點(請查看我的答案) –

回答

2

對我來說,放棄suspend=False參數做到了。

該文檔說@param suspend: whether a breakpoint should be emulated as soon as this function is called.

如果你讓它在那裏,它是連接,但不考慮斷點。然後,您應該基本上是用另一種pydevd.settrace('ip.addr') - >注意到沒有suspend

+0

好的,這很有趣...我明天就試試看。 –

+0

不幸的是,這並不適合我。 –

3

我有同樣的症狀,並通過在查看斷點窗口關閉所有的Python 異常斷點「固定」它。

+0

這聽起來像它可能會做的伎倆。我完全切換到通過ssh進行遠程調試,所以當我有機會再次嘗試時,我會測試它。如果它有效,我會回來選擇這個作爲答案(雖然可能會有一段時間)。 –

6

對於未來的googlers ...我能夠遠程調試工作,但不能通過這種方法。我剛剛在pycharm論壇上回答了一個類似的問題,所以我想用我的方法更新這個問題。

  1. 轉到「PyCharm/Preferences/Project Interpreter」。
    • 你會看到一個選項來選擇對話框頂部的哪個python解釋器。接下來是一個齒輪圖標。如果你點擊齒輪圖標,你會看到一個選項「添加遠程」...你給它ssh證書(或ssh密鑰的路徑)以及你的python解釋器安裝在遠程服務器上的路徑(即,/usr/local/bin/python)。
    • 另外,對我來說,「pycharm幫手路徑」是(/home/<username>/.pycharm_helpers - 我不記得這是否是自動創建的)。
  2. 轉到「運行/編輯配置...」並添加一個「Django服務器」(加號在對話框的左上角)。

    • 選擇您的新遠程Python解釋器作爲解釋器使用(它應顯示在下拉列表中)。
    • 在「env vars」部分,我需要指定我的主應用程序設置文件(即DJANGO_SETTINGS_MODULE = <app>/settings.py)。爲了我的目的,我還需要設置HTTPS=1
    • 將工作目錄設置爲您的django項目在遠程服務器上的任何地方(即/home/<username>/<xyz>/<appdir>)。
    • 設置從本地目錄到遠程目錄的路徑映射(即/Users/JohnQ/<xyz>/<appdir>=/home/<username>/<xyz>/<appdir>)。因爲我需要其他第三方服務器(如FB等)能夠使用HTTPS打這個服務器,所以我在遠程服務器上使用了「stunnel」 - 這很容易設置)。

  3. 除此之外,做一個方便的事情是建立部署的確認,以及讓您可以只需右鍵單擊上傳文件的新版本(在「工具/部署/配置.. 「)。

    • 創建一個新的連接,只需使用ssh creds或路徑到您的密鑰。
    • 在映射選項卡中,路徑與您爲遠程服務器設置的路徑映射所做的相同。
    • 「服務器上的Web路徑」對我來說只是「/」。創建它之後,您應該能夠右鍵單擊任何文件/目錄並選擇「上傳到...」。請注意,對於初始上傳,我只需將tar.gz scp'd到我的服務器以節省時間,並且我只通過部署配置上載我在調試過程中所做的更改。

我一直愉快地使用它進行遠程調試〜4個MOS,所以它工作正常。

+0

好的編輯!這將更容易理解。 :) –

+0

**注意**:在第二部分,當您創建新的Django服務器時,您忘記提及** Host **。您需要添加遠程服務器IP才能使其工作。 – aldoblack

+0

並感謝您。它確實有效。 – aldoblack