¿Cómo utilizar pdb para la depuración de Python?
Este artículo describe cómo utilizar pdb para la depuración de Python. Cuando no tenga un IDE a mano, puede consultar este artículo cuando se enfrente a los problemas de depuración de Python; (depuración del comando pdb) y (pdb) ayudan a depurar Python con pdb. Primero veamos un ejemplo simple: epdb1.py .#epdb1.py---.experimento con el depurador de Python,pdba=\"aaa\"b=\"bbb\"c=\"ccc\"final=a+b+cprintfinal Por ejemplo, para depurar este programa: importpdb2: agregue pdb2 a la línea donde desea comenzar a depurar: agregue pdb.set_trace() a la línea donde desea comenzar a depurar. py--experimentwiththePythondebugger,pdbimportpdba=\"aaa/\"pdb.set_trace()b=\"bbb/"c=\"ccc/"final=a+b+cprintfinal puede ejecutar este programa y se detendrá cuando se alcanza el punto de interrupción Detener, similar a gdb, puede ejecutar comandos: regresar directamente significa repetir el comando anterior. p (imprimir) Ver el valor de la variable n (siguiente) Siguiente paso s (paso) Un solo paso, puede ingresar la función c (continuar) para continuar l (lista) Ver el código fuente Hay muchas formas para elegir para depurar pdb: 1. Línea de comando Inicie el programa de destino y agregue el parámetro -m, para que se pueda llamar al punto de interrupción de myscript.py, que es el punto de interrupción para ejecutar el comando pdb.
El punto de interrupción de py es python-mpdbmyscript.py antes de la primera línea del programa ejecutado. 2. Habilite la depuración en el entorno interactivo de Python >>>>importpdb>>>importmymodule>>>>pdb.run('mymodule.test()' ) 3. El método más común es insertar un programa en el medio del programa, en lugar de insertar un punto de interrupción en el IDE y luego comenzar a depurar, pero este método está codificado if__ name__==\"__main__\":a= 1importpdbpdb.set_trace() b=2c=a+bprint(c) Luego ejecute el script normalmente, vaya a pdb.run('mymodule.test('):a=1importpdbpdb.set_trace()b=2c=a+bprint( c) Luego ejecute el script normalmente y vaya a pdb.run('mymodule.test(')b=2c=a+bprint(c)set_trace() y será reparado. Puede ver la depuración comúnmente utilizada en la sección de depuración. indicador (Pdb) El comando h (elp) imprimirá los comandos disponibles en la versión actual de Pdb. Si desea consultar un comando, puede ingresar h [comando], por ejemplo: \l (ist), que puede enumerar. los bloques de código (Pdb) que se ejecutarán actualmente l 497pdb.set_trace () 498base_data={}499new_data= {}500try:501execfile(base_file_name,{},base_data)502->execfile(new_file_name,{},new_data)503except. :504logger.writeLog(\"error! loadresultlogerror!\ ")505print\"loadcmplogserror!\"506raiseException,\"loadcmplogserror!507>Punto de interrupción establecido (Pdb) b10#Punto de interrupción establecido en la línea 10 de este py o (Pdb) bots. py:20#Punto de interrupción establecido en la línea 20 de los bots. py Eliminar punto de interrupción (Pdb) b# Verificar el número del punto de interrupción (Pdb) cl2 # Eliminar el segundo punto de interrupción > Ejecutar (Pdb) n # Ejecución de un solo paso (Pdb) s # Refinar el punto. ejecutar, también conocido como caerá, Método (Pdb) c# Saltar al siguiente punto de interrupción Ver (Pdb) pparam # Ver el valor de la variable actual (Pdb) l # Ver el código que se ejecuta en algún lugar (Pdb) a # Ver todo apilar variables b (reak), establecer un punto de interrupción, como "b77", es establecer un punto de interrupción en la línea 77 del script actual. También puede ingresar el nombre de la función como parámetro. El punto de interrupción alcanzará la entrada de función específica. solo escribe b, se mostrarán todas las funciones existentes Punto de interrupción (Pdb) b504Breakpoint4at/home/jchen/regression/regressionLogCMP.py:504conditionbpnumber[condición], establezca un punto de interrupción condicional, la siguiente declaración es el cuarto punto de interrupción más la condición ("a. ===3 (Pdb) condition4a===3(Pdb)bNumTypeDispEnbWhere4breakpointkeepyesat/home/jchen/regression/regressionLogCMP.py:504stoponlyifa===3cl(ear), borra el punto de interrupción especificado si lo siguen argumentos (nunca tuve éxito en Python 2.4 !!!!!!!!)! py: 505n (ext), deja que el programa ejecute la siguiente línea, si la declaración actual tiene una llamada de función,
Entonces n no ingresará al cuerpo de la función llamada s (tep), similar a n, pero si hay una llamada de función, entonces s ingresará al cuerpo de la función llamada c (ont (inue)), luego s ingresará el cuerpo de la función llamada c(ont(inue)) Cuerpo c(ont(inue)), similar a n, pero si hay una llamada de función, s ingresará al cuerpo de la función llamada c(ont(inue)) , y luego s ingresará al cuerpo de la función llamada c (ont (inue))), luego s ingresará al cuerpo de la función llamada)), deje que el programa se ejecute normalmente hasta que encuentre el punto de interrupción j (ump), deje que el programa salta al número de línea especificado (Pdb) j497>/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, uno de los comandos más útiles, utilizado para imprimir los parámetros de una variable (Pdb)p_newu'./new/MRM-8137.log'! , la declaración después del signo de exclamación puede cambiar directamente una determinada variable q (uit) y salir de la depuración =============================== = =================================================== = ============= Importpdbpdb se puede depurar utilizando el módulo pdb en Python. set_trace() también se puede usar con python-mpdbmysqscript.py. (Pdb) se detendrá automáticamente en la primera línea y esperará la depuración. En este momento, puede consultar la descripción de estos comandos clave en la ayuda (Pdb)h. > Configuración del punto de interrupción (Pdb)b10#Establezca el punto de interrupción en la línea 10 de este py o (Pdb)bots.py:20#Establezca el punto de interrupción en la línea 10 de este py o (Pdb)bots.py:20#Establezca el punto de interrupción aquí Línea 10 de py. py:20#Establezca un punto de interrupción en la línea 20 de bots.Py. pyEliminar punto de interrupción (Pdb) b # Verificar el número de punto de interrupción (Pdb) cl2 # Eliminar el segundo punto de interrupción> Ejecutar (Pdb) n # Ejecución de un solo paso (Pdb) s # Refinar la operación del punto, es decir, saltar al siguiente punto de interrupción, método (Pdb)c# saltar al siguiente punto de interrupción> ver(Pdb)param#Ver los valores de las variables actuales(Pdb)l#Ver ejecutar el código en algún lugar(Pdb)a#Ver todas las variables en la pila(Pdb)wEnumerar la capa en la pila de llamadas donde se encuentra actualmente (Pdb)d baja una capa en la pila de llamadas (Pdb)u sube una capa en la pila de llamadas. Si se presiona n después de subir un nivel, la siguiente narración se ejecutará en el nivel después de subir y la llamada de función anterior se devolverá automáticamente. (Pdb)cl Borra el punto de interrupción especificado. Si no se dan argumentos, se borran todos los puntos de interrupción. (Pdb)disable desactiva todos los puntos de interrupción, pero los conserva. (Pdb) habilitar restaura la función de punto de interrupción. (Pdb)ignore Establece el recuento de puntos de interrupción ignorados. Si no se especifica ningún recuento, el recuento inicial es 0. Cuando el recuento llegue a 0, el punto de interrupción funcionará normalmente. Si se especifica un recuento, cada vez que se ejecuta el punto de interrupción, el recuento se reduce en 1 hasta que llega a 0.
(Pdb)condiciónbpnumber[condición](Pdb)j(ump)lineNo Salta a una línea determinada para su ejecución. Solo válido en la parte inferior de la pila de llamadas. (Pdb) Muestra la ubicación del archivo actual. Los comandos l sucesivos se enumerarán hasta el final del archivo y se pueden imprimir usando el número de líneas o rango especificado. (Pdb)pp Como el comando p, pero usa el módulo de impresión (la impresión nunca se usa, consulte PythonLibraryReference para obtener más detalles). (Pdb)alias es un conjunto de comandos de depuración/n que utilizan "alias/" en lugar de "/".