当前位置: 首页 > news >正文

pdb个人记录

import pdb; pdb.set_trace() 或者breakpoint()中断进入调试器,然后可以单步执行这条语句之后的代码

模块调试

python -m pdb myscript.py

当作为模块发起调用时,如果被调试的程序异常退出则 pdb 将自动进入事后调试。 在事后调试之后(或程序正常退出之后),pdb 将重启程序。 自动重启会保留 pdb 的状态(如断点)并且在大多数情况下这比在退出程序的同时退出调试器更实用。

pdb函数

pdb.set_trace(*header=None)

调用本函数的堆栈帧处进入调试器。用于硬编码一个断点到程序中的固定点处,即使该代码不在调试状态(如断言失败时)。如果传入 header,它将在调试开始前被打印到控制台。

pdb.run(statementglobals=Nonelocals=None)

在调试器控制范围内执行 statement (以字符串或代码对象的形式提供)。调试器提示符会在执行代码前出现,你可以设置断点并键入 continue,也可以使用 step 或 next 逐步执行语句(上述所有命令在后文有说明)。可选参数 globals 和 locals 指定代码执行环境,默认时使用 __main__ 模块的字典。(请参阅内置函数 exec() 或 eval() 的说明。)

>>>import pdb
>>>def f(x):
...    print(1 / x)
>>>pdb.run("f(2)")
> <string>(1)<module>()
(Pdb) continue
0.5
>>>

pdb.runeval(expressionglobals=Nonelocals=None

在调试器控制下对 expression (以字符串或代码对象的形式给出) 求值。 当 runeval() 返回时,它将返回 expression 的值。 在其他方面此函数与 run() 类似。

pdb.runcall(function*args**kwds)

使用给定的参数调用 function (以函数或方法对象的形式提供,不能是字符串)。runcall() 返回的是所调用函数的返回值。调试器提示符将在进入函数后立即出现。

pdb命令

  • 命令的参数必须用空格(空格符或制表符)分隔。在命令语法中,可选参数括在方括号 ([]) 中,使用时请勿输入方括号。命令语法中的选择项由竖线 (|) 分隔。
  • 输入一个空白行将重复最后输入的命令
  • 调试器无法识别的命令将被认为是 Python 语句,并在正在调试的程序的上下文中执行。Python 语句也可以用感叹号 (!) 作为前缀,这是检查正在调试的程序的强大方法,甚至可以修改变量或调用函数。当此类语句发生异常,将打印异常名称,但调试器的状态不会改变。
  • 要设置临时全局变量,请使用 快捷变量。 快捷变量 是名称以 $ 打头的变量。 例如,$foo=1 将设置一个全局变量 $foo 供你在调试器会话中使用。快捷变量会在程序恢复执行时被清空因此它不大可能像使用普通变量如 foo=1 那样影响到你的程序。存在三个预设的 快捷变量$_frame: 你正在调试的当前帧;$_retval: 当帧返回时的返回值;$_exception: 当帧引发异常时的异常值

h(elp) [command]

不带参数时,显示可用的命令列表。参数为 command 时,打印有关该命令的帮助。

w(here)

打印栈回溯,最新的帧位于底部。 有一个箭头 (>) 指明当前帧,该帧决定了大多数命令的上下文。

p expression

在当前上下文中对 expression 求值并打印该值。

whatis expression

打印 expression 的类型。

d(own) [count]

在堆栈回溯中,将当前帧向下移动 count 级(默认为 1 级,移向更新的帧)。

u(p) [count]

在堆栈回溯中,将当前帧向上移动 count 级(默认为 1 级,移向更老的帧)。

s(tep)

运行当前行,在第一个可以停止的位置(在被调用的函数内部或在当前函数的下一行)停下。

n(ext)

继续运行,直到运行到当前函数的下一行,或当前函数返回为止。( next 和 step 之间的区别在于,step 进入被调用函数内部并停止,而 next (几乎)全速运行被调用函数,仅在当前函数的下一行停止。

c(ont(inue))

继续运行,仅在遇到断点时停止。

l(ist) [first[, last]]

列出当前文件的源代码。如果不带参数,则列出当前行周围的 11 行,或延续前一次列出。如果用 . 作为参数,则列出当前行周围的 11 行。如果带有一个参数,则列出那一行周围的 11 行。如果带有两个参数,则列出所给的范围中的代码;如果第二个参数小于第一个参数,则将其解释为列出行数的计数。

ll | longlist

列出当前函数或帧的所有源代码。相关行的标记与 list 相同。

a(rgs)

打印当前函数的参数及其当前的值。

source expression

尝试获取 expression 的源代码并显示它。

display [expression]

如果 expression 的值发生变化则显示它的值,每次都会停止执行当前帧。

如果不带 expression,则列出当前帧的所有显示表达式。

r(eturn)

继续运行,直到当前函数返回。

j(ump) lineno

设置即将运行的下一行行号。仅可用于堆栈最底部的帧。它可以往回跳来再次运行代码,也可以往前跳来跳过不想运行的代码。

需要注意的是,不是所有的跳转都是允许的 -- 例如,不能跳转到 for 循环的中间或跳出 finally 子句。

unt(il) [lineno]¶

如果不带参数,则继续运行,直到行号比当前行大时停止。

如果带有 lineno,则继续执行直至行号大于或等于 lineno。 在这两种情况下,在当前帧返回时也将停止。

q(uit)

退出调试器。 被执行的程序将被中止。

参考:

pdb --- Python 的调试器 — Python 3.12.7 文档


http://www.mrgr.cn/news/42105.html

相关文章:

  • 【算法系列-链表】交换链表节点(反转 + 交换)
  • Spring MVC的运行流程详解
  • Netty:高性能异步网络编程框架全解析
  • Python中重载操作符实现管道操作
  • python全栈学习记录(二十一)类的继承、派生、组合
  • 【C++】vector类的模拟实现
  • QT入门知识----2024.8.21-9.28
  • 如何降低接口的响应时间(RT)
  • 滚雪球学Oracle[5.2讲]:数据库备份与恢复基础
  • Servlet的生命周期及用户提交表单页面的实现(实验报告)
  • 【c++】反证法证明为什么c++不能像JavaScript的typeof那样自动判断数据类型
  • [题解] [SDOI2011] 消防
  • Prometheus之Pushgateway使用
  • 【洛谷】AT_dp_m Candies 的题解
  • 复杂问题分析思维训练
  • c++小游戏
  • 【GESP】C++一级练习BCQM3023,输入-计算-输出-4
  • java版鸿鹄电子招投标系统功能架构设计 核心功能设计 鸿鹄电子招投标采购系统源码
  • 记账软件在线、会计记账网站、财务记账官网、记账云、云记账、在线免费做账以及易舟云财务软件
  • Go语言实现长连接并发框架 - 请求分发器