使用 pbd 进行单步调试pyhon代码
使用PDB的方式有两种:
1. 命令行
单步执行代码,通过命令 python -m pdb xxx.py 启动脚本,进入单步执行模式
pdb命令行:
1)进入命令行Debug模式,python -m pdb xxx.py
2)h:(help)帮助
3)w:(where)打印当前执行堆栈
4)d:(down)执行跳转到在当前堆栈的深一层(个人没觉得有什么用处)
5)u:(up)执行跳转到当前堆栈的上一层
6)b:(break)添加断点
b 列出当前所有断点,和断点执行到统计次数
b line_no:当前脚本的line_no行添加断点
b filename:line_no:脚本filename的line_no行添加断点
b function:在函数function的第一条可执行语句处添加断点
7)tbreak:(temporary break)临时断点
在第一次执行到这个断点之后,就自动删除这个断点,用法和b一样
8)cl:(clear)清除断点
cl 清除所有断点
cl bpnumber1 bpnumber2… 清除断点号为bpnumber1,bpnumber2…的断点
cl lineno 清除当前脚本lineno行的断点
cl filename:line_no 清除脚本filename的line_no行的断点
9)disable:停用断点,参数为bpnumber,和cl的区别是,断点依然存在,只是不启用
10)enable:激活断点,参数为bpnumber
11)s:(step)执行下一条命令
如果本句是函数调用,则s会执行到函数的第一句
12)n:(next)执行下一条语句
如果本句是函数调用,则执行函数,接着执行当前执行语句的下一条。
13)r:(return)执行当前运行函数到结束
14)c:(continue)继续执行,直到遇到下一条断点
15)l:(list)列出源码
l 列出当前执行语句周围11条代码
l first 列出first行周围11条代码
l first second 列出first–second范围的代码,如果second<first,second将被解析为行数
16)a:(args)列出当前执行函数的函数
17)p expression:(print)输出expression的值
18)pp expression:好看一点的p expression
19)run:重新启动debug,相当于restart
20)q:(quit)退出debug
21)j lineno:(jump)设置下条执行的语句函数
只能在堆栈的最底层跳转,向后重新执行,向前可直接执行到行号
22)unt:(until)执行到下一行(跳出循环),或者当前堆栈结束
23)condition bpnumber conditon,给断点设置条件,当参数condition返回True的时候bpnumber断点有效,否则bpnumber断点无效
注意:
1:直接输入Enter,会执行上一条命令;
2:输入PDB不认识的命令,PDB会把他当做Python语句在当前环境下执行;
实例:
test.py
s = '0'
n = int(s)
print(10/n)
打开命令行运行test1.py
python -m pdb test.py
> /home/jack/testgit/test.py(1)<module>()
-> s = '0'
(Pdb) l # 显示
1 -> s = '0'
2 n = int(s)
3 print(10/n)
[EOF]
(Pdb) n # 下一行
> /home/jack/testgit/test.py(2)<module>()
-> n = int(s)
(Pdb) l
1 s = '0'
2 -> n = int(s)
3 print(10/n)
[EOF]
(Pdb) p s # 显示变量s
'0'
(Pdb) q # 退出
2. 代码中设置断点
test.py
import pdb
s = '0'
n = int(s)
pdb.set_trace() #运行到这里会自动暂停
print(10/n)
运行:
python test.py
输出:
> /home/jack/testgit/test.py(5)<module>()
-> print(10/n)
(Pdb) l
1 import pdb
2 s = '0'
3 n = int(s)
4 pdb.set_trace()
5 -> print(10/n)
[EOF]
(Pdb) n
ZeroDivisionError: division by zero
> /home/jack/testgit/test.py(5)<module>()
-> print(10/n)
出处:https://blog.csdn.net/weixin_37251044/article/details/107471459
=======================================================================================
pdb命令行调试
pdb命令行调试
再运行python文件时,加入pdb参数
$ python -m pdb examples/train.py Yolov2
l #查看运行到哪行代码
(Pdb) l
1 -> import os
2 import argparse
3 import logging as log
4 import time
5 from statistics import mean
6 import numpy as np
7 import torch
8 from torchvision import transforms as tf
9 from pprint import pformat
n #单步运行,跳过函数
s #单步运行,可进入函数
Pdb) s
> /home/os/window_share/jiadongfeng/docker/algo/ObjectDetection-OneStageDet/examples/train.py(3)<module>()
-> import logging as log
n #让程序运行下一行,如果当前语句有一个函数调用,用’n’是不会进入被调用的函数体中的
s #与n类似,但如果当前有一个函数调用,那么s会进入被调用的函数体中
p 变量 #查看变量值
b 行号 #断点设置到第几行
b #显示所有断点列表
j #让程序跳转到指定的行数
cl 断点号 #删除某个断点
cl #删除所有断点
c #跳到下一个断点
r #return当前函数
exit #退出
(Pdb) exit
[1]+ Killed python examples/train.py Yolov2
设置断点
在需要断点调试处,添加以下代码进行调试
import pdb
pdb.set_trace()
然后直接运行python程序
python examples/train.py Yolov2
出处:https://blog.csdn.net/jiadongfengyahoo/article/details/120890220
=======================================================================================
Python pdb断点调试命令详解
python -m pdb xxx.py b xxx.py:20 #断点设置到 xxx.py第20行
- break 或 b 设置断点
b(reak) [([filename:]lineno | function) [, condition] ] condition是一个字符串,必须等价于 true - continue 或 c 继续执行程序
- list 或 l 查看当前行的代码段
- step 或 s 进入函数
- return 或 r 执行代码直到从当前函数返回
- exit 或 q 中止并退出
- next 或 n 执行下一行
- pp 打印变量的值
- help 帮助
- w(here) 显式当前堆栈结构。往下的是新的,就像X86构架中的那样。
- d(own) 移向新的一帧
- u(p) 移向旧的一帧
- cl(ear) [bpnumber [bpnumber ...]]
- 空格进行分割,清除这些断点
- disable bpnumber [bpnumber ...]
- disable 断点,可以enable之后
- ignore bpnumber count ---设置某个断点的count,当count为0的时候断点状态为active,count不为0的时候每一次进入断点时候count自减
- condition bpnumber condition
出处:https://www.cnblogs.com/Konjakmoyu/p/14679224.html
=======================================================================================
Python——pdb 断点调试
pdb是一个基于命令行的调试工具,只需要引入内置的pdb模块,并运行set_trace函数就可以触发调试器。通常将这两个操作写在一行中便于将其注释。
import pdb;pdb.set_trace()
命令 | 简写命令 | 作用 |
---|---|---|
break | b | 设置断点 |
continue | c | 继续执行程序,直到下一个断点或调用点 |
list | l | 查看当前行的代码段 |
step | s | 进入函数 |
return | r | 执行代码直到从当前函数返回 |
quit | q | 中止并退出 |
next | n | 执行下一行 |
p | 打印变量的值 | |
help | h | 帮助 |
args | a | 查看传入参数 |
回车 | 重复上一条命令 | |
break | b | 显示所有断点 |
break lineno | b lineno 在指定行设置断点 | |
break file:lineno | b file:lineno | 在指定文件的行设置断点\ |
clear num | 删除指定断点 | |
bt | 查看函数调用栈帧 |
出处:https://www.csdn.net/tags/Mtjakg0sNzQxODEtYmxvZwO0O0OO0O0O.html
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/16337322.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!