657 Stimmen

Wie debuggt man in Django, auf die gute Art?

Also habe ich angefangen, Code zu lernen in Python und später Django . Die ersten Male war es schwer, Tracebacks zu betrachten und tatsächlich herauszufinden, was ich falsch gemacht habe und wo der Syntaxfehler lag. Inzwischen ist einige Zeit vergangen und ich denke, ich habe inzwischen eine gewisse Routine im Debuggen meines Django-Codes. Da ich das schon früh in meiner Programmierpraxis gemacht habe, habe ich mich hingesetzt und mich gefragt, ob die Art und Weise, wie ich das gemacht habe, ineffektiv war und ob man das schneller machen könnte. Normalerweise schaffe ich es, die Fehler in meinem Code zu finden und zu korrigieren, aber ich frage mich, ob ich es schneller machen sollte.

Ich benutze normalerweise nur die Debug-Informationen, die Django ausgibt, wenn sie aktiviert sind. Wenn die Dinge so enden, wie ich es mir gedacht habe, unterbreche ich den Codefluss oft mit einem Syntaxfehler und schaue mir die Variablen an diesem Punkt im Fluss an, um herauszufinden, wo der Code etwas anderes tut als das, was ich wollte.

Aber kann dies verbessert werden? Gibt es gute Tools oder bessere Möglichkeiten, Ihren Django-Code zu debuggen?

3 Stimmen

Ich verwende gerne django-debug-toolbar, es ist sehr praktisch

3 Stimmen

Oder verwenden Sie den in Visual Studio Code integrierten Python-Debugger, wie hier beschrieben code.visualstudio.com/docs/python/tutorial-django

45voto

Tomasz Zieliński Punkte 15606

Fast alles wurde bereits erwähnt, so dass ich nur noch hinzufügen möchte, dass anstelle von pdb.set_trace() kann man verwenden ipdb.set_trace() das iPython verwendet und daher leistungsfähiger ist (Autovervollständigung und andere Extras). Dies erfordert das Paket ipdb, so dass Sie nur pip install ipdb

3 Stimmen

Ich empfehle pdb++, das einen sehr nützlichen Sticky-Modus bietet.

37voto

Tom Christie Punkte 32056

Ich habe die django-pdb a PyPI . Es ist eine einfache Anwendung, mit der Sie Ihren Quellcode nicht jedes Mal bearbeiten müssen, wenn Sie in pdb einbrechen wollen.

Die Installation ist einfach...

  1. pip install django-pdb
  2. hinzufügen 'django_pdb' zu Ihrem INSTALLED_APPS

Sie können jetzt laufen: manage.py runserver --pdb zu Beginn jeder Ansicht in pdb zu wechseln...

bash: manage.py runserver --pdb
Validating models...

0 errors found
Django version 1.3, using settings 'testproject.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

GET /
function "myview" in testapp/views.py:6
args: ()
kwargs: {}

> /Users/tom/github/django-pdb/testproject/testapp/views.py(7)myview()
-> a = 1
(Pdb)

Und laufen: manage.py test --pdb in die pdb bei Testfehlern/Fehlern einzudringen...

bash: manage.py test testapp --pdb
Creating test database for alias 'default'...
E
======================================================================
>>> test_error (testapp.tests.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../django-pdb/testproject/testapp/tests.py", line 16, in test_error
    one_plus_one = four
NameError: global name 'four' is not defined
======================================================================

> /Users/tom/github/django-pdb/testproject/testapp/tests.py(16)test_error()
-> one_plus_one = four
(Pdb)

Das Projekt wird auf GitHub Beiträge sind natürlich willkommen.

3 Stimmen

Es wäre großartig, wenn Sie die Datei-/Zeilennummer angeben könnten, an der der Abbruch erfolgen soll (nicht nur die Ansicht).

0 Stimmen

Dazu könnte ich im Code Kommentare hinterlassen, die in der Produktion träge sind. Vielleicht ist dies ein schlechtes Paradim, aber es wäre toll, effektiv zu streifen und anzuwenden Pausen willkürlich.

1 Stimmen

Ich habe dies vor kurzem installiert, aber erst heute herausgefunden, um "POST_MORTEM=True" in meinem Dev-Einstellungen zu konfigurieren, wie von Tom's django-pdb dokumentiert. Jetzt kann ich einfach weiterfahren, und wenn etwas schief geht, werde ich direkt an den Ort des Problems weitergeleitet. Danke Tom!

22voto

029xue Punkte 241

Der einfachste Weg, Python zu debuggen - vor allem für Programmierer, die an Visual Studio gewöhnt sind - ist die Verwendung von PTVS (Python Tools for Visual Studio). Die Schritte sind einfach:

  1. Downloaden und installieren Sie es von https://microsoft.github.io/PTVS/
  2. Setzen Sie Haltepunkte und drücken Sie F5.
  3. Wenn Ihr Haltepunkt erreicht ist, können Sie die Variablen so einfach wie beim Debuggen von C#/C++-Programmen anzeigen/ändern.
  4. Das ist alles :)

Wenn Sie Django mit PTVS debuggen wollen, müssen Sie Folgendes tun:

  1. Setzen Sie in den Projekteinstellungen - Registerkarte "Allgemein" die "Startdatei" auf "manage.py", den Einstiegspunkt des Django-Programms.
  2. Setzen Sie in den Projekteinstellungen - Registerkarte Debug "Skriptargumente" auf "runserver --noreload". Der Schlüsselpunkt ist hier "--noreload". Wenn Sie es nicht einstellen, werden Ihre Haltepunkte nicht getroffen.
  3. Genießen Sie es.

1 Stimmen

Danke, das hat prima funktioniert. Das --noreload war das, was wir brauchten

0 Stimmen

Gibt es eine Funktion zum Debuggen auf Remote-Server - ähnlich wie Eclipse PyDev, die ich im Moment verwenden?

0 Stimmen

Ich habe damit Probleme. Ich habe Ihre Schritte befolgt, aber es funktioniert immer noch nicht. Es hält nur in den Haltepunkten von *.py-Dateien an, nicht in den *.html-Dateien.

16voto

gath Punkte 23018

Ich benutze pyDev mit Eclipse wirklich gut, setzen Sie Haltepunkte, gehen Sie in den Code, sehen Sie Werte für beliebige Objekte und Variablen, versuchen Sie es.

0 Stimmen

Sie müssen den Dev-Server über Eclipse laufen lassen (für die aufwandsarme Debugging-Erfahrung). PyDev behauptet, Remote-Debugging zu haben, aber da ich es nie benutzt habe, kann ich nicht wirklich über die Qualität der Entwicklungserfahrung sprechen. Einzelheiten: pydev.org/handbuch_adv_remote_debugger.html

2 Stimmen

Der Remote-Debugger von PyDev funktioniert wunderbar mit dem Dev-Server von Django. Stellen Sie nur sicher, dass Sie die Option "Wenn Datei geändert wird, Modul automatisch neu laden?" in den Run/Debug-Einstellungen von PyDev "deaktiviert" haben. Andernfalls werden sowohl der Dev-Server als auch PyDev versuchen, den Code neu zu laden, während Sie debuggen, was beide extrem verwirren wird.

12voto

Khan Punkte 137

Ich benutze PyCharm und stehen dazu, bis zum Ende. Es hat mich ein wenig gekostet, aber ich muss sagen, dass der Vorteil, den ich daraus ziehe, unbezahlbar ist. Ich habe versucht, von der Konsole aus zu debuggen, und ich rechne es den Leuten hoch an, die das können, aber für mich ist es großartig, meine Anwendung(en) visuell debuggen zu können.

Ich muss allerdings sagen, PyCharm benötigt eine Menge Speicherplatz. Aber andererseits ist nichts Gutes im Leben umsonst. Sie kamen gerade mit ihrer neuesten Version 3. Es spielt auch sehr gut mit Django, Flask und Google AppEngine. Alles in allem würde ich sagen, dass es ein großartiges, praktisches Tool für jeden Entwickler ist.

Wenn Sie es noch nicht benutzen, empfehle ich Ihnen, die Testversion für 30 Tage zu erwerben, um sich von der Leistungsfähigkeit von PyCharm zu überzeugen. Ich bin sicher, dass es auch andere Tools gibt, wie z.B. Aptana. Aber ich glaube, mir gefällt einfach auch die Art und Weise, wie PyCharm aussieht. Ich fühle mich beim Debuggen meiner Anwendungen dort sehr wohl.

0 Stimmen

Es könnte die erste IDE sein, die ich je kaufe. Das Debuggen eines Projekts in einer VM klingt nach Magie, für die es sich lohnt zu bezahlen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X