使用ipython进行调试

前言

在编写调试Python代码的时候,我们通常有IDE和终端shell命令两种方式,习惯了使用IDE进行调试的朋友短时间可能不习惯使用shell调试,据说用着用着就习惯了,调试小的程序很方便。但是,我目前还是觉得vscode很香。

ipython调试器是对pdb调试器的加强,加强的点在于:tab键补全、语法高亮、异常回溯中每一行的上下文。所以能用ipython就别用pdb了。

什么?没有ipython?

pip install ipython

现在你有了。

1. 如何进入调试
1) 代码出错进入调试

调试代码的最佳时机之一就是在发生错误之后。
方式一:在发生错误之后立即输入命令

%debug

可以从出错处开始调试。

方式二:使用以下命令运行test.py文件

%run -d test.py   //带d参数的%run命令

当发生错误之后自动进入调试模式。

2) 对编写好的代码进行调试

有时我们并不是要测试一段语法有错的代码,可能是逻辑错误,这时我们不需要在出错时进入。可以使用以下命令:

	%run -d b3 test.py  //调试代码test.py并从第三行的断点开始调试

没错,和上面方式二的语句是一样的。这里的b3参数意为在第三行设置断点,这是可选的,如果不加,就会在第一行自动加一个断点并运行。

3) 在代码中预设断点进入调试

我们也可以再写代码的时候就埋好断点,那么只要正常运行程序,跑到预设断点的地方,就会自动进入调试,这跟在代码中加print来调试有异曲同工之妙。

  • pdb写法
    Python自带pdb模块,在代码中引入pdb模块,并在代码的任意地方调用:

     import pdb               //引入pdb包
     
     pdb.set_trace()          //预设断点
    

    则代码会自动进入pdb的调试。

    在这里谈到pdb的用法是为下面ipython的调试做一铺垫。用上面的方式只会进入pdb调试,没错,就是那种没有语法高亮,满屏都是字的恐怖调试,而下面讲到的ipython的方法可以让你进入ipython的漂亮调试。

  • ipython写法

     //引入方法set_trace
     from IPython.core.debugger import set_trace 
     
     //设置断点
     set_trace()
    

    设置完断点之后可以直接进入ipdb调试。

2. 调试操作

这一部分主要总结一下在进入调试模式之后,如何进行具体的调试(这里的语法是按照命令行里的语法写的):

1) 调试运行命令
语法功能注释
n执行下一行代码不会进入本行的函数体内
s执行下一行代码会进入本行的函数体内
c继续执行,直到结束或下一个断点
enter重复上一条命令在单步执行时很有用,直接enter,只需输入一次n或s
restart重启刚刚结束的调试
q退出调试
2) 断点命令
语法功能注释
b n在第n行设置断点n为行号。每个设置完的断点还有一个断点号。
cl清除所有断点
cl m删除第m号断点注意,m是断点号,不是行号
disable m关闭第m号断点
enable m启用第m号断点

注意区分行号和断点号,我们每创建一个断点,都会自动为其分配一个断点号。

3) 变量监控命令
语法功能注释
变量名获取变量直接输入变量名就可以取到变量的值
display 表达式计算表达式的值,每次值出现改变都打印出来
undisplay停止追踪表达式的值

注意:可能会出现变量名和命令名重复的情况,在ipython中是优先命令的,所以查看一个跟命令重名的变量,要在前面加!。

4) 源码查看及定位命令
语法功能注释
list显示此刻调试文件的源码设置断点需要知道行号,这个命令就可以看到行号
ll列出当前函数或帧的全部源代码
a显示当前函数的参数列表
w查看当前调试执行到哪里
whatis name返回变量name的类型name是一个变量名,可以是变量名或函数名

这是pdb调试官方文档,解释也挺清楚,基本ipython的调试命令和pdb是相同的。

3. vi编辑器部分命令

在使用ipython写程序的时候,难以避免的要使用vi编辑器,那么一些vi的常见命令还有很有用的,这里稍微总结,后面会加。
vi编辑器有三种模式,打开的时候是可视模式,按esc+:进入命令模式,按i进入编辑模式。在不同的模式有不同的命令。

在vi编辑器中,命令是区分大小写的。

1) 命令模式下指令
命令作用
q退出
wq保存并退出
q!强制退出
syntax on/off打开(关闭)语法高亮显示
set nu显示行号
set nu!关闭行号显示
i进入编辑模式

以上命令,在不同使用情况下作用的时长和范围不同:

使用方式作用范围
编辑时在命令状态下输入本次编辑
在~/.vimrc中配置对此用户生效
在/etc/.vimrc中配置对所有用户生效

为了方便,最好是能在vi编辑器的配置文件中进行配置。如果在路径下没有找到.vimrc文件,可以自己创建一个。设置完source的时候可能会提示命令未找到,但是还是会生效的,可以自己试一下。这里有一个很好的vi编辑器配置教程,由于本人目前没打算研究vi编辑器,感兴趣的自己看。
我直接把配置文件搬来了,可以直接复制:

''使得光标横向和纵向选中
highlight CursorLine   cterm=NONE ctermbg=black ctermfg=green guibg=NONE guifg=NONE
highlight CursorColumn cterm=NONE ctermbg=black ctermfg=green guibg=NONE guifg=NONE

''自动缩进和对齐
set autoindent
set smartindent

''默认显示行号
set number

''高亮行和列
set cursorcolumn
set cursorline

''高亮显示代码
syntax on

''代码补全
set completeopt=preview,menu

''在处理未保存或只读文件时,弹出确认
set confirm

''tab键的宽度
set tabstop=4

''统一缩进为4
set softtabstop=4
set shiftwidth=4

''可以在buffer的任何地方使用鼠标,类似双击定位
set mouse=a
set selection=exclusive
set selectmode=mouse,key

''搜索忽略大小写
set ignorecase

''搜索逐字符高亮
set hlsearch
set incsearch

''在被分割的窗口间显示空白,便于阅读
set fillchars=vert:\ ,stl:\ ,stlnc:\

''高亮显示匹配的括号
set showmatch

''匹配括号高亮的时间(单位是十分之一秒)
set matchtime=1

2) 可视模式下指令
命令作用
G到文件最后一行
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值