Siempre he usado pycharm para escribir python en el pasado, lo cual es más conveniente para depurar. Recientemente, necesito depurar algunos programas en un servidor remoto. Puedes usar pdb para depurar con una sola consola. Solo se utilizan unos pocos comandos.
- romper ob para establecer un punto de interrupción
- continuar oc para continuar el programa
- lista o ver el segmento de código de la línea actual
- paso os en la función
- return or ejecutar código hasta regresar de la función actual
- salir oq abortar y salir
- siguiente o n ejecutar la siguiente línea
- pp imprime el valor de la variable
- ayuda ayuda
pdb es un paquete que viene con python. Proporciona una función de depuración de código fuente interactiva para programas de Python. Las características principales incluyen la configuración de puntos de interrupción, depuración de un solo paso, depuración de funciones de entrada, visualización de código actual, visualización de fragmentos de pila y cambio dinámico de variables. Valor, etc.
Debe establecer un punto de interrupción cuando lo import pdb
use pdb.set_trace()
, y se detendrá aquí cuando ejecute el programa.
Pasos de depuración:
1. Establecer un punto de interrupción en el lugar de depuración
import pdb
pdb.set_trace() # 设置断点
2. (Pdb) n ingrese el siguiente paso
3. (Pdb) lista el código de impresión
4, (Pdb) pb imprime la variable
5, (Pdb) s ingresa la función
6, (Pdb)! B = "afdfd"! Cambiar dinámicamente el valor de la variable
7, (Pdb) q salir
Comandos de uso común:
- l: Ver el segmento de código en ejecución.
(Pdb) l
125 if self.is_cuda:
126 outputs.append(Variable(data.cuda()))
127 else:
128 outputs.append(Variable(data))
129 pdb.set_trace()
130 -> return tuple(outputs)
131
132
133 class CaffeMultiBoxLoss(nn.Module):
134 def __init__(self, layer, *input_shapes):
135 super(CaffeMultiBoxLoss, self).__init__()
(Pdb) c
forward_backward time: 1948.931108 1948.931108
> /data/zyj/caffe2pytorch/caffe_layers.py(119)forward()
-> data = self.net.blobs[name].data
l + el número de la línea inicial, puede ver las cinco líneas superior e inferior del número de línea.
l + número de línea inicial y número de línea final, puede ver dicho párrafo.
Después de presionar l, continúe presionando la tecla Enter para continuar viendo.
- n: Corre a la siguiente declaración.
(Pdb) n
> /data/zyj/caffe2pytorch/caffe_layers.py(120)forward()
-> if self.data_save_debug:
- s: Salta al interior de la función.
- pp + variable: imprime el valor de la variable
- c: corre al siguiente punto de interrupción
- r: Ejecutar hasta que la función salga.
(Pdb) r
--Return--
>n^H /data/zyj/caffe2pytorch/caffe_layers.py(130)forward()->(Variable...(GPU 0)]
, Variable...(GPU 0)]
)
-> return tuple(outputs)
- ayuda + [comando]: Ayuda.
(Pdb) help
Documented commands (type help <topic>):
========================================
EOF bt cont enable jump pp run unt
a c continue exit l q s until
alias cl d h list quit step up
args clear debug help n r tbreak w
b commands disable ignore next restart u whatis
break condition down j p return unalias where
Miscellaneous help topics:
==========================
exec pdb
Undocumented commands:
======================
retval rv
(Pdb) help n
n(ext)
Continue execution until the next line in the current function
is reached or it returns.
- b + número de línea: establece un punto de interrupción.
(Pdb) b 125
Breakpoint 2 at /data/zyj/caffe2pytorch/train_wider.py:125
Solo una b es para imprimir donde está el punto de interrupción.
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at /data/zyj/caffe2pytorch/train_wider.py:121
2 breakpoint keep yes at /data/zyj/caffe2pytorch/train_wider.py:125
- q: Salir.
- j + número de línea: ejecutar al número de línea
(Pdb) j 119
> /data/zyj/caffe2pytorch/train_wider.py(119)<module>()
-> for test_device_id in test_device_ids:
- w: pila de funciones de impresión
(Pdb) w
/data/zyj/caffe2pytorch/train_wider.py(112)<module>()
-> net.cuda()
> /home/zyj/anaconda2/lib/python2.7/site-packages/torch/nn/modules/module.py(216)cuda()
-> return self._apply(lambda t: t.cuda(device))
- cl + número de punto de interrupción: borrar el punto de interrupción
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at /data/zyj/caffe2pytorch/train_wider.py:121
2 breakpoint keep yes at /data/zyj/caffe2pytorch/train_wider.py:125
(Pdb) cl 1
Deleted breakpoint 1
(Pdb) b
Num Type Disp Enb Where
2 breakpoint keep yes at /data/zyj/caffe2pytorch/train_wider.py:125