Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如果没有 IDE,该如何 Debug?

如果没有 IDE,该如何 Debug?

作者头像
somenzz
发布于 2021-11-19 06:34:50
发布于 2021-11-19 06:34:50
43900
代码可运行
举报
文章被收录于专栏:Python七号Python七号
运行总次数:0
代码可运行

写代码时噼里啪啦,一顿操作猛如虎,一运行,发现不是 error 就是 exception,这是程序员经常遇到的场景,解决它就需要一步步去排错,排错的这个过程叫做 Debug。

借助 IDE(比如大名鼎鼎的 PyCharm 、VSCode) 本身的调试和跳转功能,你可以轻松定位到问题代码,但在服务器环境下,根本没有 IDE,这种情况下又该如何 Debug?本文分享 4 个没有 IDE 情况下的 Debug 技巧。

1、print

print 可以说非常简单粗暴易懂,觉得哪个变量有问题,直接在终端里面打印出来就看到妖怪的原型了,借助于二分法,可以很快定位到代码的问题。

2、assert

print 有个缺点,你用完还要手动删除,如果你懒得删除,就使用 asser 来断言好了,当你觉得某个变量必须是某值时,就可以加上 assert,如果不是,这里就会抛出异常,这样就定位到了问题。

3、日志

有时候,我们不方便在终端中查看信息,尤其是多线程的 Web 应用,此时就可以通过写入日志的方法来 Debug 问题。这个类似于 print,不再多说。

4、pdb

要说真正的 Debug 工具,还要说 Python 自带的 pdb 最为实用,掌握这个,无论什么环境都不影响你 debug。

接下来,我们就一起来看看,pdb 在 Python 中到底应该如何使用。首先,要启动 pdb 调试,我们只需要在程序中,加入“import pdb”和“pdb.set_trace()”这两行代码就行了,比如下面这个简单的例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pdb
for i in range(10000):
    print(i)
    if i == 800:
        pdb.set_trace()

当这个循环进行到 i==800 时,自动停下来进入命令行的调试,输入 i 即可查询变量的值,输入 n 表示执行下一行,输入 ll 查看上下文,输入 help 查看帮助。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
......
799
800
> /Users/aaronbrant/test.py(3)<module>()
-> for i in range(10000):
(Pdb) i
800
(Pdb) n
> /Users/aaronbrant/test.py(4)<module>()
-> print(i)
(Pdb) n
801
> /Users/aaronbrant/test.py(5)<module>()
-> if i == 800:
(Pdb) ll
  1      import pdb
  2
  3      for i in range(10000):
  4          print(i)
  5  ->        if i == 800:
  6              pdb.set_trace()
(Pdb) help

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

如果使用 IDE,是否要点击 800 次呢,我不是很清楚,没试过,如果使用 IDE 来断点定位至循环内的 800 次,我会直接放弃,选用其他方式。

除此之外,你也可以不修改代码,直接命令行使用 pdb 来 debug:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python -m pdb 123.py

pdb 其他命令:

  • s 表示 step into,即进入相对应的代码内部。这时,命令行中会显示”--Call--“的字样,当你执行完内部的代码块后,命令行中则会出现”--Return--“的字样。
  • r 表示 step out,即继续执行,直到当前的函数完成返回。
  • b 可以用来设置断点。比方说,我想要在代码中的第 10 行,再加一个断点,那么在 pdb 模式下输入”b 11“即可。
  • c 则表示一直执行程序,直到遇到下一个断点。

当然,除了这些常用命令,还有许多其他的命令可以使用,这里我就不在一一赘述了。你可以参考对应的官方文档(https://docs.python.org/3/library/pdb.html#module-pdb),来熟悉这些用法。

最后的话

本文分享了 4 个不依赖 IDE 的调试技巧,前三个非常简单,最后一个 pdb 学习成本稍高。如果要我选一个的话,我会选择日志这样的方式:将必要的变量及报错的堆栈信息都保存在日志文件中,当我们的程序报错时,所有必要的证据已经收集完毕,不需要再花心思复原现场,对着日志看下代码逻辑就可以更快的发现并解决问题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python自带的调试及性能分析神器
工具可以大大提升效率,节省时间,能自己掌控的时间越多,越自由。Python 也是效率工具,使用的越多,你省下来的时间就越多,你就会越觉得自由,因为一切尽在你的代码掌控中。
somenzz
2020/11/25
2.3K0
Python pdb调试
Python提供了pdb命令来对代码进行调试,下面是pdb的使用方法。 #示例脚本: a = 1 b = 0 print(1/0) #命令行调试 C:\Users\hongze>python -m pdb test.py #调用方法 > c:\users\hongze\test.py(1)<module>() -> a = 1 (Pdb) l #l查看全部代码 1 -> a = 1 2 b = 0 3 p
Steve Wang
2018/02/05
1.1K0
真叫人头秃!Python也有pdb
写过C语言的同学们想必都很怀念(读者:¿)gdb调试器,使用gdb可以随意在程序运行过程中暂停流程、查看变量。
小小詹同学
2020/11/17
7810
真叫人头秃!Python也有pdb
还在用print()语句来调试Python代码?快停止吧
我就是使用print()语句调试代码的人之一。有些时候,如果代码很长,那么就会有更多的打印,需要使用多个符号来相互区分。
HuangWeiAI
2020/12/18
6140
python: 深入了解调试利器 Pdb
Python是一种广泛使用的编程语言,以其简洁和可读性著称。在开发和调试过程中,遇到错误和问题是不可避免的。Python为此提供了一个强大的调试工具——Pdb(Python Debugger)。Pdb是Python标准库中自带的调试器,可以帮助开发者跟踪代码执行、查看变量值、设置断点等功能。本文将详细介绍Pdb的使用方法,并结合实例展示其强大的调试能力。
运维开发王义杰
2024/07/20
4480
python: 深入了解调试利器 Pdb
「Python调试器」,快速定位各种疑难杂症!!!
现在很多的编辑器其实都带着「调试程序」的功能,比如写 c/c++ 的 codeblocks,写 Python 的 pycharm,这种图形界面的使用和显示都相当友好,简单方便易学,这个不是我这篇文章要讲的重点。今天主要是想给大家介绍一下 「Python调试器」,快速定位各种疑难杂症。
一墨编程学习
2019/05/19
9510
python之错误调试
  我们可以在认为可能出错的地方打印变量,但这有很大的弊端,因为打印的代码没有实际功能,都是垃圾信息。而且print最后还得删除,所以第二种方法是用assert替代print
py3study
2020/01/15
8700
python 调试器
pdb 是 python 自带的一个包,为 python 程序提供了一种交互的源代码调试功能,主要特性包括设置断点、单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命令,详情见表 1。
py3study
2020/01/13
1K0
Python学习 Day 12 调试 断言 logging pdb pdb.set_trace()
ZeroDivisionError: integer division ormodulo by zero
Ai学习的老章
2019/04/10
8220
python 调试冷知识
对于 python 代码的调试我们通常都是使用 IDE 自带的调试功能。但是 IDE 提供的调试功能存在局限性,例如在测试服务器上调试代码,但是又不可能在测试服务器上安装 IDE 进行调试。这时我们就可以利用下面所讲解的三个工具进行调试。
喵叔
2020/09/08
6010
python 调试冷知识
优秀开发者必备技能包:Python调试器
不管是之前搞 acm 用 c/c++ 写算法还是后来用 Python 写代码,我发现在程序出现问题的时候,大多数人习惯性的用 print 函数打印变量值这种方法来试图找出问题的症结所在,这种查找问题的方式低效到让人只想删掉代码重新去写。我记得一些人问我问题的时候,我不止一次的推荐过让他们用单步调试去找代码中存在的问题,但是更多收获的是「什么是单步调试」这种疑问,其实单步调试就是,自己去 Google 好么?
AI科技大本营
2019/03/12
7150
优秀开发者必备技能包:Python调试器
pdb && cProfile
pdb https://docs.python.org/zh-cn/3.7/library/pdb.html#module-pdb 使用方式 1、在命令行下直接运行调试 python -m pd
Cloud-Cloudys
2020/07/07
5820
pdb && cProfile
python调试代码举例
Python自带的pdb库,发现用pdb来调试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的。
py3study
2020/01/13
5770
Python进阶教程(一)
概述 hi,朋友们大家好,今天将英文原著作者 @yasoob《Intermediate Python》进行翻译和在工作中使用的Python技巧进行了总结。Gitbook里面有翻译的版本,大家可以下载下来看看。我今天主要是将该英文原著翻译成适合自己的理解的语言,并附加一些自己在工作中使用Python的技巧。废话少说,下面我们依次来学习一下@yasoob的原著。 Intermediate Python 中译 如果在翻译过程中有问题或者code无法运行,还请各位大侠指正。 *args和**kwargs 我们在函数
吕海峰
2018/04/03
1.1K0
Python学习笔记(八)·错误、调试和测试
有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的。
公爵
2022/09/28
1.4K0
Python学习笔记(八)·错误、调试和测试
【三】强化学习之PaddlePaddlle-Notebook、&pdb、ipdb 调试---及PARL框架
                                                           --------云端运行程序
汀丶人工智能
2022/12/01
6470
【三】强化学习之PaddlePaddlle-Notebook、&pdb、ipdb 调试---及PARL框架
Python详解之调试:pdb
如果使用过微软技术的朋友应该体会过微软的Visual Studio系列IDE给debug程序带来的方便,换了个工作就没有Visual Studio了,对于我这种从未在非GUI环境下调试过程序的人来说实在有点不爽,今天花了点时间看了一下Python自带的pdb库,发现用pdb来调 试程序还是很方便的,当然了,什么远程调试,多线程之类,pdb是搞不定的。
py3study
2020/01/09
1.2K0
12 Python 基础: 如何优化代码质量,错误、调试和测试你必须要懂.md
有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的。
野原测试开发
2019/07/24
1.3K0
12 Python 基础: 如何优化代码质量,错误、调试和测试你必须要懂.md
python Debug 单步调试[通俗易懂]
一直犯愁的是python的调试,曾经写c都是编译完了用gdb直接调试了,轻松愉快。如今遇到这么一个解释型的程序。不知道怎么办了。用log吧,有时就是一个小程序,不想写这么多代码。打屏吧。有时屏幕翻得快,也是挺郁闷的。今天最终好了,看到了一个实用的东西。 PDB 方法一:执行 python -m pdb myscript.py (Pdb) 会自己主动停在第一行。等待调试,这时你能够看看 帮助 (Pdb) h 说明下这几个关键 命令 <断点设置 (Pdb)b 10 #断点设置在本py的第10行 或(Pdb)b ots.py:20 #断点设置到 ots.py第20行 删除断点(Pdb)b #查看断点编号 (Pdb)cl 2 #删除第2个断点 <执行 (Pdb)n #单步执行 (Pdb)s #细点执行 也就是会下到,方法 (Pdb)c #跳到下个断点 <查看 (Pdb)p param #查看当前 变量值 (Pdb)l #查看执行到某处代码 (Pdb)a #查看所有栈内变量 <假设是在 命令行里的调试为: import pdb def tt(): pdb.set_trace() for i in range(1, 5): print i <<< tt() #这里支持 n p c 而已 < (3)tt() (Pdb) n
全栈程序员站长
2022/07/08
9980
python 设计断点方式
Python的debug有两种方式: 1.在命令行中运行, 2.在脚本当中运行。两种方式都需要使用pdb模块。 方式一:在命令行中运行 $ python -m pdb my_script.py 方式二:脚本中运行
py3study
2020/01/06
4780
相关推荐
Python自带的调试及性能分析神器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档