Remote Hotplug Python Debugger

Wie kann ich einen Hotpluggable Remote Debugger mit Python IDE Integration einrichten? Zum Beispiel mit PyCharm. Von hotpluggable ich meine: kann verbinden und trennen von dev server on fly.

Ich habe dev-Server in der Cloud (django, nginx, uwsgi, postgres, debian) und verwende PyCharm als die Haupt-IDE (aber wenn du eine Lösung für eine andere IDE hast, bitte geben Sie sie bitte).

Manchmal muss ich Scripts anschließen und debuggen, ohne den dev Server zu stoppen / neu zu starten. Mit dem Debugger von PyCharm (pydevd) kann der dev-Server nicht ohne den Debugger-Server starten ( Connection refused ), und wenn ich den Remote-Debugger stoppe, während der Dev-Server läuft, stürzt es zB ab

 An existing connection was forcibly closed by the remote host 

Ich habe pdg / epdg gefunden, aber sie haben keine Integration mit PyCharm. Auch PyCharm hat ein nettes Feature: "Attach to process", aber es funktioniert nur mit lokalen Prozessen.

One Solution collect form web for “Remote Hotplug Python Debugger”

Der grundlegende Ansatz, der wahrscheinlich funktionieren würde, besteht darin, einen Signalhandler für das Programm einzurichten, das Sie debuggen möchten, um in einen Debugger zu laden. Dann senden Sie den Prozess ein Signal zu debuggen (über den kill Befehl) können Sie dann remote fügen.

Hier ist, wie Sie dies über die Python Trepan Debugger tun würde

 import signal def signal_handler(num, f): from trepan.interfaces import server as Mserver from trepan.api import debug connection_opts={'IO': 'TCP', 'PORT': 1955} intf = Mserver.ServerInterface(connection_opts=connection_opts) dbg_opts = {'interface': intf} print('Starting TCP server listening on port 1955.') debug(dbg_opts=dbg_opts) return signal.signal(signal.SIGUSR1, signal_handler) # Go about your business... import time import os print(os.getpid()) for i in range(10000): time.sleep(0.2) 

Jetzt laufen:

 $ python /tmp/foo.py 8530 

Von oben ausgegeben haben wir das pid des Python-Prozesses, den wir debuggen möchten,

Jetzt in einer Shell senden wir ein Signal, um den Prozess zu erzählen, um in den Debugger zu gehen, der im Signalhandler eingerichtet ist. Sie müssen die Prozess-ID anpassen.

 $ kill -USR1 8530 # Adjust the pid to what you see above 

Und in der Schale, wo wir liefen /tmp/foo.py sollten Sie jetzt die neue Ausgabe sehen:

 $ python /tmp/foo.py 8530 Starting TCP server listening on port 1955. # This is new 

Zurück zur Shell, wo wir den kill -USR1 ausgestellt haben kill -USR1 wir nun den Prozess an, der jetzt in einem Debugger gestoppt wurde:

 $ trepan2 --client --port 1955 Connected. (/tmp/foo.py:11 @101): signal_handler -- 11 return (trepan2*) list 6 connection_opts={'IO': 'TCP', 'PORT': 1955} 7 intf = Mserver.ServerInterface(connection_opts=connection_opts) 8 dbg_opts = {'interface': intf} 9 print('Starting TCP server listening on port 1955.') 10 debug(dbg_opts=dbg_opts) 11 -> return 12 13 signal.signal(signal.SIGUSR1, signal_handler) 14 # Go about your business... (trepan2*) backtrace -> 0 signal_handler(num=10, f=<frame object at 0x7f9036796050>) called from file '/tmp/foo.py' at line 11 ## 1 <module> file '/tmp/foo.py' at line 20 
  • Wie automatische Kontrolle uwsgi Protokoll Größe
  • Kommunikation zwischen den Arbeitern in uwsgi
  • Bereitstellung von Flaschen-App mit uwsgi und flask-script Manager
  • Mysteriöse Ausgabe mit Django + uWSGI + E-Mail senden
  • Ungültige Transaktion bleibt über Anfragen bestehen
  • Kompilieren fehlgeschlagen mit Fehlercode 1 in / tmp / pip_build_root / uwsgi
  • Bad Django / uwsgi Leistung
  • Django App-Bereitstellung auf nGINX
  • Problem mit nginx + uwsgi im Vhost-Modus, läuft django app
  • Was ist der uWSGI-Master-Modus?
  • Kann ich das uwsgi-Protokoll verwenden, um http anzurufen?
  • Python ist die beste Programmiersprache der Welt.