ipdb使用tips

2017年04月09日

ipdb使用tips

胡言乱语

第一份工作的时候,带我的老师傅推荐了vim+ipython的工作流程,于是我几乎没有使用过python的IDE比如Pycharm或者Spider。
再之前我的代码生涯只是用Rstudio写过R,所以那个时候我觉得ipython超级难用!只能把代码一行行从vim拷到ipython运行。直到遇到了ipdb这个很好用的调试包。
这里想分享一些ipdb自己走过的坑,持续更新中。

hello world

ipdb包有两种方式可以调试python.

  1. 标记断点(更常用):在代码中加入import ipdb;ipdb.set_trace()
  2. 逐行运行:python -m ipdb test.py

tips:

tip1: 每次debug都要输入一长串ipdb.set_trace()

不仅如此,每次调试的时候需要在文件开始import ipdb,且这个很容易忘记删掉。
解决方案:使用vim的mapping.
在~/.vimrc中编辑
let mapleader="\<space>"
map <leader>b oimport ipdb;ipdb.set_trace()<esc>
那么只需要在vim的工作环境下输入“空格+b”的组合键,就会在当前行的下一行输入import ipdb;ipdb.set_trace()

tip2: 循环无法终止

for i in range(0, 10):
    import ipdb;ipdb.set_trace()
    print(i)

如果把断点加在循环中,那么你会发现,这个程序居然终止不了, 不管是按q还是exit还是按Ctrl-d都没用, 最后只好把这个窗口关掉[捂脸].
解决方案:
import os;os._exit(0)
os._exit(1) 可以强制退出程序

tip3: 无法help

ipython中想要查看方法的document,我习惯于后面加个问号就好了,比如os._exit?
但是在ipdb中,居然会报语法错误,此时你应该这样: !help(os._exit)即可,加上!符号可以执行python命令(注意不是ipython),但是至于在ipython中可以执行的ls,pwd等linux命令,恐怕是不行了。看来要不然还是用os.system(‘your command’)来执行这些linux命令吧。

ipdb cheat sheet

关于ipdb的命令,可见下图
ipdb cheat sheet

参考


知识共享许可协议
crouchred的博客Chen Xuyuan 创作,采用 知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可。
© 2016-2020. All rights reserved by Chen Xuyuan. Powerd by Jekyll & li2's Theme