Python PDB调试

常规

1
python -m pdb demo.py

Flask

1
2
import pdb
pdb.set_trace()

Celery

1
2
3
4
5
6
7
8
from celery import task
from celery.contrib import rdb

@task()
def add(x, y):
result = x + y
rdb.set_trace() # <- set break-point
return result
1
telnet localhost 6900

指令

命令 命令全称 功能
h help 查看帮助
n next 执行下一条语句
s step 执行下一条语句,如果是函数,则会执行到函数的第一句
b break 列出当前的所有断点
b <行号> / 在某一行打一个断点
b <文件名>:<行号> / 在某个文件的某行打一个断点
b <函数名> / 在某个函数的第一行打一个断点
cl clear 清除所有断点
cl n1 n2 … / 清除编号为n1、n2…的断点
cl <行号> / 清除某行的断点
cl <文件名>:<行号> / 清除某个文件某行的断点
r return 执行当前函数到结束
c continue 执行到下一个断点
l list 列出源码(前后11行代码)
l <行号> / 列出某行周围11行代码
l <行号1> <行号2> / 列出两个行号范围内的代码
p <变量名> print <变量名> 输出变量的值
pp <变量名> / 好看一点的输出
q quit 退出debug
unt until 退出循环或当期堆栈
run / 重新启动debug
a args 列出当前执行的函数的参数
w where 打印当前执行堆栈

实战

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/env python
# -*- coding:utf-8 -*-

__author__ = "ITXiaoPang"
__mtime__ = "2021/05/20"
__project__ = "PDB_Test"
__file__ = "pdb_test.py"
__IDE__ = "PyCharm"

import sys

def loop(n):
while True:
if n > 0:
break
n += -1

if __name__ == "__main__":
sys_argv = sys.argv
if len(sys_argv) != 2:
logging.critical(f'请输入一个数字。')
exit(-1)
loop(int(sys_argv[1]))

Python PDB调试
https://itxiaopang.github.io/p/1e5500ef34124f1393b91064bf560977/
作者
挨踢小胖
发布于
2021年9月11日
许可协议