0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python调试器,快速定位各种疑难杂症

电子工程师 来源:lq 2019-02-26 09:40 次阅读

写在之前

不管是之前搞 acm 用 c/c++算法还是后来用 Python 写代码,我发现在程序出现问题的时候,大多数人习惯性的用 print 函数打印变量值这种方法来试图找出问题的症结所在,这种查找问题的方式低效到让人只想删掉代码重新去写。我记得一些人问我问题的时候,我不止一次的推荐过让他们用单步调试去找代码中存在的问题,但是更多收获的是「什么是单步调试」这种疑问,其实单步调试就是,自己去 Google 好么?

究其源头还是很多人没有意识到「调试程序」的重要性,或者根本不知道这个概念。调试程序是所有开发人员必须具备的一项重要技能,它可以让我们一步一步的看到程序的运行过程,帮助我们准确的找到程序中的错误。当然这里我们还是以 Python 为例来说「调试程序」。

也许会有人说我现在就写一些短的代码,好像也不用这么麻烦的去调试程序。如果你只是准备写一辈子短代码,那你确实不用,但是如果你以后一步步的想去做项目了,随着代码量的增加,逻辑的复杂,如果你还是硬撑着用 print 去解决问题,那么恭喜你,你可能加班加到头发光光也不一定能找到问题在哪。所以我希望大家能在一开始就走在正确的道路上,只要稍微花点时间去学习就能掌握的技能为什么要当作视而不见呢?植发很贵的!

现在很多的编辑器其实都带着「调试程序」的功能,比如写 c/c++ 的 codeblocks,写 Python 的 pycharm,这种图形界面的使用和显示都相当友好,简单方便易学,这个不是我这篇文章要讲的重点。今天主要是想给大家介绍一下 「Python调试器」,快速定位各种疑难杂症。

Python 调试器

这一部分主要就是想说两个 Python 调试器,分别是标准库自带的 pdb 和开源的 ipdb。

pdb

pdb 是 Python 自带的库,为 Python 提供了一种交互式的源码调试功能,包含当前调试器应有的功能,包括设置断点、单步调试、查看源码等。其实如果你之前学过 c/c++ 的话,你可能知道 gdb 这个命令行调试工具,如果你之前用过 gdb,那么恭喜你你可以直接用 pdb 了,因为这哥俩一个用法。如果你不知道 gdb 也没事,我们先来看一下 pdb 的部分调试命令(截图来自脚本之家):

这里有两种不同的方法来启动 Python 调试器,两种方法适用于不同的场景。一种是直接在命令行参数指定使用 pdb 模块启动 Python 文件,这种适合于代码文件较短的情况,将在代码的第一行启动 Python 调试器。具体如下所示(例如文件名是 test.py):

python-mpdbtest.py

另一种是在 Python 代码中调用 pdb 模块的 set_trace 方法设置一个断点,当程序运行到此断点的时候,程序将会暂停执行并且打开 pdb 调试器,这种适合于代码文件较大的情况。具体如下所示:

importpdbdefget_sum(n):cnt=0foriinrange(n):pdb.set_trace()cnt+=iprint(cnt)if__name__=='__main__':get_sum(5)

启动 Python 调试器以后就可以使用上面截图中的调试命令进行程序的调试。比如在接下来的操作中,我们先使用 list 来查看我们的代码,然后使用 p 打印变量当前的取值,最后用 n 执行下一行 Python 代码:

ipdb

ipdb 是一个开源的 Python 调试器,其实它和 pdb 的接口是一样的。那既然一样的接口,那为啥还要设计个 ipdb 呢?黑格尔曾经说过「存在即合理」,ipdb 相比于 pdb 多了语法高亮,tab 自动补全等友好功能,在易用性方面做了很大的改进,这个感觉就和 Python 和 IPython 一样。

当然,ipdb 作为一个第三方库,在使用之前必然要先安装:

pipinstallipdb

我们修改一下之前例子中的 test.py 文件,修改之后的代码如下:

importipdbdefget_sum(n):cnt=0foriinrange(n):ipdb.set_trace()cnt+=iprint(cnt)if__name__=='__main__':get_sum(5)

具体的操作还是和上面的 pdb 的操作一样:

你看,上面带了点儿高亮,是不是顺眼了很多?还不赶紧去试试。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    3355

    浏览量

    42510
  • 调试器
    +关注

    关注

    1

    文章

    305

    浏览量

    23747
  • python
    +关注

    关注

    56

    文章

    4797

    浏览量

    84711

原文标题:优秀开发者必备技能包:Python调试器

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    解决射频电路的疑难杂症的方法分享

    射频电路板设计由于在理论上还有很多不确定因素,因此统称为“疑难杂症”。对于初入茅庐的工程师而言,缺乏实战经验,自己独立应变能力较差,本文更适合给刚刚踏入电源行业的工程师,希望有助于工程师们遇到那些“疑难杂症”时,可以从容应对。
    发表于 10-21 13:48

    飞控疑难杂症解决方法汇总

    (pixhawk)飞控疑难杂症解决方法汇总(持续更新)by 怒飞垂云2019年11月4日APM无法解锁/飞控连不上/黄灯闪烁/起飞侧翻/定点定不住/定高不稳/电台连不上/地面站连不上……无人机调试
    发表于 08-06 06:21

    GDB调试利器的相关资料分享

    1. GDB调试利器1.1. GDB简介在单片机开发中,KEIL、IAR、ADS1.2等集成开发环境下的调试工具对程序开发有很大的帮助, 尤其是出现各种疑难杂症的bug时,往往只能通过
    发表于 11-03 08:25

    DC/DC电源输入输出要隔离吗

    DC/DC电源输入输出要隔离还是要保证短距离回路?关注微信公众号:专治pcb疑难杂症 (PCBDoctor) 解决遇到的各种PCB疑难杂症。整理:杨老师 专治PCB疑难杂症群平台简介专
    发表于 11-16 07:28

    减少DC-DC输出端纹波的方法

    来自专治PCB疑难杂症总群的疑难杂症解析(添加杨医生微信号:johnnyyang206可入群讨论): 关注杨医生微信公众号:专治pcb疑难杂症 (PCBDoctor) 解决遇到的各种P
    发表于 11-17 06:54

    人工智能解决了许多的疑难杂症

    深度学习目前取得重大进展,解决了人工智能界的尽最大努力很多年仍没有进展的疑难杂症
    发表于 06-29 10:25 781次阅读

    3D打印康复辅具 为疑难杂症的治疗带来新的可能

    一句祝你平安、愿你健康,饱含的是祝福者满满的真诚与心意。当身体遭受病痛的折磨时,人们心中怀有的心愿就是早日恢复健康,能够像往常一样自由的嬉笑打闹、蹦蹦跳跳。高科技的迅速发展,正为疑难杂症的治疗带来新的可能。医生和患者,也成为了接触前沿科技的两大主体。
    的头像 发表于 03-17 14:12 1951次阅读

    在vscode上用gcc征服debug过程中遇到的各种疑难杂症

    vscode上用gcc征服debug过程中遇到的各种疑难杂症! 2. 安装MinGW MinGW是什么东西,怎么安装?这里就不详述了,随便百度出来一堆。
    的头像 发表于 11-18 16:18 5106次阅读

    DC/DC电源输入输出要隔离还是要保证短距离回路?

    疑难杂症 (PCBDoctor) 解决遇到的各种PCB疑难杂症。整理:杨老师 专治PCB疑难杂症群平台简介专治PCB疑难杂症微信群平台由8个
    发表于 11-09 15:51 16次下载
    DC/DC电源输入输出要隔离还是要保证短距离回路?

    如何减少DC-DC输出端的纹波?

     来自专治PCB疑难杂症总群的疑难杂症解析(添加杨医生微信号:johnnyyang206可入群讨论):    关注杨医生微信公众号:专治pcb疑难杂症 (PCBDoctor) 解决遇到的各种
    发表于 11-09 19:06 2次下载
    如何减少DC-DC输出端的纹波?

    GreenPAK 串行调试器快速入门指南

    GreenPAK 串行调试器快速入门指南
    发表于 06-30 20:58 1次下载
    GreenPAK 串行<b class='flag-5'>调试器</b><b class='flag-5'>快速</b>入门指南

    Linux问题故障定位大全

    有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。
    的头像 发表于 07-10 10:27 471次阅读
    Linux问题故障<b class='flag-5'>定位</b>大全

    Linux各种问题定位的工具及案例分析

    有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务进一步深入分析问题的根源。
    的头像 发表于 08-10 09:04 562次阅读
    Linux<b class='flag-5'>各种</b>问题<b class='flag-5'>定位</b>的工具及案例分析

    罗盘为什么会出现Bad Compass Health

    pixhawk飞控疑难杂症解决方案
    发表于 11-27 09:38 0次下载

    STM32编程疑难杂症

    疑难杂症
    的头像 发表于 03-28 23:29 456次阅读
    STM32编程<b class='flag-5'>疑难杂症</b>