2012-10-08 19 views
6

Soy relativamente nuevo en python y pdb, pero tengo mucha experiencia con gdb.PDB.run - reinicio de una sesión de pdb

Mi problema es que si establezco un número de puntos de interrupción en mi código en algún momento, querré cambiar algo y volver a ejecutar mi sesión de depuración conservando estos puntos de corte. Sin embargo la introducción de "carrera" en mis casos de sesión pdb mi sesión se interrumpa con el siguiente resultado

(Pdb) run 
    Traceback (most recent call last): 
    File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main 
    "__main__", fname, loader, pkg_name) 
    File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code 
    exec code in run_globals 
    File "/usr/lib64/python2.6/pdb.py", line 1319, in <module> 
    pdb.main() 
    File "/usr/lib64/python2.6/pdb.py", line 1312, in main 
    pdb.interaction(None, t) 
    File "/usr/lib64/python2.6/pdb.py", line 198, in interaction 
    self.cmdloop() 
    File "/usr/lib64/python2.6/cmd.py", line 142, in cmdloop 
    stop = self.onecmd(line) 
    File "/usr/lib64/python2.6/pdb.py", line 267, in onecmd 
    return cmd.Cmd.onecmd(self, line) 
    File "/usr/lib64/python2.6/cmd.py", line 219, in onecmd 
    return func(arg) 
    File "/usr/lib64/python2.6/pdb.py", line 661, in do_run 
    raise Restart 
pdb.Restart 
]$ 

He intentado esto en dos plataformas Linux independientes y tenían el mismo resultado, pero no puedo encontrar las correcciones de la documentación.

Respuesta

8

Así que si a alguien le importa el problema es que "ejecutar" en pdb no es exactamente lo mismo que "ejecutar" en gdb. En gdb, si ingreso ejecutar, el programa se reinicia y continúa hasta el primer punto de interrupción. En pdb, el programa se reinicia y va al inicio del archivo. Luego tengo que presionar 'n' seguido de 'c' para llegar al primer punto de quiebre. Si, al tratar de ejecutar el programa, escribo ejecutar una segunda vez al inicio del archivo, el depurador falla, como se muestra arriba.

+0

Sí, a alguien le importa. ¡Gracias! – Oddthinking

+2

Esto sigue siendo un error en pdb – erjoalgo

+0

Puede 'c' justo después de reiniciar, ¿no? –

1

Tras encontrarse con una condición anormal (es decir, un error en su programa), PDB en lugar amablemente dice:

Uncaught exception. Entering post mortem debugging 
Running 'cont' or 'step' will restart the program 

Aquí, escribiendo "correr" o "reinicio" hará que el proceso de AP a finalizar sin ceremonias como Estados OP (pero "cont" o "step" se reiniciarán como se prometió).

Es de suponer que muchos pythonistas impacientes preferirían "ejecutar" o "reiniciar" el trabajo independientemente de si ingresamos "depuración post mortem", pero estoy seguro de que la semántica de reinicio existente es el resultado de una implementación más limpia.

Cuestiones relacionadas