- Avant - propos :…
-
table des matières
1 Commandes de débogage PDB
2 raccourcis clavier
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 Exemple de débogage
3.1 Exemple 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()函数打了两个断点(第4、7行)
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 Exemple 2
La méthode de débogage utilisée dans QuickStart n'est pas assez élégante, car le point d'arrêt est interrompu par la modification du code, ce qui n'est pas pratique à utiliser.
Ensuite, nous utilisons des points d'arrêt dynamiques pour déboguer
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 supplément
La méthode pour entrer en mode débogage dans la ligne de commande: python -m pdb demo.py
Appuyez sur la touche Entrée en mode débogage pour exécuter la commande précédente.