Debugging in WebApp mit __debug__ ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 12. Oktober 2006, 11:56

Kann man __debug__ in einer WebApp nutzten und dann das machen:

Code: Alles auswählen

#!/usr/bin/python -o
Weiß noch nicht so ganz, was man damit effektiv anfangen kann, aber vielleicht ist es hilfreich in PyLucid...

Nutzt das jemand?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 12. Oktober 2006, 13:20

jens hat geschrieben:Nutzt das jemand?
Nein, ich nutze zum Debuggen von Webapps immer Djangos-Debug machanismen. Ich habe eine settings.py, die die Prodktiv-Einstellungen enthält und daneben eine develsettings.py, die settings.py importiert und die Debug-Sachen einschltet. Die settzings.py wird dann vom FastCGI-Server verwendet, die develsettings.py vom Development-Server. Ich muss zugeben, dass das ziemlich komfortabel ist.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Donnerstag 12. Oktober 2006, 17:36

1. "nutzen"
2. "python -O"
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 12. Oktober 2006, 17:43

birkenfeld hat geschrieben:1. "nutzen"
2. "python -O"
Nicht so viel Info's auf einmal :?

Also erstmal, geht überhaupt in einer WSGI Handler Datei:

Code: Alles auswählen

#!/usr/bin/python -o
Ich denke mal schon, oder?

Ansonsten hab ich mir überlegt, ich kann das schon ganz gut in PyLucid gebrauchen. Dann kann ich oft if __debug__: self.page_msg("Tolle Debug Ausgaben") machen...

Irgendwo habe ich gelesen, das angeblich die __debug__ Abschnitte komplett ignoriert werden (also in der *.pyc nicht gespeichert werden), wenn man den Interpreter mit -o startet, was ja für optimize steht... Stimmt das?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Donnerstag 12. Oktober 2006, 18:08

jens hat geschrieben:
birkenfeld hat geschrieben:1. "nutzen"
2. "python -O"
Nicht so viel Info's auf einmal :?
Scheinbar hats nix gebracht.
Also erstmal, geht überhaupt in einer WSGI Handler Datei:

Code: Alles auswählen

#!/usr/bin/python -o
Ich denke mal schon, oder?
Nein, weil es -O ist.
Ansonsten hab ich mir überlegt, ich kann das schon ganz gut in PyLucid gebrauchen. Dann kann ich oft if __debug__: self.page_msg("Tolle Debug Ausgaben") machen...

Irgendwo habe ich gelesen, das angeblich die __debug__ Abschnitte komplett ignoriert werden (also in der *.pyc nicht gespeichert werden), wenn man den Interpreter mit -o startet, was ja für optimize steht... Stimmt das?
if __debug__ wird bei -O rausoptimiert, ja. Mit der .pyc hat das aber nix zu tun weil optimierter Bytecode in .pyo geschrieben wird.
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 13. Oktober 2006, 10:12

birkenfeld hat geschrieben:if __debug__ wird bei -O rausoptimiert, ja. Mit der .pyc hat das aber nix zu tun weil optimierter Bytecode in .pyo geschrieben wird.
Aha! Siehst du, das wußte ich noch nicht... Gut das ich nochmal nachgefragt hab :)
Ich werde mir das demnächst mal anschauen, doch ein Problem sehe ich jetzt schon. Mir fehlt irgendwie ein Debug-Level. Denn welche Debug-Ausgaben sollte ich machen? Jede Kleinigkeit oder "nur die wichtigsten" oder ein Mittelding :)

Aber vielleicht mache ich mir dann selber in PyLucid ein Debug-Level :)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 18. Oktober 2006, 17:18

birkenfeld hat geschrieben:if __debug__ wird bei -O rausoptimiert, ja. Mit der .pyc hat das aber nix zu tun weil optimierter Bytecode in .pyo geschrieben wird.
Noch eine dumme Frage... Was wird noch "optimiert" oder war es das schon?

Wo finde ich Informationen in der Doku dazu?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Mittwoch 18. Oktober 2006, 17:44

jens hat geschrieben:Noch eine dumme Frage... Was wird noch "optimiert" oder war es das schon?
Asserts werden rausgeschmissen.
Bei -OO werden auch die Docstrings entfernt.

Und das war's auch schon.

Deshalb niemals "assert" als allgemeine Fehlerbehandlung nehmen. SQLObject war da glaube ich ein schlechtes Beispiel.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mittwoch 18. Oktober 2006, 18:17

o.T. Auch wenn ich mir hier als totaler Ignorant oute: Benutzt jemand von euch assert? Ich habe zwar diverse Fehlerbehandlungsroutinen drin, aber der Sinn von assert ist Python doch nicht so groß wie in C++, oder? Also kommt bei mir assert sehr selten vor (habe gerade nachgeschaut: sehr selten, aber es kommt vor).

Christian
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Mittwoch 18. Oktober 2006, 18:44

Ich benutze es sehr selten, weil es dem Sinn von dynamic/duck typing auch irgendwie zuwider läuft. Indem man einfach Funktionen mit dem füttert, was sie erwarten, spart man sich intensives Type-Checking. Und dann gibt es ja noch Exceptions und gute Möglichkeiten, auch in Webanwendungen damit umzugehen (z.B. cgitb sowie die zugehörige als auch die EvalException-Middleware in Paste).
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 18. Oktober 2006, 18:57

CM hat geschrieben:Auch wenn ich mir hier als totaler Ignorant oute: Benutzt jemand von euch assert?
Nein, so ein großer Ignorant bist du nicht, oder wir sind beide gleich große Ingnoranten, aber auch ich nutze assert so gut wie nie.. moment, ich denke ich nutze es überhaupt nicht. Ich hatte nichtmal die Notwendigkeit es einzusetzen. Dafür funktionieren Exceptions zu gut.
Y0Gi hat geschrieben:Und dann gibt es ja noch Exceptions und gute Möglichkeiten, auch in Webanwendungen damit umzugehen (z.B. cgitb sowie die zugehörige als auch die EvalException-Middleware in Paste).
Der Traceback von Django ist auch ziemlich praktisch, also bin ich auch da positiv überrascht gewesen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 19. Oktober 2006, 11:35

Joghurt hat geschrieben:Asserts werden rausgeschmissen.
Bei -OO werden auch die Docstrings entfernt.
Asserts nutzte ich überhaupt nicht... Das die Docstrings raus kann ja auch nicht schaden, wobei es das auch nicht viel schneller macht, was? Und die Speichereinsparung dürfte auch nicht die Welt sein.

Dann nehme ich statt -O lieber direkt -OO... :)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Donnerstag 19. Oktober 2006, 14:52

Für das reine Deployment einer Anwendung sind die Docstrings wohl egal, ja. Aber in anderen Fällen können sie durchaus hilfreich sein, etwa wenn sich ein Code-fremder Entwickler an das Paket macht und help() nutzen möchte.
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 19. Oktober 2006, 15:00

Ja, moment... So wie ich das verstehe, werden die DocStrings doch wohl nur in den *.pyo Dateien nicht übernommen. Aber sie werden doch wohl nicht in den *.py gelöscht...

Wenn man Entwickelt, z.B. mit colubrid's http-Server dann sind die DocStrings hilfreich. In einem Traceback kann man z.B. interactiv help(bla) eingeben... Aber dann verwendet man sowieso nicht die -OO Variante ;)

Bei PyLucid wird nur -OO bei den CGI-Handlern eingefügt und da auch nur bei den ohne Debug.
Zur Info: Ich liefer bei PyLucid vier CGI-Handler mit:
  • CGI_Handler.py
    CGI_Handler_Debug.py
    CGI_Handler_with_Backports.py
    CGI_Handler_with_Backports_Debug.py
Die ersten beiden sind für Python 2.4 gedacht, die anderen für Python 2.3

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten