2012-08-10 23 views
5

Quiero hacer que pydev entre en un modo de consola interactiva cada vez que mi programa genera una excepción no controlada pero no puedo encontrar la manera de hacerlo. Como se comporta ahora, la excepción se informa y el proceso finaliza de inmediato.¿Cómo habilito la depuración post mortem en pydev?

Después de buscar en torno encontré esto: http://sourceforge.net/tracker/index.php?func=detail&aid=3029746&group_id=85796&atid=577332 que sugiere utilizar pydevd.set_pm_excepthook()

Sin embargo, cuando agrego

import pydevd 
pydevd.set_pm_excepthook() 

a mi código, me sale una excepción:

This function is now replaced by GetGlobalDebugger().setExceptHook and is now controlled by the PyDev UI.') 
DeprecationWarning: This function is now replaced by GetGlobalDebugger().setExceptHook and is now controlled by the PyDev UI. 

Pero:

GetGlobalDebugger().setExceptHook() 

Parece que no funciona, GetGlobalDebugger() no existe en el espacio de nombres global.

+0

Descubrí cómo, pero parece que no puedo responder mi propia pregunta en 8 horas, así que supongo que debería esperar. –

Respuesta

4

En realidad, no necesita hacer esto programáticamente ... puede ir a la perspectiva de depuración> pydev> administrar puntos de interrupción de excepción y marcar 'suspender en excepciones no detectadas'.

+0

Oh, eso es práctico. Pensó que debería haber una opción como esa, pero no la encontró en las preferencias ni en las configuraciones de depuración. Gracias por el consejo. –

+0

¿En qué programa está esto? – Seanny123

+0

Esto es cuando se desarrolla dentro de PyDev: http://pydev.org/ –

2

Ok, así que después de un tiempo me di cuenta de lo obvio, el código debe ser:

import pydevd 
pydevd.GetGlobalDebugger().setExceptHook(Exception, True, False) 

Para capturar cualquier excepción unhadled. El método puede ser utilizado en otras formas de entrar en el modo de depuración cuando se bloquea el programa, tal como se documenta en el doc de setExceptHook:

Debería ser llamado para establecer las excepciones a ser manejados y si debe romper el no capturado y excepciones capturadas.

Puede recibir un parámetro para detenerse solamente en algunas excepciones.

E.g.: 
     set_pm_excepthook((IndexError, ValueError), True, True) 

     or 

     set_pm_excepthook(IndexError, True, False) 

     if passed without a parameter, will break on any exception 

    @param handle_exceptions: exception or tuple(exceptions) 
     The exceptions that should be handled. 

    @param break_on_uncaught bool 
     Whether it should break on uncaught exceptions. 

    @param break_on_caught: bool 
     Whether it should break on caught exceptions. 

espero que esto ayude a otros que quieran utilizar el depurador pydev en Eclipse para depurar un programa después de una excepción se ha planteado.

Cuestiones relacionadas