news 2026/9/3 5:19:01

第24章-Python调试器 — Python101 1 文档

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第24章-Python调试器 — Python101 1 文档

第24章-调试器

自带一个名为pdb的模块, 此模块能为您的程序供给一个交互式的源代码调试器, 您能够设置断点, 可以单步执行代码, 还能检查堆栈帧等, 我们会探讨该模块的以下一些方面:

让我们先创建一段快速代码来尝试调试。下面是一个愚蠢的例子:

# debug_test.py def doubler(a): """""" result = a*2 print(result) return result def main(): """""" for i in range(1,10): doubler(i) if __name__ == "__main__": main()

现在让我们学习如何针对这段代码运行调试器。

如何启动调试器

具备三种各异的方式来启动调试器, 第一种方式是开展导入操作, 并且于代码里插入 pdb.()来启动调试器, 您能够于 IDLE 状态的时候进行调试器的导入, 进而让其运行您的模块, 又或者能够在命令行之上调用调试器, 我们会着重讲述本节最后的两种方式, 我们会起始于在解释器之中运用它(IDLE), 开启终端(命令行窗口), 朝着保存上述代码示例的地方进行导航, 接着启动, 此刻执行如下操作:

>>> import debug_test >>> import pdb >>> pdb.run('debug_test.main()') > (1)() (Pdb) continue 2 4 6 8 10 12 14 16 18 >>>

我们在这儿导入模块以及PDB, 接着执行PDB的run方法, 还要告知其调用模块的main方法, 这就会展现调试器的提示, 在此我们打字持续, 去告诉它继续运行脚本, 你也能够打字c当作继续的快捷方式,当你持续调试时, 程序会持续执行, 直至抵达断点或者脚本结束。

启动调试器的另一种方法是通过终端会话执行以下命令:

python -m pdb debug_test.py

如果您这样运行,您将看到一个稍有不同的结果:

-> def doubler(a): (Pdb) c 2 4 6 8 10 12 14 16 18 The program finished and will be restarted

注意到,在此示例里, 运用的是c而非持续, 还会注意到, 末尾调试器会重启, 这会保留调试器状态像断点, 且比作停止调试器更具用处, 有时, 得对代码多次检查, 以此了解出了啥问题。

让我们再深入一点,学习如何逐步完成代码。

单步执行代码

要是您期望一回一行地去浏览代码, 那么能够运用 step (或者简便的“s”)命令。这儿是您的观赏乐趣:

C:\Users\mike>cd c:\py101 c:\py101>python -m pdb debug_test.py > c:\py101\debug_test.py(4)<module>() -> def doubler(a): (Pdb) step > c:\py101\debug_test.py(11)<module>() -> def main(): (Pdb) s > c:\py101\debug_test.py(16)<module>() -> if __name__ == "__main__": (Pdb) s > c:\py101\debug_test.py(17)<module>() -> main() (Pdb) s --Call-- > c:\py101\debug_test.py(11)main() -> def main(): (Pdb) next > c:\py101\debug_test.py(13)main() -> for i in range(1,10): (Pdb) s > c:\py101\debug_test.py(14)main() -> doubler(i) (Pdb)

此时, 于此处, 我们开启调试器从而告知其单步去执行代码。它自顶部起步, 历经前两个函数定义过程。而后其抵达条件之处且发觉应当去执行main功能。我们进入主函数范畴, 跟着运用next命令。此个next倘若命令碰上一个正被调用之函数且未曾对其单步行使, 则它会去实施该函数。若您期望单步执行被调用之函数的话, 那么仅仅是要运用step命令即可!

如果你见到一行类似 > c:.py(13)main() 的样子, 那你就得留意括号里的数字。这个编号乃是代码里当下的行号。

使用 args (或者 a), 能把当前参数列表打印至屏幕。另一便利命令是 jump (或者 j), 随后接空格以及要“跳转”至的行号。靠此可跳过一连串单调步骤, 抵达所想抵达的行。由此让我们知晓了断点!

设置断点

位于代码里头, 会致使暂停去执行的那一行存在断点。借助下达 打破 这一命令, 或者是b命令, 紧接着跟上空格以及打算中断的行号, 便可达成。要是想在别的文件里明确断点, 还能够于该文件的行号之前添加上文件名且以冒号衔接。break命令另外还准许运用 功能 参数。存在一个t制动命令, 这个命令会去设置一个临时断点, 一旦该断点被触发, 那么就会自动被删除。

下面是一个例子:

c:\py101>python -m pdb debug_test.py > c:\py101\debug_test.py(4)<module>() -> def doubler(a): (Pdb) break 6 Breakpoint 1 at c:\py101\debug_test.py:6 (Pdb) c > c:\py101\debug_test.py(6)doubler() -> result = a*2

开启使得调试得以进行的工具, 接着告知其于第六行之处设定一个断点。而后持续推进, 它于六号线路停下, 恰似其理应停止那般。此刻是对参数列表予以查验的适宜时段, 用以查看其是否为你所预期的。尝试键入字词args眼下。接着再开展一项持续行进的操作还进行一次args查看其会怎样发生改变的。

总结

别的大量命令于调试器里是能够运用的, 我提议去阅读文档以便知晓别的文档, 然而, 此刻您理应能够借助调试器切实地调试自身的代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 5:18:15

MATLAB GUI工具HaoCurve:从图表图像中高效精确提取曲线数据

简介&#xff1a;本资源是一款面向科研人员与工程技术人员的MATLAB图形化工具&#xff0c;专为高效提取论文插图中曲线数据而设计&#xff0c;解决传统手动读数误差大、复现图表困难等痛点。压缩包共3个文件&#xff08;160KB&#xff09;&#xff0c;含核心GUI脚本Haocurve.m、…

作者头像 李华
网站建设 2026/9/3 5:17:43

Python机器学习案例资源库:从入门到精通的实战指南

机器学习案例资源库&#xff1a;从入门到精通的实战指南【下载地址】机器学习案例资源库, 此资源库给出了一系列机器学习方面的小案例, 该系列案例的目的在于协助初学者以及进阶者更棒地领会并运用机器学习算法, 案例包含了多种常见的机器学习技术, 诸如逻辑回归&#xff08;&a…

作者头像 李华
网站建设 2026/9/3 5:16:38

本地LLM高效搜索方案:四层过滤架构实现低成本网页信息提取

如果你正在尝试让本地大语言模型&#xff08;LLM&#xff09;具备联网搜索能力&#xff0c;很可能已经遇到了一个棘手的问题&#xff1a;每次搜索请求动辄消耗数万甚至数十万 tokens&#xff0c;不仅响应缓慢&#xff0c;成本也高得惊人。这背后的根本原因在于&#xff0c;传统…

作者头像 李华
网站建设 2026/9/3 5:13:19

开源IPTV项目iptv-org全解析:从M3U播放列表到EPG节目指南实战

如果你还在为寻找稳定、免费的 IPTV 频道源而烦恼&#xff0c;或者厌倦了在不同播放器间频繁切换测试源是否有效&#xff0c;那么 iptv-org/iptv 这个 GitHub 项目值得你深入了解。这不仅仅是一个简单的频道列表合集&#xff0c;而是一个由全球社区共同维护的开源项目&#x…

作者头像 李华
网站建设 2026/9/3 5:13:18

稀疏截断态矢量模拟:突破量子计算经典模拟瓶颈的关键技术

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华