ipdb,调试你的python程序

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

ipdb,在调试你的python程序

使用Spyder时,默认的调试方式是使用ipdbipdbpdb的增强版,提供了补全、语法高亮等补充内容。本文提供了ipdb的常用参数速查,并在后文中也给出了pdb的常用参数速查。两者大体相同。

1 ipdb

1.1 使用

  • 代码内使用ipdb
1
2
3
import ipdb

ipdb.set_trace()

但这种方式会破坏原有代码。

  • 代码外部使用ipdb
    • 注意,由于本文目的是使用Spyder下的ipdb,如果不想单独安装ipdb,可以通过自带的pdb完成下述命令测试。
1
python -m ipdb <file.py>

1.2 常用命令

  • <ENTER>
    • 重复上次命令
  • p(rint)
    • 打印某个变量
  • c(ontinue)
    • 继续
  • b(reak)
    • 打断点
  • cl(ear)
    • 清除断点
  • n(ext)
    • 让程序运行下一行,如果当前语句有一个函数调用,不会进入被调用的函数体中
  • s(tep)
    • n 相似,但是如果当前有一个函数调用,那么 s 会进入被调用的函数体中
  • l(ist)
    • 显示当前行的上下文
  • r(eturn)
    • 运行直到子程序结束
  • !<python 命令>
  • h(elp)
    • 帮助
  • a(rgs)
    • 打印当前函数的参数
  • j(ump)
    • 让程序跳转到指定的行数
  • l(ist)
    • 可以列出当前将要运行的代码块
  • q(uit)
    • 退出调试

1.3 调试中的帮助

调试时,使用 h ,可以查看所有命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ipdb> h

Documented commands (type help <topic>):
========================================
EOF cl debug ignore n pp run undisplay
a clear disable interact next psource rv unt
alias commands display j p q s until
args complete down jump pdef quit source up
b condition enable l pdoc r step w
break cont exit list pfile restart tbreak whatis
bt continue h ll pinfo return u where
c d help longlist pinfo2 retval unalias

Miscellaneous help topics:
==========================
exec pdb

使用 h <cmd> 可以查看具体命令的使用。

1
2
3
ipdb> h p
p expression
Print the value of the expression.

2 pdb

pdb的命令集:https://docs.python.org/3/library/pdb.html
出处:https://github.com/nblock/pdb-cheatsheet

2.1 Getting started

start pdb from within a script:

1
2
3
import pdb

pdb.set_trace()

start pdb from the commandline:

1
python -m pdb <file.py>

2.2 Basics

h(elp) print available commands
h(elp) command print help about command
q(quit) quit debugger

2.3 Examine

p(rint) expr print the value of expr
pp expr pretty-print the value of expr
w(here) print current position (including stack trace)
l(ist) list 11 lines of code around the current line
l(ist) first, last list from first to last line number
a(rgs) print the args of the current function

2.4 Movement

<ENTER> repeat the last command
n(ext) execute the current statement (step over)
s(tep) execute and step into function
r(eturn) continue execution until the current function returns
c(ontinue) continue execution until a breakpoint is encountered
u(p) move one level up in the stack trace
d(own) move one level down in the stack trace

2.5 Breakpoints

b(reak) show all breakpoints
b(reak) lineno set a breakpoint at lineno
b(reak) func set a breakpoint at the first line of a func

2.6 Manipulation

!stmt treat stmt as a Python statement instead of a pdb command

都看到这儿了,不如关注每日推送的“科文路”、互动起来~

至少点个赞再走吧~

ipdb,调试你的python程序

https://xlindo.com/kewenlu2022/posts/9c4c2af8/

Author

xlindo

Posted on

2022-06-06

Updated on

2023-05-10

Licensed under

Comments