Comment démarrer le débogage à distance avec PyCharm?

j'essaie de déboguer entre PyCharm (sur l'hôte windows) et un hôte virtuel debian qui exécute mon application django. Disent les instructions pour installer l'œuf, ajouter l'importation et ensuite invoquer une commande. Je suppose que ces choses doivent être faites sur l'hôte debian?

Ok, alors, dans quel fichier dois-je mettre ces deux lignes?

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

j'ai essayé de le mettre dans le settings.py mais j'ai ce genre de truc...

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
<!-Pendant que pycharm était assis là "en attente de connexion"

42
demandé sur RichVel 2011-08-09 03:56:58

3 réponses

PyCharm (ou votre ide de choix) agit comme le "serveur" et votre application est le "client"; donc vous démarrez le serveur d'abord - dites à L'IDE de "déboguer" - puis lancez le client - qui est un code avec le settrace déclaration en elle. Quand votre code python atteint le settrace il se connecte au serveur - pycharm - et commence à nourrir les données de débogage.

Pour ce faire:

1. copiez le pydev bibliothèque à la télécommande machine

alors j'ai dû copier le fichier de C:\Program Files\JetBrains\PyCharm 1.5.3\pycharm-debug.egg sur ma machine linux. Je l'ai mis à l' /home/john/api-dependancies/pycharm-debug.egg

2. Mettre l'œuf dans le PYTHONPATH

espérons que vous comprenez que vous n'allez pas pouvoir utiliser l'œuf à moins que python ne le trouve. Je suppose que la plupart des gens utilisent easy_install mais dans mon cas je l'ai ajouté explicitement en mettant ceci:

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

C'est seulement nécessaire parce que je n'ai toujours pas eu de succès l'installation d'un œuf. C'est ma solution de contournement.

3. configurer la configuration du serveur de débogage

dans PyCharm vous pouvez configurer le serveur de débogage via:

  • Exécuter -> Modifier Les Configurations: ouvre la boîte de dialogue' Run/Debug Configurations'
  • par Défaut -> "Python de Débogage à Distance": c'est le modèle à utiliser
  • remplissez le nom d'hôte local et le port et vous voudrez probablement 'utilisez la cartographie des chemins' mais plus sur tout cela ci-dessous...
  • "OK"

    nom de l'hôte local: signifie le nom du serveur - c'est la machine hôte windows dans mon cas - ou en fait L'adresse IP de la machine hôte windows puisque le nom d'hôte n'est pas connu de ma machine distante. La machine virtuelle (distante) doit donc pouvoir atteindre l'hôte. ping et netstat sont bons pour cela.

    Port: peut-être tous les ports libres et non privilégiés que vous aimez. par exemple: 21000 ne sera probablement pas utilisé.

    ne vous inquiétez pas pour les correspondances de chemin pour le moment.

4. Démarrer le serveur de débogage

  • Exécuter -> Debug: démarrer le serveur de débogage-choisissez la configuration que vous venez de créer.

l'onglet de la console de débogage apparaîtra et vous devriez obtenir

 Starting debug server at port 21000

dans la console ce qui signifie que le serveur de débogage ide attend que votre code ouvre une connexion à celui-ci.

5. Insérez le code

ceci fonctionne à l'intérieur d'un test unitaire:

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"

et dans une application web django il est un peu difficile de savoir où vous le mettez - semble fonctionner seulement après tout le reste est fait:

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)

encore une fois que l'adresse IP est la boîte où vous exécutez Pycharm on; vous devriez être en mesure de ping cette adresse ip à partir de la boîte qui exécute votre code / Site web. Le port est votre choix, assurez-vous juste que vous avez dit à pycharm d'écouter sur le même port. Et j'ai trouvé le suspend=False moins problématique que les défauts de, non seulement s'arrêter immédiatement donc vous n'êtes pas sûr si cela fonctionne, mais aussi essayer de streamer à stdin/out qui pourrait vous donner du chagrin aussi.

6. Ouvrez le pare-feu

le pare-feu Windows 7 bloquera par défaut votre connexion entrante. L'utilisation de netstat sur hôte distant vous pourrez voir que SYN_SENT ne s'établit jamais, du moins pas avant d'avoir ajouté une exception au pare-feu windows pour l'application 'pycharm'.

OS / X et Ubuntu n'ont pas de pare-feu à frapper lancé (par défaut, quelqu'un peut avoir appliqué un plus tard).

7. Définissez un point d'arrêt et lancez le code

après tout cela, quand tout se passe comme prévu, vous pouvez définir un point de rupture quelque part après que le settrace a fonctionné - et pycharm console affiche

Connected to pydev debugger (build 107.386)

et sous l'onglet 'débogueur' les variables empilées vont commencer à fonctionner et vous pouvez passer à travers le code.

8. Mappages

Mapping dites à pycharm où il peut trouver le code source. Donc quand le débogueur dit "j'exécute la ligne 393 du fichier /foo/bar/nang.py, Pycharm peut traduire ce chemin absolu distant en un chemin local absolu... et vous montrer la source code.

/Users/john/code/app/    /opt/bestprice/app/
/Users/john/code/master/lib    /opt/bestprice/lib/python2.7/site-packages

fait.

97
répondu John Mee 2013-06-14 04:11:38

ce n'est qu'une note , en fait , mais contient des informations qui peuvent sauver des heures.

  1. aujourd'hui pip install pydevd a travaillé pour moi sur ubuntu et centos 6
  2. si vous voulez vraiment déboguer le serveur distant qui est derrière les firewals et autres, vous pouvez utiliser le truc suivant:

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

cela permet au code à distance de se connecter à votre machine en écoutant localhost: 8081

  1. si le débogueur distant ne veut pas démarrer, en disant qu'il ne peut pas trouver le port socket , vérifiez les règles de votre pare-feu. Notez que la règle avec "127.0.0.1" n'est pas la même chose que "localhost".
7
répondu Sergey 2016-08-16 15:28:43

il semble que pour une raison quelconque debugger ne pouvait pas se connecter à votre hôte windows avec PyCharm. Vous n'avez pas d'autres messages à stderr? Si vous ne l'avez pas fait, essayez de l'exécuter une fois de plus, mais avec sterrToServer=false. Cela peut montrer la vraie raison pour laquelle il ne se connecte pas.

1
répondu Dmitry Trofimov 2011-08-10 17:17:48