aprendizaje pdb 1

1 comandos de depuración de PDB

Inserte la descripción de la imagen aquí

2 comandos de teclado

1.断点设置
(Pdb) b 10  # 断点设置在本py的第10行
(Pdb) b test.py:20  # 断点设置到 test.py第20行

2.删除断点
(Pdb) b  # 查看断点编号
(Pdb) cl 2  # 删除第2个断点

3.运行
(Pdb) n  # 单步运行
(Pdb) s  # 细点运行 也就是遇到函数、方法会进入里面
(Pdb) c  # 跳到下个断点

4.查看
(Pdb) p param  # 查看当前 变量值
(Pdb) l  # 查看运行到某处代码
(Pdb) a  # 查看全部栈内变量

5.打印变量
(Pdb)p param # 如果变量是个复杂的对象,可以先打印查看变量的属性,然后查看变量的某个属性值 (Pdb)p dir(param) (Pdb)p param.xxx  

3 ejemplo de depuración

3.1 Ejemplo 1

1.代码示例
import pdb
s1 = 'aaa'
pdb.set_trace()
s2 = 'bbb'
s3 = 'ccc'
pdb.set_trace()
s = s1 + s2 + s3
print(s)

可以看到上面代码使用pdb.set_trace()函数打了两个断点(47)


2.开始调试
执行上面代码就进入了调试状态:
> d:\projects\pythonprojects\3.25pdb\test.py(4)<module>()
-> s2 = 'bbb'  # -> 表示执行到了这里,但是还没有真正执行,因此此时的s2仍未被赋值
(Pdb) 

可以看出直接执行到了第一个断点所在的下一行,并停在了这里。
这时可以执行命令: n 进行下一步:
(Pdb) n
> d:\projects\pythonprojects\3.25pdb\test.py(5)<module>()
-> s3 = 'ccc'  # -> 表示执行到了这里,但是还没有真正执行,因此此时的s3仍未被赋值,但前面的代码都执行了
(Pdb) 

使用 p <变量名> 命令打印已经出现过的变量的值:
(Pdb) p s1
'aaa'
(Pdb) p s2
'bbb'
(Pdb) p s3
*** NameError: name 's3' is not defined
(Pdb) 
因为当前变量s3还没有被赋值,所以打印s3的时候提示 NameError 异常。


使用 l 命令打印出当前的代码段:
(Pdb) l 
  1      import pdb
  2      s1 = 'aaa'
  3      pdb.set_trace()
  4      s2 = 'bbb'
  5  ->    s3 = 'ccc'
  6      pdb.set_trace()
  7      s = s1 + s2 + s3
  8      print(s)

退出调试: q 命令

3.2 Ejemplo 2

El método de depuración utilizado en QuickStart no es lo suficientemente elegante, porque el punto de interrupción se interrumpe al modificar el código, que no es conveniente de usar.
Luego usamos puntos de interrupción dinámicos para depurar

1.代码示例
s1 = 'aaa'
s2 = 'bbb'
s3 = 'ccc'
s = s1 + s2 + s3
print(s)


2.开始调试
1,在终端输入命令执行脚本文件:python -m pdb test2.py
> d:\projects\pythonprojects\3.25pdb\test2.py(1)<module>()
-> s1 = 'aaa'
(Pdb) l
  1  -> s1 = 'aaa'
  2     s2 = 'bbb'
  3     s3 = 'ccc'
  4     s = s1 + s2 + s3
  5     print(s)
[EOF]

2,可以看到当前代码中我们还没有打任何断点,代码默认停在了第1行。
执行一个命令 n :
(Pdb) n
> d:\projects\pythonprojects\3.25pdb\test2.py(2)<module>()
-> s2 = 'bbb'
(Pdb) l
  1     s1 = 'aaa'
  2  -> s2 = 'bbb'
  3     s3 = 'ccc'
  4     s = s1 + s2 + s3
  5     print(s)
[EOF]
可以看到单步执行到了下一行。

3,如果我们想在第4行打一个断点,用 b <行号> 命令在某一行打一个断点:
(Pdb) b 4
Breakpoint 1 at d:\projects\pythonprojects\3.25pdb\test2.py:4
(Pdb) n
> d:\projects\pythonprojects\3.25pdb\test2.py(3)<module>()
-> s3 = 'ccc'
(Pdb) l
  1     s1 = 'aaa'
  2     s2 = 'bbb'
  3  -> s3 = 'ccc'
  4 B   s = s1 + s2 + s3
  5     print(s)
[EOF]

这样就成功地在第4行打了一个断点。

4,查看当前打了哪些断点: b 命令
(Pdb) b
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at d:\projects\pythonprojects\3.25pdb\test2.py:4

4 suplemento

El método para ingresar al modo de depuración en la línea de comando: python -m pdb demo.py
Presione la tecla Enter en el modo de depuración para ejecutar el comando anterior.

Supongo que te gusta

Origin blog.csdn.net/qq_36783816/article/details/112846216
Recomendado
Clasificación