ipdb使用tips
胡言乱语
第一份工作的时候,带我的老师傅推荐了vim+ipython的工作流程,于是我几乎没有使用过python的IDE比如Pycharm或者Spider。
再之前我的代码生涯只是用Rstudio写过R,所以那个时候我觉得ipython超级难用!只能把代码一行行从vim拷到ipython运行。直到遇到了ipdb这个很好用的调试包。
这里想分享一些ipdb自己走过的坑,持续更新中。
hello world
ipdb包有两种方式可以调试python.
- 标记断点(更常用):在代码中加入import ipdb;ipdb.set_trace()
- 逐行运行: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的命令,可见下图