12.Debug

予早 2024-10-05 11:38:44
Categories: Tags:

pdb,python debug

python内置模块,java 使用 jdb,c/c++使用gdb,python使用pdb

PDB命令

break

断点,命令简写 b

tbreak

temporary breakpoint,临时断点,用法同break,临时断点在被第一次执行到后,会被自动删除

clear

disable

禁用断点,disable num1,断点依然存在但是不启用

enable

启用断点,enable num1,启用被禁用的断点

continue

命令简写c,继续执行程序

list

命令简写l,查看当前代码段

step

命令简写s

return

命令简写r

执行代码直到从当前函数返回

quit

命令简写q,退出pdb

next

命令简写n

print

命令简写p,打印当前变量

help

命令简写h,帮助

args

命令简写a,查看函数传入参数

回车

重复执行上次pdb命令

clear

根据序号删除断点

where

命令简写w,打印当前执行栈

down

命令简写d,执行跳转到当前堆栈的深一层

up

命令简写u,执行跳转到当前堆栈的浅一层

示例

 def add(a, b):
     print(a + b)
     return a + b
 
 
 def ten_times(f, *args, **kwargs):
     for _ in range(10):
         f(*args, **kwargs)
 
 
 if __name__ == '__main__':
     ten_times(add, 1, 1)

开启pdb

python -m pdb .\demo.py

break,在test.py文件的2行设置breakpoint(断点)

(Pdb) b demo.py:2 
Breakpoint 1 at c:\users\utsc\desktop\py37study\demo.py:2

continue,让程序一直运行到设置的断点

(Pdb) c
> c:\users\utsc\desktop\py37study\demo.py(2)add()
-> print(a + b)

list,查看当前执行的代码段

(Pdb) l
  1     def add(a, b):
  2 B->     print(a + b)
  3         return a + b
  4
  5
  6     def ten_times(f, *args, **kwargs):
  7         for _ in range(10):
  8             f(*args, **kwargs)
  9
 10
 11     if __name__ == '__main__':

args,查看传入参数

(Pdb) a
a = 1
b = 1

return,执行代码直到从当前函数返回

(Pdb) r
2
--Return--
> c:\users\utsc\desktop\py37study\demo.py(3)add()->2
-> return a + b

step

(Pdb) s
> c:\users\utsc\desktop\py37study\demo.py(7)ten_times()
-> for _ in range(10):
(Pdb) s
> c:\users\utsc\desktop\py37study\demo.py(8)ten_times()
-> f(*args, **kwargs)
(Pdb) s
--Call--
> c:\users\utsc\desktop\py37study\demo.py(1)add()
-> def add(a, b):
(Pdb) s
> c:\users\utsc\desktop\py37study\demo.py(2)add()
-> print(a + b)

print,打印变量

(Pdb) p a
1
(Pdb) p 2
2

next,执行下一行代码

(Pdb) n
2
> c:\users\utsc\desktop\py37study\demo.py(3)add()
-> return a + b

回车,执行上次的 debug 指令,此处会再次执行 next

(Pdb)
--Return--
> c:\users\utsc\desktop\py37study\demo.py(3)add()->2
-> return a + b

break,显示所有断点

(Pdb) b
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at c:\users\utsc\desktop\py37study\demo.py:2
        breakpoint already hit 1 time

clear,根据序号删除指定断点

(Pdb) clear 1
Deleted breakpoint 1 at c:\users\utsc\desktop\py37study\demo.py:2

quit,退出debug

(Pdb) quit

PDB 库

代码显式设置断点

 import pdb
 def test():
     pdb.set_trace()
     return "test"
 print(test())