python实现断点调试的方法

发布时间:2026/11/2 6:30:12

python实现断点调试的方法 为了实现断点这个调试方法, 我们得采取一些措施。数据的更新时间是在二零二三年二月二十二日的十五点十六分二十秒, 而作者的署名是橙子味冰可乐。这篇文章的核心主题在于讨论如何实现断点调试的方法, 在文章的具体内容方面, 它是通过示例代码来进行相关介绍工作的, 且介绍的详细程度是非常到位的, 这对于读者接下来的学习过程或者是工作应用场景来讲是具有一定的参考作用以及学习价值的, 如果有需要深入了解的朋友们的话是需要跟随下面提到的编辑人员一起来进行共同的学习和重复训练的。如果程序里出现了错误, 那么我们应该通过什么样的方式来进行处理? 这也就是大家通常所称之为的bug或者说缺陷。另外在平常的工作过程之中, 我们究竟应当如何对这种bug实施调试操作呢。什么是bug(缺陷)软件缺陷这个东西, 大家一般就叫它bug。 它是说在软件里, 不管是在程序里头还是文档里头, 存在一些会搞坏软件正常运行的大问题。缺陷的原因代码的调试方式把东西给显示出来, 然后使用print语句打印出来。你可以在编辑器里面, 通过点击那个位置打断点的方式来对程序进行跟踪调试。调用日志模块, 然后执行写入操作把这些内容输出到记录日志的地方。下面呢, 我们是时候来看看了, 看这个该怎么去完成一个叫做打断点的动作。对任何从事开发工作的人来说, 调试这项技能都是非常非常重要的。因为这东西能够帮我们准确地找到那些错误的位置。并且还能发现程序里面存在的各种漏洞以及问题。系统本身还提供了非常多不同种类的用于调试的工具和相关的开发包。这些内容都是可以直接拿过来供我们进行选择并使用的。使用 pdb 进行调试pdb 是程序自带的一个包, 它为程序提供了一种交互式的源代码调试功能。这个功能的主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段以及动态地改变变量的值等。命令解释break 或 b 设置断点设置断点或 c继续执行程序list 或 l你可以查看位于当前的行里面的代码段。那个步骤, 或者说是s这个字。进入函数或 r把程序代码不停地执行, 一直到当前这个函数结束并且返回为止。exit 或 q中止操作并彻底退出程序。next 或 n把下面那一行给做掉。打印变量的值help帮助下面结合具体的实例讲述如何使用 pdb 进行调试这里是实例1, 也就是测试代码的那个例子。import pdba aaapdb.set_trace()b bbbc cccfinal a b cprint(final)开始执行调试操作, 也就是直接运行指定的脚本程序, 在这种情况下, 执行过程会停滞在 pdb.() 这个位置点, 你需要做出选择具体的操作步骤, 通过连续按下 n 键和 enter 回车键这样的组合操作方式, 就能够实现顺利执行当前的相关命令步骤代码, 在第一次已经成功执行按下 n 和 enter 之后, 随后就完全能够选择直接单独按 enter 这一种方式, 其表示的意思是重复地去执行上一条所出现的 debug 调试命令。第2个实例, 是使用pdb来进行调试。[rootrcc-pok-idg-2255 ~]# python epdb1.py /root/epdb1.py(4)?()- b bbb(Pdb) n /root/epdb1.py(5)?()- c ccc(Pdb) /root/epdb1.py(6)?()- final a b c(Pdb) list1 import pdb2 a aaa3 pdb.set_trace()4 b bbb5 c ccc6 - final a b c7 print(final)[EOF](Pdb)[EOF](Pdb) n /root/epdb1.py(7)?()- print(final)(Pdb)退出 debug 操作, 指的是使用 quit 或者 q 这两个命令来退出当前的 debug 状态。但是, quit 这个命令会以一种非常粗鲁的方式退出程序, 其直接的结果就会导致 crash 错误。实例3, 退出debug。[rootrcc-pok-idg-2255 ~]# python epdb1.py /root/epdb1.py(4)?()- b bbb(Pdb) n /root/epdb1.py(5)?()- c ccc(Pdb) qTraceback (most recent call last):File epdb1.py, line 5, in ?c cccFile epdb1.py, line 5, in ?c cccFile /usr/lib64/python2.4/bdb.py, line 48, in trace_dispatchreturn self.dispatch_line(frame)File /usr/lib64/python2.4/bdb.py, line 67, in dispatch_lineif self.quitting: raise BdbQuitbdb.BdbQuit打印变量的值。如果需要在调试过程中打印变量的值, 可以直接使用p加上变量名, 但是需要注意的是, 打印仅仅在当前的执行动作已经被执行了之后才能看到具体的值, 否则会报错: ...。实例4. debug 过程中打印变量[rootrcc-pok-idg-2255 ~]# python epdb1.py /root/epdb1.py(4)?()- b bbb(Pdb) n /root/epdb1.py(5)?()- c ccc(Pdb) p bbbb(Pdb)bbb(Pdb) n /root/epdb1.py(6)?()- final a b c(Pdb) p cccc(Pdb) p final*** NameError:(Pdb) n /root/epdb1.py(7)?()- print(final)(Pdb) p finalaaabbbccc(Pdb)你如果键入了字母 c , 那么就可以让当前的调试状态停住, 让程序接着往下跑。要是这段代码里头后续又碰到了括号 () 的定义或声明之类的状况的话, 那系统可能又会回到那种让用户单步操作的状态里去。阅读代码的人不妨试试看, 在打印最终结果的 print(final) 这个动作发生之前, 再插入一个括号 () 来证实一下是不是会重现进入调试模式的情形。实例 5, 停止调试操作功能以后去继续进行那个程序的执行动作。[rootrcc-pok-idg-2255 ~]# python epdb1.py /root/epdb1.py(4)?()- b bbb(Pdb) n /root/epdb1.py(5)?()- c ccc(Pdb) caaabbbccc在 debug 的时候不一定要完全记住现在代码块的具体情况, 要是想看清楚具体是哪些代码, 可以通过输入 list 命令或者是 l 来进行显示。list 这个工具会用箭头 - 指出当前正在进行 debug 的那条语句在哪里。实例6.debug 过程中显示代码[rootrcc-pok-idg-2255 ~]# python epdb1.py /root/epdb1.py(4)?()- b bbb(Pdb) list1 import pdb2 a aaa3 pdb.set_trace()4 - b bbb5 c ccc6 final a b c7 pdb.set_trace()8 print(final)[EOF](Pdb) c /root/epdb1.py(8)?()- print final(Pdb) list3 pdb.set_trace()4 b bbb5 c ccc6 final a b c7 pdb.set_trace()8 - print(final)[EOF](Pdb)在进行debug的时候, 我们要去使用函数。这是一个关于如何运用函数的具体实例。import pdbdef combine(s1,s2):s3 s1 s2 s1s3 s3 return s3a aaapdb.set_trace()b bbbc cccfinal combine(a,b)print(final)如果你直接按 n 键去进行 debug , 那么在代码跑到 final(a,b) final(a,b)这一行代码的时候 , 它会被当成一个普通的数据赋值语句来执行 , 然后程序就会直接跳到 print final print final这一步。那么要是你想要针对某个函数内部的功能去做 debug 处理的话该怎么操作呢 , 方法可以很直接 , 就是使用 s 键 , 这样可以进入函数块的内部去查看细节 , 而函数里面的单步调试方式 , 其实跟上面介绍的那些操作步骤是差不多的。要是你不想对函数内部进行一步步调试的话, 你可以在断点位置那里直接按下字母 r , 然后程序就会退回到它被调用的那一行代码去。这是一个关于对函数实施调试操作的实例, 编号为8。[rootrcc-pok-idg-2255 ~]# python epdb2.py /root/epdb2.py(10)?()- b bbb(Pdb) n /root/epdb2.py(11)?()- c ccc(Pdb) n /root/epdb2.py(12)?()- final combine(a,b)(Pdb) s--Call-- /root/epdb2.py(3)combine()- def combine(s1,s2):(Pdb) n /root/epdb2.py(4)combine()- s3 s1 s2 s1(Pdb) list1 import pdb23 def combine(s1,s2):4 - s3 s1 s2 s15 s3 s3 6 return s378 a aaa9 pdb.set_trace()10 b bbb11 c ccc(Pdb) n /root/epdb2.py(5)combine()- s3 s3 (Pdb) n /root/epdb2.py(6)combine()- return s3(Pdb) n--Return-- /root/epdb2.py(6)combine()-aaabbbaaa- return s3(Pdb) n /root/epdb2.py(13)?()- print(final)(Pdb)在软件调试阶段, 大家是可以去动态地修改那个数值的具体内容的。在下面这个具体的操作实例里面, 我们能看到相关的做法是什么样子。不过在此处有一个特别需要注意的事项, 就是会出现错误情况的发生。之所以会出现这种错误, 根本原因就是变量 b 已经事先被设定好了值。那么如果以后还想再次对变量 b的值做重新设定的话, 那么正确的使用做法应该是去用大写的那个 B。在调试的时候, 把值改成能动态变动的样子。[rootrcc-pok-idg-2255 ~]# python epdb2.py /root/epdb2.py(10)?()- b bbb(Pdb) var 1234(Pdb) b avfe*** The specified object avfe is not a functionor was not found along sys.path.(Pdb) !bafdfd(Pdb)那个pdb这种工具在进行调试工作的时候, 有一个特别明显的不足, 就是说它对多线程环境的支持不够完善, 对需要跨机器进行的远程调试情况的处理也是不到位, 另外它没有一个能让你看得很清楚、直观的界面来展示各种信息, 这样就不太适合用在比较大规模的项目开发里了, 因为在大项目里这类复杂场景的调试需求是很常见的, 所以这种情况就需要大家去使用那些功能更强大、级别更高的调试软件。接下来将介绍 IDE 的调试方法在使用的时候, 请通过调试这个操作来完成检查。同时提供了比较完善的调试功能, 这个功能是支持多线程的, 也是支持远程调试的, 是可以支持断点设置的, 也是可以支持单步模式的, 还是支持表达式求值的, 同时也是支持变量查看等一系列功能的。Step Over, 然后是 Step Into, 接着是 Step Out。在单步执行的时候, 如果在函数内部碰到了子函数, 是不会进入这个子函数里面去一步一步地执行的, 而是把这个子函数完整地带过, 让它全部执行完成, 然后才会停下来, 也就是说, 整个子函数在执行的过程中会被当成一个步骤来看待。注意在不存在子函数的情况下Step Over是和Step Into效果一样的进行单步执行操作的时候, 当代码的运行流程到达子函数这个地方, 执行程序就会进入到该子函数的内部去, 并且继续按照单步调试的方式进行一步一步的执行。Step Out: 要是当你单步执行的代码指针跑到子函数里面去了的样子, 那就用上Step Out这个选项, 然后就能够把那个子函数剩下的那一部分代码全都执行完, 最后再退回到上一层级的函数里去进行下面的操作。在第14行调用函数时打断点这个关于实例1里面Step Over的效果是什么样的, 可以展开给大家说清楚一点。实例2.Step Into的效果请点击一下那个Step Into, 然后继续进行下一步。请点击一下那个Step Into, 然后继续进行下一步。请点击一下那个Step Into, 然后继续进行下一步。关于第3个实例, 其展现的是Step Out这个效果的运行情况。关于实现断点调试的方法, 这篇文章的内容就介绍到这儿, 要是你还想继续了解和断点调试有关的其他内容的话, 可以去搜索脚本之家过往发布的那些文章, 或者接着往下看下面这些相关的文章, 希望大伙儿在往后能够多多支持一下脚本之家
延伸阅读

更多相关文章

2026/11/2 6:25:09

哔哩下载姬 downkyi 关停之后:发生了什么,以及你该怎么做

哔哩下载姬 downkyi 关停之后:发生了什么,以及你该怎么做 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、…

2026/11/2 7:35:16

Matlab IEEE14节点潮流计算:N-R与P-Q双算法实现与对比

简介:这份文档是《基于Matlab的IEEE14节点潮流计算程序》的配套说明书,面向电力系统稳态分析课程的学习者与大作业需求者,帮助理解并复现牛顿-拉夫逊法与P-Q分解法两种潮流算法的实现与比较。全文按论文格式排版,含目录、摘要、正…

2026/11/2 7:35:16

epoll_wait信号中断处理与竞态条件解决方案

1. 信号中断对epoll_wait的影响机制当epoll_wait系统调用被信号中断时,会返回-1并设置errno为EINTR(错误号4)。这种情况通常发生在以下场景:进程设置了信号处理函数(如SIGALRM定时器信号),当epo…

2026/11/2 7:35:16

Matlab实现IEEE14节点潮流计算:N-R与P-Q法源码详解与避坑指南

简介:这份文档是《基于Matlab的IEEE14节点潮流计算程序》的配套说明书,面向电力系统稳态分析课程的学习者与大作业需求者,帮助理解并复现牛顿-拉夫逊法与P-Q分解法两种潮流算法的实现与比较。文档以论文格式排版,含目录、摘要、正…

2026/11/2 7:35:16

NAS环境下的Typora替代方案:Haptic Markdown编辑器详解

1. 为什么我们需要Typora的替代品?作为一名长期使用Markdown写作的技术博主,我深刻理解Typora在Markdown编辑器领域的标杆地位。这款所见即所得的编辑器以其简洁的界面和流畅的写作体验赢得了大量用户的青睐。然而,随着Typora从免费转向付费模…

2026/11/2 7:35:16

OpenFOAM风工程核心设计:方程表达、分层架构与并行化

简介:这份PDF面向刚接触开源CFD工具的研究生、工程师与科研人员,系统梳理OpenFOAM的来龙去脉与核心能力,帮助读者在动手建模前建立对软件架构与适用边界的整体认识。内容涵盖其源自帝国理工学院Gosman小组、经Charlie Hill博士论文与Henry We…

2026/11/2 7:30:15

2025地级市驾车出行矩阵:数据生成与应用解析

1. 项目背景与数据价值2025年我国地级市间驾车出行距离和出行时间矩阵数据是一套具有重要战略价值的交通地理信息数据集。这类数据通常以NN矩阵形式呈现(N为全国地级市数量),矩阵中的每个单元格记录了两个城市之间的驾车最短路径距离&#xf…

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

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

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

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

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

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

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑