PyCharm de débogage à distance - se connecte mais ne peut pas démarrer le débogage
Les bases:
- J'ai un projet django qui fonctionne très bien (à la fois en local et sur un serveur distant).
-
Je commence pycharm localement à l'aide d'un "débogage à distance" de profil et il a l'air bien.
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...
-
Sur le serveur distant, j'ai mis de l'indicatif d'appel de pycharm-debug.oeuf en
__init__.py
(mais j'ai essayé de mettre dans d'autres endroits dans le code, trop). -
Je démarre le serveur distant comme ce
python manage.py runserver <remote domain name>:8000
et sur le local pycharm IDE/débogueur je vois:"Connected to pydev debugger (build 133.1347)"
-
Après cela, les choses en restent là... je ne comprends pas tous les commentaires sur où l'exécution est et pas de capacité dans le pycharm IDE pour "démarrer/continuer/exécuter" quoi que ce soit.
-
Sur le serveur distant si je
<ctrl-c>
il, je vois: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
Ma conjecture est que tout est correctement connecté, mais je ne suis pas le voir une façon de commencer tout en cours d'exécution. J'ai "suspendre=False" ainsi, j'aurais attendu pour commencer. Lorsque j'essaie d'afficher une page contre le serveur distant, j'obtiens un "non connecté" pour que le serveur web n'est évidemment pas encore exécuté (si curl http://<remote server domain>:8000
- je obtenir curl: (7) Failed connect to <remote server domain>:8000; Connection refused
). Sans le débogage à distance, cela fonctionne bien en cours d'exécution sur mon dev local de la machine ou sur le serveur distant.
Ce que je fais mal? 🙂 Merci!
Détails:
-
Sur le serveur distant qui exécute le code, un processus, je veux de débogage dans les principales
__init__.py
j'ai :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)
-
Local pycharm IDE montre ceci:
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)
Autres notes:
- J'ai essayé avec et sans virtualenv sur le serveur distant.
- Je suis l'exécution du local pycharm IDE derrière normal Comcast cable modem-routeur avec redirection de port pour le port 4000 activée (et testé avec un nœud serveur de fixation pour le port 4000 qui a bien fonctionné quand j'ai fait un wget contre elle de mon serveur distant).
Je suis à une perte quant à la façon de "bosse" quoi que ce soit pour obtenir des choses en cours d'exécution et permettez-moi de démarrer le débogage.
Merci d'essayer de l'aider.
- parfois, pycharm juste besoin d'un redémarrage...vraiment.
- hé, oui... essayé une couple de fois, trop. 🙂
- avez-vous également déposer le
suspend=False
? qui dit explicitement de ne pas définir un point d'arrêt (vérifier ma réponse) - Je n'étais pas en mesure de comprendre ce à l'aide des pydevd explicitement sur le serveur distant. Au lieu de cela, j'ai changé de direction et a utilisé le débogage distant via SSH tunnel qui s'est terminée en place fonctionne bien (tout à fait une de secours).
- vous pouvez avoir des problèmes avec la python_remote_debug configurations.
Vous devez vous connecter pour publier un commentaire.
Pour l'avenir googlers ... j'ai été en mesure d'obtenir le débogage distant de travail, mais pas par le biais de cette méthode. J'ai simplement répondu à une question similaire à propos de ce cours sur le pycharm forums que je pensais que je serais mise à jour de cette question avec la méthode qui a fonctionné pour moi.
/usr/local/bin/python
)./home/<username>/.pycharm_helpers
— je ne me souviens pas si cela a été créé automatiquement ou non).Allez dans "Exécuter /Modifier les Configurations..." et ajoutez un "Django Server" (signe + en haut à gauche de la boîte de dialogue).
DJANGO_SETTINGS_MODULE = <app>/settings.py
). Pour ma part j'ai également nécessaire de définirHTTPS=1
./home/<username>/<xyz>/<appdir>
).Définir les mappages de chemin d'accès à partir de votre répertoire local vers le distant dir (c'est à dire,
/Users/JohnQ/<xyz>/<appdir>=/home/<username>/<xyz>/<appdir>
).Parce que j'avais besoin d'autres serveurs 3ème partie (comme FB, etc.) pour être en mesure de frapper ce serveur en utilisant le protocole HTTPS, j'ai utilisé "stunnel" sur mon serveur distant, il était assez facile à mettre en place).
En plus de cela, une chose très pratique à faire est de configurer le déploiement de confirmation en tant que bien de sorte que vous pouvez faire un clic droit pour télécharger les nouvelles versions de votre fichier (dans le menu "Outils /Déploiement /Configurations...").
/
" pour moi. Une fois que vous créez, vous devez simplement être en mesure de faire un clic droit sur un fichier/dir et choisissez "Télécharger...". Notez que pour un chargement initial je viens de scp avais un tar.gz jusqu'à mon serveur pour gagner du temps et je n'ai télécharger via la configuration de déploiement pour les modifications que j'ai faites au cours de débogage.J'ai été heureux de l'utiliser pour le débogage à distance pour ~4 mos., donc, il fonctionne très bien.
J'ai eu les mêmes symptômes et "fixe" en éteignant toutes Python Exception des points d'arrêt dans le Vue points d'arrêt fenêtre.
Pour moi, l'abandon de la
suspend=False
paramètre fait.Les docs disent
@param suspend: whether a breakpoint should be emulated as soon as this function is called.
.Si vous le laissez là, c'est la connexion, mais ne pas considérer le point d'arrêt. Vous devez alors utiliser une autre
pydevd.settrace('ip.addr')
->avis nsuspend
J'ai dû désactiver l'auto-reloader pour résoudre ce problème: