Cómo usar pdb para la depuración de Python
Hay varios métodos para depurar usando pdb:
1 Utilice el parámetro -m para iniciar el programa de destino en la línea de comando, de modo que si se llama a myscript.py, el El punto de interrupción aparecerá antes de la primera línea del programa
python -m pdb myscript.py
2. Habilite la depuración desde el entorno interactivo de Python.
Depuración
>>> importar pdb
>>> importar mimódulo
>>> pdb.run('mimódulo.test() ')
3. El método más común es insertar el programa en el medio del programa en lugar de hacer clic en el punto de interrupción e iniciar la depuración en el entorno de desarrollo integrado ordinario, pero este método está codificado
if __name__ == "__main__":
a = 1
importar pdb
pdb.set_trace()
b = 2
c = a + b
print (c)
Luego ejecute el script normalmente. Cuando ejecute pdb.set_trace(), el mensaje de depuración (Pdb). se configurará
Comandos de depuración comunes
h(elp) imprimirá los comandos disponibles de la versión actual de Pdb. Si desea consultar un comando, puede ingresar h [command. ], por ejemplo: "h l" - ver lista de comandos
l(ist), enumera los bloques de código que se ejecutarán actualmente
(Pdb) l
497 pdb.set_trace()
498 base_data = {}
499 new_data = {}
500 prueba:
501 execfile( base_file_name,{},base_data)
502 -> execfile(new_file_name,{},new_data)
503 excepto:
504 logger.writeLog( "error ! ¡Error de registro de resultados de carga!")
505 print "¡Error de registros de cmp!"
506 generar excepción, "¡Error de registros de cmp!"
507
b(break), establece un punto de interrupción, por ejemplo, "b 77", que establece un punto de interrupción en la línea 77 del script actual. También le permite ingresar el nombre de la función como parámetro. El punto de interrupción apuntará a un elemento de función específico. Si solo hace clic en b, mostrará todos los puntos de interrupción existentes
(Pdb) b 504
Punto de interrupción 4 en /home/jchen/regression/. regressionLogCMP.py:504
condición bpnumber [Condición], establece un punto de interrupción condicional La siguiente declaración agrega la condición "a===3" para el punto de interrupción 4
(Pdb) condición 4. a==3
( Pdb) b
Num Type Disp Enb Donde
4 Punto de interrupción mantenga sí en /home/jchen/regression/regressionLogCMP.py: 504
Solo si se detiene cuando ==3
cl(ear), si va seguido de un argumento, se borrará el punto de interrupción especificado (¡nunca lo logré en Python 2.4! ! )! ) y
deshabilitar/habilitar, deshabilitar/habilitar puntos de interrupción
(Pdb) deshabilitar 3
(Pdb) b
Num Type Disp Enb Donde
3 puntos de interrupción mantienen no en /home/jchen/regression/regressionLogCMP.py:505
n(
ext) se usa para permitir que el programa ejecute la siguiente línea. Si hay una llamada de función en la declaración actual, el uso de n no ingresará al cuerpo de la función llamada.
s(tep), similar a n, pero si hay una llamada de función en la declaración actual, entonces s ingresará al cuerpo de la función llamada
c(ont(inue )), let El programa se ejecuta normalmente hasta que encuentra un punto de interrupción
j(ump), lo que permite que el programa salte al número de línea especificado
(Pdb) j 497
> /home/jchen/regression/regressionLogCMP.py(497) compareLog()
-> pdb.set_trace()
a(rgs), imprime los parámetros de la función actual
( Pdb) a
_logger =
_base = ./base/MRM-8137.log
_new = ./new/MRM- 8137.log
_caseid = 5550001
_toStepNum = 10
_cmpMap = {'_bcmpbinarylog': 'True', '_bcmpLog ': 'True', ' _bcmpresp'.'True'}
p es uno de los comandos más útiles para imprimir variables
(Pdb) p _new
u'./new/MRM-8137.log'
!
Agregue un signo de exclamación después de la declaración para cambiar directamente la variable
q(uit) y salir de la depuración
Descubrí que depurar el programa en la línea de comando También es bastante fácil grabar y compartir cosas interesantes.
w, imprimir el seguimiento de la pila, el cuadro más reciente está representado por la flecha en el frente "marco actual", que determina el contexto de la mayoría de los comandos. . bt" es un alias para este comando.
d, mueve el fotograma actual hacia abajo un nivel en la pila.
d, mueve el fotograma actual hacia abajo un nivel en el seguimiento de la pila
(mover al marco más nuevo)
u, mueve el marco actual un nivel hacia arriba en el seguimiento de la pila
(mover al marco más antiguo
Usando los comandos u y d, podemos cambiar entre marcos de pila para obtener información sobre sus variables de contexto