Depuración del comando pdb del programa de depuración en el servidor

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 pdbuse 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

 

Supongo que te gusta

Origin blog.csdn.net/Answer3664/article/details/104077460
Recomendado
Clasificación