python debug & ipdb

pudb使用

to be continued…

ipdb和pdb区别

实际上ipdb是pdb的扩展版本,在pdb的基础上添加了如下功能:

  • 可以使用tab(提示)补全代码的功能(我觉得这一点上我就完全倒戈了…)
  • 调试不再是黑白的,l命令可以输出带颜色的代码(将变量、命令、函数名等区分开,提高代码可读性)
    在这里插入图片描述
    就像这样,test.py(13)里面的13是当前行号
    左边的箭头表示你现在马上要运行的代码所在处
    最左列的红色的1和2代表你设置的断点

refer



常用命令

  • 整理几个自己常用的:
    1. u
      也就是up ,回到上一层的帧栈 (对应的就是 d ) ,这在你进入到了一个exception的捕捉过程中的时候相当有用…

    2. display var
      var是我们要跟踪的变量,这样每次var变化的时候就会自动print出来
      想取消就用undisplay var即可

    3. p var
      这个是我自己经常忘记,然后傻傻打print,实际上直接p命令就可以。另一方面也证明ipdb里面不仅可以输入ipdb的命令,还可以输入python的code进行实时编译和运行

    4. bt/where 或者简写成 w
      查看层叠帧栈

    5. source function
      查看 function的源代码
      类似的还有pdoc var 查看var的文档(变量和函数都可以,有点像dir(var)命令)
      pinfo var命令,可以看到var声明的源代码地址
      ll命令也可以

    6. j(jump)
      修改CPU的下一条指令,会忽略中间的代码不去执行,也可以往回跳,只要你确认不会报错就可以

    7. 关于断点的:

    1.b
    查看断点有哪些(会用序号分别标出来)
    gdb里面是info b 有点不大一样
    2. cl idx
    根据上一步输出的序号idx,可以删除你想删除的断点
    gdb里面是del idx ,有点不大一样
    3. disable idx & enable idx
    根据命令1输出的序号idx,可以设置让该断点当前生效或者失效(如果直接删除代价太大了)
    4. tbreak 添加临时断点(这次断完就会失效
    tbreak line
    tbreak file:line
    5. 条件断点
    b [ [fileName:]lineNo [, condition] ]
    e.g. b 5, flag==true
    6. 另一个加断点的小trick
    if( 你想要停下的判断条件 ):
    ipdb.set_trace()




小trick

使断点全局失效/生效

import ipdb
ipdb.set_trace()	#在你想要开始调试的地方写下这行就可以

然后在shell里面python xx.py或者直接 ./xxx.py也可

  • 如果单次想要让断点失效,但是又不想手动一个一个删除ipdb.set_trace()怎么办?
def f():
	pass

ipdb.set_trace=f

利用函数覆盖
如果调试到一半又想要使用ipdb.set_trace()的功能怎么办(是的我们程序员就是事儿多)

reload ipdb  或者 del ipdb

原理可以参考我之前的blog xxx object is not callable可能的原因之一【恢复被覆盖的python内置函数】

想要监视某个变量的特殊情况

  • condition BreakPointIndex expr
  • 在那个出错的地方加上ipdb的set_trace

比如说,想看xx小于0的时候是怎么个情况,就在它上次报错的后面加上:

if xx<0:
	import ipdb
	ipdb.set_trace()
  • 如果想要实时关注或者盯着看某个变量的变化情况,使用watch或者display



More / 其他调试技巧

dir()

  • 查看当前内存中的变量
    在这里插入图片描述
    包括导入的包、创建的类

  • 查看类的成员、方法

    • dir ( GridMatrix )
    • GridMatrix .__ dict__也可以查到(不过是以dict的形式返回)

key是这个成员变量或者函数的名字,value是这个成员函数的地址或者这个成员变量的值( 相当于key.__ str__的返回值)
在这里插入图片描述

可以通过GridMatrix .__ dict__[‘reset’]来查看GridMatrix 类reset成员函数的地址

添加包的搜索路径

https://www.jianshu.com/p/cb6447e1cf88
summary of the site link :

  • change in codes(适合于一次性)
import sys
sys.path.append( str path )
  • change system PYTHONPATH
  • change python pkg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值