【简介调试工具】

pdb

使用如下代码就相当于添加断点了:

import pdb

pdb.set_trace() #设置断点的地方,放置于程序中

ipdb

相对于python,我们更趋向于ipython,有漂亮的颜色,和补全提示,以及bash混用;

相对于python内置的pdb,ipdb的优势也正在于此,其实就是对ipython的调用:

import ipdb

ipdb.set_trace()

pudb

是全屏的基于控制台的可视化调试器,有点像c语言中的Turbo C样式

为了支持pudb,需要在代码中插入

from pudb import set_trace; set_trace() or import pudb

rpdb

上面的两种方案要求有终端输出的情况下可行,有时候我们需要以后台形式执行python,此时是没有输出交互的,比如django开发,程序由uwsgi管理执行,标准输出已重定向,通常只能通过日志输出信息。这个时候我们就需要一个远程调试工具。

rpdb会开启一个socket连接,用于远程调试,默认端口是4444:

import rpdb

rpdb.set_trace(port=12345)

这样当程序被hang住之后,会监听该端口,可远程连接进行调试:

nc 127.0.0.1 12345

ripdb

rpdb只是pdb的远程版本,而ripdb就是将rpdb和ipdb的功能进行了整合,既有远程调试功能,又有漂亮的代码颜色:

import ripdb

ripdb.set_trace(port=12345)

如果还需要自动补全功能,还需要对终端进行一下设置:

SAVED_STTY=`stty -g`; stty -icanon -opost -echo -echoe -echok -echoctl -echoke; nc 127.0.0.1 12345; stty $SAVED_STTY

【详解pdb/ipdb】

试验程序:传两个参数,进行加法和减法

1

2

3

4

5

6

7

8

9

10

11

12

13

import sys

def add(num1=0, num2=0):

return int(num1)+ int(num2)

def sub(num1=0, num2=0):

return int(num1)- int(num2)

def main():

print sys.argv

addition= add(sys.argv[1], sys.argv[2])

print addition

subtraction= sub(sys.argv[1], sys.argv[2])

print subtraction

if __name__== '__main__':

main()

1、进入PDB调试,其实就是一个交互式源代码调试器;修改程序:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

import pdb# 添加模块

import sys

def add(num1=0, num2=0):

return int(num1)+ int(num2)

def sub(num1=0, num2=0):

return int(num1)- int(num2)

def main():

print sys.argv

pdb.set_trace()# <-- Break point added here,设置的断点

addition= add(sys.argv[1], sys.argv[2])

print addition

subtraction= sub(sys.argv[1], sys.argv[2])

print subtraction

if __name__== '__main__':

main()

2、程序执行触发调试器

执行:python 3_pdb.py 1 3 //程序在第一个断点处停止,如下

此时我们可以看到程序在print sys.argv 处出了一个断点

并显示下一步将要执行 addition = add(sys.argv[1], sys.argv[2])

3、下一行 -> n

输入“n”回车,将会执行addition = add(sys.argv[1], sys.argv[2]),然后打印出下一步操作;

但是会有一个问题,pdb没有进入到add函数中,下面的s选项可以解决此问题

4、打印 -> p

在执行过程中我们想看,某个变量的打印值,除了c可以直接跳到下一个断点,打印期间所有值

“p”可以打印出某个变量的值,但前提是已经执行过这个变量。如下:

5、单步 -> s

“s”可以进入某个函数内部,然后再函数内使用n/p/b/c等

“r”将返回前面进入函数的返回语句

6、添加动态断点 -> b

在程序里,我们设置了一个断点,但当我们执行很长的代码时,忘了在脚本中设置断点

我们就可以直接用“b”在此环境下设置下一个断点位置

格式:b 行数

7、列表 -> l

有时再调试时,不知道自己运行到哪,也不知道下面代码是什么了,为了不退出去去记某一行是什么,便可以执行小写“L”查看后面程序

8、动态分配变量

在调试期间,可以分配变量帮助进行调试,

(Pdb) !n=5

(Pdb) p n

5

9、结束 -> q/exit

在调试过程,想退出结束调试,可直接运行“q”或“exit”回车即可

--------------------------------------------------------------------------------------------------

PDB文档:https://docs.python.org/2/library/pdb.html

而ipdb用法和pdb类似,只是更友好,更直观,如下:

python调试_Python 调试相关推荐

  1. python调试_Python调试坑

    写python的人一般都不太看重调试, 因为这是一门解释性语言, 在哪出错会立马在解释器里提示出来.但是, 以上观点只适用于小的脚本或者项目.因为我在接触目前项目之前, 我一直都是这么做的. 对于一个 ...

  2. python linux调试_python调试

    以下是我做调试或分析时用过的工具的一个概览.如果你知道有更好的工具,请在评论中留言,可以不用很完整的介绍. 日志 没错,就是日志.再多强调在你的应用里保留足量的日志的重要性也不为过.你应当对重要的内容 ...

  3. python逐行调试_python如何单步调试

    Python怎么单步调试?下面给大家介绍一下单步调试: 方法一:执行 python -m pdb myscript.py (Pdb) 会自己主动停在第一行.等待调试,这时你能够看看帮助. 方法二:在所 ...

  4. python 逐行调试工具_Python调试的三个工具

    对于 python 代码的调试我们通常都是使用 IDE 自带的调试功能.但是 IDE 提供的调试功能存在局限性,例如在测试服务器上调试代码,但是又不可能在测试服务器上安装 IDE 进行调试.这时我们就 ...

  5. python逐行调试_python单步调试

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文由腾讯云+社区自动同步,原文地址 https:stackoverflow.c ...

  6. 如何为 Python 添加远程调试能力而不修改系统代码

    最近写了一些关于 Python 远程调试的扯淡向博文,第一篇是「远程调试你的 Python 代码」,第二篇是「使用 VS Code 远程调试 Python 程序」.前些日子开了一个叫做「第八个手艺人」 ...

  7. Python语言学习:python语言代码调试—异常处理之详细攻略

    Python语言学习:python语言代码调试-异常处理之详细攻略 目录 python语言代码调试-异常处理 异常捕捉可以使用 try/except 语句 相关文章 Python3 错误和异常 | 菜 ...

  8. python的断点调试

    2019独角兽企业重金招聘Python工程师标准>>> http://http://control.blog.sina.com.cn/admin/article/article_ad ...

  9. 无法支持python程序的编辑运行和调试_解决pycharm的Python console不能调试当前程序的问题...

    解决pycharm的Python console不能调试当前程序的问题 更新时间:2019年01月20日 10:22:39 作者:simpleshao 今天小编就为大家分享一篇解决pycharm的Py ...

最新文章

  1. 为何python不好找工作k-为何python不好找工作,seo行业不好转行了
  2. Apache连接和访问控制
  3. PHP中的mb_convert_encoding与iconv函数介绍
  4. nssl1467-U【差分】
  5. 电脑开机提示EFI Netword 0 for ipv4 boot failed的原因及解决方法
  6. 【python教程入门学习】python值得学吗,怎么自学?
  7. [BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)
  8. N76E003的学习之路(一)
  9. 利用函数求两个数的最大值
  10. 队列仿真一个银行叫号系统
  11. 液压系统管路流速推荐表_液压系统管道选择标准
  12. CODESYS 控制虚拟单轴运动
  13. HTC6950新手基本操作方法
  14. 计算机应用与维修电竞与管理,电子竞技运动与管理-五年制高技招生专业-广州市白云工商技师学院_广州市白云工商高级技工学校_信息工程系(计算机系)...
  15. 阿尔法α-贝塔β剪枝
  16. 大数据能否带来风控革命
  17. 苹果手机打开浏览器显示无法连接服务器,苹果浏览器safari打不开网页因为无法连接服务器吗?...
  18. EXCEL设置自动隔行填充颜色
  19. 2021国产数据库领域最具商业合作价值企业盘点
  20. 商业银行的科技发展趋势

热门文章

  1. 开发 一个尴尬的角色
  2. 安卓学习笔记22:常用控件 - 可展开列表视图
  3. 10.傅里叶变换——2D中的傅里叶变换,傅里叶变换的应用_5
  4. error : flash system error_求求你,别再用 System.out.println 了!
  5. Linux下rcS文件中sleep用法,对busybox工具rcS脚本中exec执行﹑后台执行和nohup执行的理解...
  6. Intel 64/x86_64/IA-32/x86处理器基本执行环境 (1) - 32位执行环境概述
  7. python自动打开浏览器下载zip,并且提取内容写入excel
  8. Android程序员重头学Synchronized
  9. java中访问控制修饰符什么含义_关于Java中访问控制修饰符的来由及浅解
  10. python中xlrd.open_workbook_python解决open()函数、xlrd.open_workbook()函数文件名包含中文,sheet名包含中文报错的问题...