2009-07-13 22 views
467

Entonces, comencé a aprender a codificar en Python y más tarde Django. Las primeras veces fue difícil mirar los trazados y realmente averiguar qué hice mal y dónde estaba el error de sintaxis. Ha pasado algún tiempo y en algún momento, creo que tengo una rutina para depurar mi código Django. Como esto se hizo al principio de mi experiencia de codificación, me senté y me pregunté si cómo lo haría era ineficaz y podría hacerse más rápido. Normalmente logro encontrar y corregir los errores en mi código, pero me pregunto si debería hacerlo más rápido.¿Cómo depurar en Django, la buena manera?

Normalmente uso la información de depuración que Django da cuando está habilitada. Cuando las cosas terminan como yo pensaba, rompo mucho el flujo de código con un error de sintaxis, y miro las variables en ese punto en el flujo para descubrir, donde el código hace algo diferente de lo que yo quería.

¿Pero se puede mejorar esto? ¿Hay algunas buenas herramientas o mejores formas de depurar su código Django?

Respuesta

433

Hay muchas formas de hacerlo, pero la más sencilla es simplemente usar usando Python debugger. Sólo tiene que añadir siguiente línea en una función de vista de Django:

import pdb; pdb.set_trace() 

Si intenta cargar la página en el navegador, el navegador se bloquea y se obtiene un indicador para llevar a cabo la depuración en la ejecución de código real.

Sin embargo, hay otras opciones (no estoy recomendando ellos):

* return HttpResponse({variable to inspect}) 

* print {variable to inspect} 

* raise Exception({variable to inspect}) 

Pero el depurador de Python (AP) es muy recomendable para todos los tipos de código Python. Si ya está en pdb, también debería echar un vistazo a IPDB que usa ipython para la depuración.

Algunos extensión más útil AP son

pdb++, sugerida por Antash.

pudb, sugerido por PatDuJour.

Using the Python debugger in Django, sugerido por Seafangs.

+55

+1 por sugerir pdb. Sin embargo, vale la pena señalar que esto solo funciona cuando se usa el servidor de desarrollo en su máquina local, ya que el aviso aparecerá en la consola. –

+12

Ver también [django-pdb] (http://pypi.python.org/pypi/django-pdb) según mi respuesta a continuación. Te da los comandos 'manage.py runserver --pdb' y' manage.py test --pdb'. –

+4

@Daniel, consulte [rconsole] (http://code.google.com/p/rfoo/) para tener una consola en una instancia ya en ejecución de python. – Phob

75

Existen algunas herramientas que cooperan bien y pueden facilitar la tarea de depuración.

Lo más importante es Django debug toolbar.

Luego necesita un buen registro utilizando la instalación de Python logging. Puede enviar la salida de registro a un archivo de registro, pero una opción más fácil es enviar la salida de registro al firepython. Para usar esto necesitas usar el navegador Firefox con la extensión firebug. Firepython incluye un complemento Firebug que mostrará cualquier registro en el lado del servidor en una pestaña Firebug.

Firebug en sí mismo también es fundamental para la depuración del lado de Javascript de cualquier aplicación que desarrolle. (Suponiendo que tienes un código JS por supuesto).

También me gustó django-viewtools para depurar vistas interactivamente usando pdb, pero no lo uso mucho.

Hay más herramientas útiles como dozer para rastrear las pérdidas de memoria (también hay otras buenas sugerencias en las respuestas aquí en SO para el seguimiento de la memoria).

14

Uso pyDev con Eclipse realmente bueno, establezco puntos de interrupción, paso al código, veo valores en cualquier objeto y variable, pruébelo.

+0

Tienes que ejecutar el servidor de desarrollo a través de eclipse (para la experiencia de depuración de bajo esfuerzo). PyDev afirma tener depuración remota pero nunca haberlo usado. Realmente no puedo hablar de la calidad de la experiencia de desarrollo. Detalles: http://www.pydev.org/manual_adv_remote_debugger.html – synthesizerpatel

+1

El depurador remoto de PyDev funciona bastante bien con el servidor de desarrollo de Django. Solo asegúrate de tener el "¿Cuándo se cambia el archivo? ¿Se recarga automáticamente el módulo?" opción '' deshabilitada '' en la configuración de ejecución/depuración de PyDev. De lo contrario, el servidor de desarrollo y pydev intentarán volver a cargar el código mientras depura, lo que los hace extremadamente confusos. – CoreDumpError

207

Me gusta mucho el depurador interactivo de Werkzeug. Es similar a la página de depuración de Django, excepto que se obtiene un intérprete interactivo en cada nivel del rastreo. Si usa el django-extensions, obtiene un comando de administración runserver_plus que inicia el servidor de desarrollo y le da el depurador de Werkzeug en caso de excepciones.

Por supuesto, solo debe ejecutar esto localmente, ya que le da a cualquiera con un navegador los derechos para ejecutar código arbitrario de python en el contexto del servidor.

+9

¡La mejor respuesta hasta ahora! Tan bueno como es la barra de herramientas de depuración de django, el depurador de werkzeug lo supera :) Y lo peor de todo esto es que estoy usando django-extensions desde hace medio año y no sabía nada sobre runserver_plus antes ... –

+11

Sin embargo, esto no le permite pasar por el código, que es una gran parte de la depuración. –

+1

¿Es posible utilizar la finalización de pestañas en la consola interactiva que se muestra en el navegador? "Tab" simplemente nos lleva a la siguiente consola abierta, me preguntaba si había una combinación de teclas, pero no pude encontrar ninguna. – Ariel

152

Un poco de polvo rápido de etiquetas de plantilla:

@register.filter 
def pdb(element): 
    import pdb; pdb.set_trace() 
    return element 

Ahora, dentro de una plantilla que puede hacer {{ template_var|pdb }} y entrar en una sesión de AP (teniendo en cuenta que se está ejecutando el servidor devel local) donde se puede inspeccionar element a su contenido del corazón.

Es una manera muy agradable de ver lo que le sucedió a su objeto cuando llega a la plantilla.

+1

esto es genial. Otra cosa que puedes hacer si tienes problemas con la plantilla es cambiar a jinja2 (cargada a través del ataúd): es una extensión de las plantillas django, lo que es una mejora en mi opinión. También integra las plantillas y la herencia de plantillas en tramas de traza mucho mejor de lo que lo hace django. – fastmultiplication

+0

Esto es encantador. Lamentablemente, es difícil ver una forma limpia de integrar esto en una base de código que rechaza cualquier confirmación, incluida una importación de pdb. –

39

Casi todo lo que se ha mencionado hasta ahora, por lo que sólo añadiremos que en lugar de pdb.set_trace() se puede utilizar ipdb.set_trace() que utiliza IPython y por lo tanto es más potente (autocompletar y otras golosinas). Esto requiere el paquete ipdb, por lo que solo necesita pip install ipdb

+1

Recomiendo pdb ++ que proporciona un modo adhesivo muy útil. – Sandeep

48

Uso PyCharm (el mismo motor pydev que el eclipse). Realmente me ayuda a ser visualmente capaz de recorrer mi código y ver qué está sucediendo.

+1

Lo mejor de todo es que funciona y es totalmente intuitivo. Simplemente haga clic a la izquierda de una línea y presione el botón de depuración. Funciona bien para el código fuente de Django también si desea obtener una mejor comprensión de cómo funciona el código interno. Me tomó un tiempo antes de que lo notara, pero puede colocar puntos de interrupción en cualquiera de los códigos de la carpeta Bibliotecas externas del navegador de archivos. –

+3

Vale la pena mencionar que PyCharm usa el depurador PyDev para obtener créditos. – Medeiros

+0

https://stackoverflow.com/a/28256637/4366229 –

28

He presionado django-pdb para PyPI. Es una aplicación simple que significa que no necesita editar su código fuente cada vez que quiera entrar en pdb.

La instalación es sólo ...

  1. pip install django-pdb
  2. Añadir 'django_pdb' a su INSTALLED_APPS

Ahora puede ejecutar: manage.py runserver --pdb entrar en pdb al comienzo de todas las vistas ...

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) 

Y ru n: manage.py test --pdb para entrar en AP en la prueba de fallas/errores ...

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) 

del proyecto alojado en GitHub, las contribuciones son bienvenidas, por supuesto.

+3

Esto sería genial si pudieras especificar el número de archivo/línea para romper (no solo la vista). –

+0

A los cuales podría dejar en el código como comentarios de los cuales son inertes dentro de la producción. Tal vez este sea un mal paradim, pero sería genial para tirar y aplicar descansos de cualquier manera. – Glycerine

+0

Instalé esto recientemente, pero hoy me di cuenta de que configuraba "POST_MORTEM = True" en mi configuración de desarrollo, tal como lo documenta el django-pdb de Tom. Ahora puedo navegar y cuando las cosas van mal, me olvido de la ubicación del problema. Gracias Tom! – velotron

19

La manera más fácil de depurar python, especialmente para programadores que están acostumbrados a Visual Studio, es usar PTVS (Python Tools for Visual Studio). Los pasos son sencillos:

  1. descargarlo e instalarlo desde http://pytools.codeplex.com/
  2. Establezca puntos de interrupción y presione F5.
  3. Tu punto de interrupción es golpeado, puedes ver/cambiar las variables tan fácil como depurar programas C#/C++.
  4. Eso es todo :)

Si desea depurar Django usando PTVS, que tiene que hacer lo siguiente:

  1. En Configuración del proyecto - ficha General, establezca "archivo de inicio" para "manejar .py ", el punto de entrada del programa Django.
  2. En la configuración del proyecto - pestaña Depuración, configure "Argumentos del script" en "runserver --noreload". El punto clave es el "--noreload" aquí. Si no lo configura, sus puntos de interrupción no se verán afectados.
  3. Disfrútalo.
+0

Gracias, funcionó muy bien. El --noreload era lo que necesitábamos –

+0

¿Hay alguna función para depurar en el servidor remoto, similar a Eclipse PyDev que uso en este momento? –

+0

Estoy teniendo problemas con esto. Seguí tus pasos pero todavía no funciona. Solo se detiene en los puntos de corte de los archivos * .py, no en los * .html. – blfuentes

2

La mayoría de las opciones ya se mencionaron. Para imprimir el contexto de la plantilla, he creado una biblioteca simple para eso. Ver https://github.com/edoburu/django-debugtools

Usted puede utilizarlo para imprimir contexto de la plantilla sin ningún {% load %} construcción:

{% print var %} prints variable 
{% print %}  prints all 

Se utiliza un formato de pprint personalizado para mostrar las variables en una etiqueta <pre>.

6

Recomiendo epdb (Depurador de Python extendido).

https://bitbucket.org/dugan/epdb

Una cosa que me gusta de EPDB para la depuración de Django u otros servidores web de Python es el comando epdb.serve(). Esto establece un seguimiento y sirve esto en un puerto local al que puede conectarse. Caso de uso típico:

Tengo la visión de que quiero ir paso a paso. Insertaré lo siguiente en el punto en que quiero establecer el seguimiento.

import epdb; epdb.serve() 

Una vez que se ejecuta este código, abro un intérprete de Python y me conecto a la instancia de servicio. Puedo analizar todos los valores y recorrer el código pdb usando los comandos estándar como n, s, etc.

In [2]: import epdb; epdb.connect() 
(Epdb) request 
<WSGIRequest 
path:/foo, 
GET:<QueryDict: {}>, 
POST:<QuestDict: {}>, 
... 
> 
(Epdb) request.session.session_key 
'i31kq7lljj3up5v7hbw9cff0rga2vlq5' 
(Epdb) list 
85   raise some_error.CustomError() 
86 
87  # Example login view 
88  def login(request, username, password): 
89   import epdb; epdb.serve() 
90 ->  return my_login_method(username, password) 
91 
92  # Example view to show session key 
93  def get_session_key(request): 
94   return request.session.session_key 
95 

y toneladas más que se puede aprender acerca de la escritura ayuda EPDB en cualquier momento.

Si desea servir o conectarse a varias instancias epdb al mismo tiempo, puede especificar el puerto para escuchar (el valor predeterminado es 8080). Es decir.

import epdb; epdb.serve(4242) 

>> import epdb; epdb.connect(host='192.168.3.2', port=4242) 

acogida por defecto es 'localhost' si no se especifica. Lo lancé aquí para demostrar cómo puede usar esto para depurar algo que no sea una instancia local, como un servidor de desarrollo en su LAN local.Obviamente, si hace esto, tenga cuidado de que la traza establecida nunca llegue a su servidor de producción.

Como nota rápida, puede hacer lo mismo que la respuesta aceptada con epdb (import epdb; epdb.set_trace()), pero quería resaltar la funcionalidad del servicio, ya que me pareció muy útil.

+0

epdb no se actualiza desde 2011. ¿Alguna vez tiene problemas para usarlo en las versiones más nuevas de Django y/o Python? – Seperman

+0

Nunca me he encontrado con problemas al usarlo en Python 2 (específicamente 2.4-2.7). Lo usé hace unos días, de hecho. Nunca he intentado con Python 3. – Jacinda

+1

Estoy ejecutando django 1.8 en python 2.7 y no puedo obtener epdb.connect para hablar con epdb.serve. Acabo de obtener un tiempo de espera. –

3

Yo uso PyCharm y diferentes herramientas de depuración. También tiene un buen conjunto de artículos sobre cómo configurar esas cosas para principiantes. You may start here. Cuenta sobre la depuración de PDB y GUI en general con los proyectos de Django. Espero que alguien se beneficie de ellos.

6

Acabo de encontrar wdb (http://www.rkblog.rk.edu.pl/w/p/debugging-python-code-browser-wdb-debugger/?goback=%2Egde_25827_member_255996401). Tiene una interfaz de usuario/interfaz gráfica de usuario muy agradable con todas las campanas y silbatos. El autor dice esto sobre wdb -

"Hay IDEs como PyCharm que tienen sus propios depuradores. Ofrecen un conjunto similar o igual de características ... Sin embargo, para usarlos tienes que usar esos IDEs específicos (y algunos de ellos son no es gratuito o puede no estar disponible para todas las plataformas). Elija la herramienta adecuada para sus necesidades ".

Pensé que simplemente lo transmitiría.

también un artículo muy útil acerca de los depuradores de pitón: https://zapier.com/engineering/debugging-python-boss/

Finalmente, si desea ver un bonito impresión gráfica de la pila de llamadas en Django, Salida: https://github.com/joerick/pyinstrument. Simplemente agregue pyinstrument.middleware.ProfilerMiddleware a MIDDLEWARE_CLASSES, luego agregue? Profile al final de la URL de solicitud para activar el generador de perfiles.

También se puede ejecutar pyinstrument desde la línea de comandos o importando como un módulo.

+0

PyCharm solo usa PyDev, creo que no es el suyo. –

6

A veces, cuando I wan para explorar los alrededores en un método particular y convocar pdb es demasiado engorroso, yo añadiría:

import IPython; IPython.embed() 

IPython.embed() comienza una cáscara IPython que tienen acceso a las variables locales desde el punto donde tu lo llamas

9

Uso PyCharm y lo soporto hasta el final. Me costó un poco, pero debo decir que la ventaja que obtengo no tiene precio. Probé la depuración desde la consola y le doy a la gente mucho crédito que puede hacer eso, pero para mí poder depurar visualmente mi (s) aplicación (es) es genial.

Tengo que decir sin embargo, PyCharm lleva mucha memoria. Pero, de nuevo, nada bueno es gratis en la vida. Acaban de llegar con su última versión 3. También juega muy bien con Django, Flask y Google App Engine. Entonces, en general, diría que es una gran herramienta útil para cualquier desarrollador.

Si aún no lo está utilizando, le recomendaría obtener la versión de prueba durante 30 días para echar un vistazo a la potencia de PyCharm. Estoy seguro de que también hay otras herramientas disponibles, como Aptana. Pero supongo que también me gusta la forma en que se ve PyCharm. Me siento muy cómodo depurando mis aplicaciones allí.

+0

Podría ser el primer IDE que alguna vez compro. Depurar un proyecto en una VM suena como una magia que vale la pena pagar. –

+0

Altamente por esta respuesta. Parece que la persona realmente quiere mirar debajo del capó. Es más conveniente IMO con el uso de IDE como PyCharm. – garmoncheg

1

Como se ha mencionado en otras críticas aquí - establecer puntos de interrupción en el código y caminar a través el código para ver si se comporta como se esperaba es una gran manera de aprender algo así como Django hasta que tenga un buen sentido de cómo se comporta todos - y lo que su código está haciendo.

Para hacer esto yo recomendaría usar WingIde. Al igual que otros IDE mencionados agradable y fácil de usar, buena distribución y también es fácil de establecer puntos de interrupción evalúan/modificar la pila, etc. Perfecto para visualizar lo que el código está haciendo a medida que paso a través de él. Soy un gran admirador de eso.

También uso PyCharm: tiene un excelente análisis de código estático y puede ayudar a detectar problemas en ocasiones antes de que se dé cuenta de que están allí.

Como ya se mencionó django-debug-barra de herramientas es esencial - https://github.com/django-debug-toolbar/django-debug-toolbar

Y aunque no explícitamente una herramienta de depuración o análisis - uno de mis favoritos es SQL impresión Middleware disponible de Django Fragmentos en https://djangosnippets.org/snippets/290/

Esto mostrará las consultas SQL que ha generado su vista. Esto le dará una buena idea de lo que está haciendo el ORM y si las consultas son eficientes o que tenga que reelaborar su código (o añadir almacenamiento en caché).

Me resulta invaluable para vigilar el rendimiento de las consultas al desarrollar y depurar mi aplicación.

Solo un consejo más: lo modifiqué ligeramente para mi propio uso, solo para mostrar el resumen y no la declaración de SQL ... Así que siempre lo uso durante el desarrollo y las pruebas. También agregué que si len (connection.queries) es mayor que un umbral predefinido, muestra una advertencia adicional.

Luego, si veo que algo malo (desde una perspectiva de rendimiento o número de consultas) está sucediendo, vuelvo a la pantalla completa de las sentencias de SQL para ver exactamente qué está sucediendo. Muy útil cuando trabajas en un gran proyecto de Django con múltiples desarrolladores.

8

Desde mi punto de vista, podríamos romper común depuración de código tareas en tres distintos patrones de uso:

  1. Algo tiene una excepción: runserver_plus 'Werkzeug depurador al rescate. La capacidad de ejecutar código personalizado en todos los niveles de rastreo es un asesino. Y si estás completamente atascado, puedes crear un Gist para compartir con solo un clic.
  2. La página se procesa, pero el resultado está equivocado: una vez más, Werkzeug rocks. Para crear un punto de interrupción en el código, simplemente escriba assert False en el lugar donde desea detenerse.
  3. El código funciona incorrectamente, pero la vista rápida no ayuda. Lo más probable es que sea un problema algorítmico. Suspiro. A continuación, por lo general el fuego de un depurador de consola PuDB: import pudb; pudb.set_trace(). La principal ventaja frente a [i] pdb es que PuDB (mientras mira como estás en el 80 's) hace que la configuración del reloj a medida las expresiones de una brisa. Y la depuración de un grupo de bucles anidados es mucho más simple con una GUI.

Ah, sí, los problemas de las plantillas. El problema más común (para mí y para mis colegas) es un contexto incorrecto: o bien no tiene una variable o su variable no tiene algún atributo. Si está utilizando debug toolbar, simplemente inspeccione el contexto en la sección "Plantillas" o, si no es suficiente, establezca un corte en el código de sus vistas justo después de que se complete su contexto.

Así es.

+0

escriba menos usando solo 'import pudb; pu.db' –

0

Una sugerencia adicional.

puede aprovechar nosetests y AP juntos, en lugar de inyectar pdb.set_trace() en sus puntos de vista de forma manual. La ventaja es que puede observar las condiciones de error cuando comienzan, potencialmente en un código de terceros.

He aquí un error para mí hoy.

TypeError at /db/hcm91dmo/catalog/records/ 

render_option() argument after * must be a sequence, not int 

.... 


Error during template rendering 

In template /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/crispy_forms/templates/bootstrap3/field.html, error at line 28 
render_option() argument after * must be a sequence, not int 
18 
19   {% if field|is_checkboxselectmultiple %} 
20    {% include 'bootstrap3/layout/checkboxselectmultiple.html' %} 
21   {% endif %} 
22 
23   {% if field|is_radioselect %} 
24    {% include 'bootstrap3/layout/radioselect.html' %} 
25   {% endif %} 
26 
27   {% if not field|is_checkboxselectmultiple and not field|is_radioselect %} 
28 

     {% if field|is_checkbox and form_show_labels %} 

Ahora, sé que esto significa que metí la pata al constructor de la forma, e incluso tengo una buena idea de qué campo es un problema. Pero, ¿puedo usar pdb para ver de qué se están quejando las formas crujientes, dentro de una plantilla?

Sí, puedo. El uso de la opción --pdb en nosetests:

tests$ nosetests test_urls_catalog.py --pdb

Tan pronto como llegué a ninguna excepción (incluyendo los manejados con gracia), paradas pdb donde pasa y puedo mirar a su alrededor.

File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py", line 537, in __str__ 
    return self.as_widget() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py", line 593, in as_widget 
    return force_text(widget.render(name, self.value(), attrs=attrs)) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py", line 513, in render 
    options = self.render_options(choices, [value]) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py", line 543, in render_options 
    output.append(self.render_option(selected_choices, *option)) 
TypeError: render_option() argument after * must be a sequence, not int 
INFO lib.capture_middleware log write_to_index(http://localhost:8082/db/hcm91dmo/catalog/records.html) 
INFO lib.capture_middleware log write_to_index:end 
> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py(543)render_options() 
-> output.append(self.render_option(selected_choices, *option)) 
(Pdb) import pprint 
(Pdb) pprint.PrettyPrinter(indent=4).pprint(self) 
<django.forms.widgets.Select object at 0x115fe7d10> 
(Pdb) pprint.PrettyPrinter(indent=4).pprint(vars(self)) 
{ 'attrs': { 'class': 'select form-control'}, 
    'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]], 
    'is_required': False} 
(Pdb)   

Ahora, es claro que mi opciones argumento del constructor de campo crujiente era como era una lista dentro de una lista, en lugar de una lista/tupla de tuplas.

'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]] 

Lo bueno es que este pdb está teniendo lugar en el código de crujiente, no el mío y yo no tenía necesidad de insertar manualmente.

2

Me gustan las respuestas que puedo copiar directamente. Y me gusta IPython:

pip install ipdb 

En su código:

import ipdb; ipdb.set_trace() 
+0

respuesta duplicada: ya mencionado anteriormente por http://stackoverflow.com/a/2324303/764592 – Yeo

0

uso pdb o ipdb. La diferencia entre estos dos es que ipdb admite autocompletar.

para pdb

import pdb 
pdb.set_trace() 

para IPDB

import ipdb 
ipdb.set_trace() 

Para la ejecución de la nueva línea golpeó n clave, para continuar golpeó c clave. comprobar más opciones mediante el uso de help(pdb)

0

Durante el desarrollo, la adición de una rápida

assert False, value 

puede ayudar a diagnosticar problemas de las vistas o en cualquier otro lugar, sin la necesidad de usar un depurador.

1

detecto código de Visual Studio es impresionante para la depuración de aplicaciones de Django. Los parámetros pitón launch.json estándar se publican python manage.py con el depurador asociado, por lo que se pueden establecer puntos de interrupción y recorrer el código que lo desee.

1

Para aquellos que se pueden añadir accidentalmente en pdb compromete en vivo, puedo sugerir esta extensión de la respuesta #Koobz:

@register.filter 
def pdb(element): 
    from django.conf import settings 
    if settings.DEBUG:  
     import pdb 
     pdb.set_trace() 
    return element 
0

uno de su mejor opción para depurar código de Django es a través de wdb: https://github.com/Kozea/wdb

wdb funciona con el pitón 2 (2.6, 2.7), pitón 3 (3.2, 3.3, 3.4, 3.5) y PyPy. Aún mejor, es posible depurar un programa Python 2 con un servidor que se ejecuta en wdb Python 3 y viceversa o depurar un programa que se ejecuta en un ordenador con un servidor de depuración que se ejecuta en otro ordenador dentro de una página web en un tercer equipo! Incluso mejor, ahora es posible pausar un proceso/subproceso python en ejecución usando la inyección de código desde la interfaz web. (Esto requiere el BGF y ptrace habilitado) En otras palabras, se trata de una versión muy mejorada del pdb directamente en el navegador con características agradables.

instalar y ejecutar el servidor, y en su código de complemento:

import wdb 
wdb.set_trace() 

Según el autor, las principales diferencias con respecto a pdb son:

Para aquellos que no lo hacen conozca el proyecto, wdb es un depurador de Python como pdb, pero con un front-end web slick y muchas funciones adicionales, tales como:

  • sintaxis Fuente destacando
  • puntos de interrupción Visuales
  • finalización
  • código interactivo usando jedi
  • puntos de interrupción persistentes
  • inspección profunda de objetos utilizando el soporte de ratón multihilo/multiprocesamiento
  • depuración remota
  • expresiones reloj
  • En depurador edición de código de integración
  • servidores web más populares romper en caso de error
  • en Breaking excepción durante la traza (no post mortem) en contraria al depurador werkzeug por ejemplo
  • de los frenos en los programas en ejecución a través de la inyección de código (en los sistemas admitidos)

Tiene una gran interfaz de usuario basada en navegador. ¡Una alegría de usar!:)

+0

¿Cuál es la diferencia con pdb? – Dunatotatos

1

Agregue import pdb; pdb.set_trace() en la línea correspondiente en el código de Python y ejecútelo. La ejecución se detendrá con un shell interactivo. En la carcasa se puede ejecutar código Python (es decir, las variables de impresión) o utilizar comandos como:

  • c continuar la ejecución
  • n paso a la siguiente línea dentro de la misma función
  • s paso a la línea siguiente en esta función o una función llamada
  • q salga del depurador/ejecución

véase también: https://poweruser.blog/setting-a-breakpoint-in-python-438e23fe6b28

Cuestiones relacionadas