Fehler beim Debuggen von dev_appserver in Google App Engine

9

Ich denke nicht, dass dieses Problem für PyDev, sondern für jeden Python-Debugger einzigartig ist.

Mit Eclipse und pydev kann ich meinen WSGI-Handler in einem dev_appserver-Prozess (Google app engine development server) nicht unterbrechen. Ich bin mir nicht 100% ig sicher, aber ich denke, das ist eine Regression in GAE 1.7.6 oder 1.7.7, da ich fast sicher bin, dass ich meinen Code debuggen konnte, bevor ich auf 1.7.7 upgraden konnte.

Es scheint, dass GAE einen neuen Prozess ('_python_runtime.py') erstellt, der nicht von PyDev gesteuert wird. Ich konnte keinen Hinweis finden, dass das Feature "Debugging-Subprozesse" in PyDev verfügbar ist, also bin ich jetzt ein wenig verloren.

Betrachtet man den GAE-Code (1.7.7), so erscheint der Subprozess in tools / devappserver2 / http_runtime.py, der safe_subprocess.py/start_process aufruft.

Durch all das herumgeirrt habe ich keine offensichtliche Methode gesehen: 1. Erzählen Sie GAE vom selben Prozess zum Benutzerhandler. 2. Bitten Sie GAE, die Befehlszeile des neuen Projekts von python _python_runtime.py auf python pydev.py ... --file _python_runtime.py zu ändern (und selbst dann nicht sicher, ob PyDev es aufnehmen kann).

Irgendwelche Vorschläge? Ist das wirklich eine Regression?

EDIT (Teilantwort):
Hier ist eine Teilantwort. IN SDK 1.7.6 Google App Engine hat einen komplett neuen Server. Der Server ist jetzt ein Multi-Prozess. Der Hauptprozess erzeugt Unterprozesse (Laufzeit genannt), um die WSGI-Handler auszuführen. Diese Unterprozesse werden nicht debuggt.

Diese Änderung verursachte eine Menge Reaktionen in der Community, aber anscheinend lebt die GAE-Community hauptsächlich in den Google-Gruppen und nicht in SO (etwas, das mir bis gestern nicht bekannt war). Hier ist ein Link zur Diskussion:

Ссылка

Es gibt grundsätzlich zwei Lösungen:

  1. Das einfachste wäre, den alten Server zu verwenden, der ab 1.7.7 noch verfügbar ist. Statt dev_appserver.py starten Sie einfach old_dev_appserver.py. Wechseln Sie in Eclipse PyDev zu Debug Configuration ... und ersetzen Sie das 'Main Module' durch $ (GOOGLE_APP_ENGINE) /old_dev_appserver.py und starten Sie es, als wäre der neue Server nie passiert. Diese Lösung hat natürlich den Nachteil, dass ein älterer Server ausgeführt wird, und es ist nicht bekannt, wie lange diese Einstellung beibehalten wird.

  2. Die zweite Lösung ist ein wenig mehr involviert, und ich konnte es noch nicht vollständig knacken. Es basiert auf der Remote-Debugging-Funktion von PyDev und der Fähigkeit, GAE zu sagen, dass es zu Beginn des Laufzeitprozesses ein Skript ausführen soll. So wird es gemacht:

    1. Erstellen Sie ein Skript und nennen Sie es: gae_runtime_startup.py. Put ist irgendwo (unten).
    2. Fügen Sie in den globalen PyDev Einstellungen (Menü Fenster - & gt; Einstellungen - & gt; PyDev - & gt; Interpreter Python - & gt; String Ersetzungsvariablen eine neue PYDEV Variable hinzu und setzen Sie den Wert auf das PyDev Plugin von eclipse (In meinem Computer Dies ist c: \ eclipse \ plugins \ org.python.pydev_2.7.1.2012100913).
    3. Fügen Sie in der Projekteigenschaft $ {PYDEV} / pysrc zum PYTHONPATH hinzu. Auf diese Weise können Sie pydevd
    4. hinzufügen
    5. Sie müssen GAE mitteilen, dass gae_runtime_startup.py ausgeführt werden soll. Gehen Sie zum Launcher und fügen Sie der Befehlszeile folgende Optionen hinzu (Debug-Konfigurationen - & gt; Argumente): --python_startup_script = & lt; vollständiger Pfad & gt; /gae_runtime_startup.py --max_server_instances = 1
    6. Starten Sie den PyDev-Remote-Server.
    Nachdem ich das alles gemacht habe, erhalte ich einen Unterbrechungspunkt innerhalb von runtime_startup.py, der im Laufzeitprozess ausgeführt wird. Wenn ich auf den Stack gehe, gehe ich in die runtime.py-Quellen - also denke ich, dass ich in die richtige Richtung bin. Und dennoch, die Haltepunkte, die ich in meinen Handlern gesetzt habe, um nicht zu brechen - so ist diese Route für mich immer noch blockiert. Jede Hilfe wird geschätzt.
%Vor%

Einige verwandte Links:

  • Google-Gruppendiskussion: Ссылка
  • Ein Dokument von Google, das erklärt, wie man debuggt (meine zweite Methode): Ссылка
  • Ein Dokument von PyDev, das erklärt, wie man den entfernten Debugger einstellt. Ссылка
  • Siehe auch exzellenten Kommentar von @Tim Hoffman unten.     
  • Uri 22.04.2013, 14:36
    quelle

    1 Antwort

    2

    Das war in der Tat eine Regression, die in 1.8.3 behoben wurde: Ссылка .

        
    Roman Levin 01.09.2013 07:04
    quelle

    Tags und Links