使用IPDB调试Python代码
(转载自:https://xmfbit.github.io/2017/08/21/debugging-with-ipdb/)
IPDB是什么?IPDB(Ipython Debugger),和GDB类似,是一款集成了Ipython的Python代码命令行调试工具,可以看做PDB的升级版。这篇文章总结IPDB的使用方法,主要是若干命令的使用。更多详细的教程或文档还请参考Google。
安装与使用
IPDB以Python第三方库的形式给出,使用pip install ipdb
即可轻松安装。
在使用时,有两种常见方式。
集成到源代码中
通过在代码开头导入包,可以直接在代码指定位置插入断点。如下所示:
1
2
3
4
5
6
|
import ipdb
# some code
x = 10
ipdb.set_trace()
y = 20
# other code
|
则程序会在执行完x = 10
这条语句之后停止,展开Ipython环境,就可以自由地调试了。
命令式
上面的方法很方便,但是也有不灵活的缺点。对于一段比较棘手的代码,我们可能需要按步执行,边运行边跟踪代码流并进行调试,这时候使用交互式的命令式调试方法更加有效。启动IPDB调试环境的方法也很简单:
1
|
python -m ipdb your_code.py
|
常用命令
IPDB调试环境提供的常见命令有:
帮助
帮助文档就是这样一个东西:当你写的时候觉得这TM也要写?当你看别人的东西的时候觉得这TM都没写?
使用h
即可调出IPDB的帮助。可以使用help command
的方法查询特定命令的具体用法。
下一条语句
使用n
(next)执行下一条语句。注意一个函数调用也是一个语句。如何能够实现类似“进入函数内部”的功能呢?
进入函数内部
使用s
(step into)进入函数调用的内部。
打断点
使用b line_number
(break)的方式给指定的行号位置加上断点。使用b file_name:line_number
的方法给指定的文件(还没执行到的代码可能在外部文件中)中指定行号位置打上断点。
另外,打断点还支持指定条件下进入,可以查询帮助文档。
一直执行直到遇到下一个断点
使用c
(continue)执行代码直到遇到某个断点或程序执行完毕。
一直执行直到返回
使用r
(return)执行代码直到当前所在的这个函数返回。
跳过某段代码
使用j line_number
(jump)可以跳过某段代码,直接执行指定行号所在的代码。
更多上下文
在IPDB调试环境中,默认只显示当前执行的代码行,以及其上下各一行的代码。如果想要看到更多的上下文代码,可以使用l first[, second]
(list)命令。
其中first
指示向上最多显示的行号,second
指示向下最多显示的行号(可以省略)。当second
小于first
时,second
指的是从first
开始的向下的行数(相对值vs绝对值)。
根据SO上的这个问题,你还可以修改IPDB的源码,一劳永逸地改变上下文的行数。
我在哪里
调试兴起,可能你会忘了自己目前所在的行号。例如在打印了若干变量值后,屏幕完全被这些值占据。使用w
或者where
可以打印出目前所在的行号位置以及上下文信息。
这是啥
我们可以使用whatis variable_name
的方法,查看变量的类别(感觉有点鸡肋,用type
也可以办到)。
列出当前函数的全部参数
当你身处一个函数内部的时候,可以使用a
(argument)打印出传入函数的所有参数的值。
打印
使用p
(print)和pp
(pretty print)可以打印表达式的值。
清除断点
使用cl
或者clear file:line_number
清除断点。如果没有参数,则清除所有断点。
再来一次
使用restart
重新启动调试器,断点等信息都会保留。restart
实际是run
的别名,使用run args
的方式传入参数。
退出
使用q
退出调试,并清除所有信息。
当然,这并不是IPDB的全部。其他的命令还请参照帮助文档。文档在手,天下我有!
使用IPDB调试Python代码的更多相关文章
- 【转载】PDB命令行调试Python代码
转载自这里. (博主按:PDB调试python代码和用GDB调试c++代码很类似) 你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇到上述境地的次数比你想要的还要多.然而, ...
- [置顶] 如何在Python IDLE中调试Python代码?
好久没有用Python了,居然忘记了怎么在Python IDLE中调试Python代码.百度了一下,然后还是写下来吧,以免以后又忘记了. 1. Set break point in the sourc ...
- 在Linux下调试Python代码的各种方法
这是一个我用于调试或分析工具概述,不一定是完整全面,如果你知道更好的工具,请在评论处标记. 日志 是的,的确,不得不强调足够的日志记录对应用程序是多么的重要.您应该记录重要的东西,如果你的记录足够好的 ...
- 使用pycharm远程调试python代码
使用 pycharm 进行 python 代码远程调试 pycharm 的远程调试是从远程机器连接到本地机器,需要在远程机器的py文件中指定本地机器的IP和端口. 远程机器上,通过easy_insta ...
- Python - 调试Python代码的方法
调试(debug) 将可疑环节的变量逐步打印出来,从而检查哪里是否有错. 让程序一部分一部分地运行起来.从核心功能开始,写一点,运行一点,再修改一点. 利用工具,例如一些IDE中的调试功能,提高调试效 ...
- Windows平台下使用vs code来调试python代码(2)
背景:上篇文章我们介绍了怎么搭建相关的环境,文章链接:https://www.cnblogs.com/yahuian/p/10507467.html,这篇文章来介绍怎么调试我们的程序. 1.Debug ...
- 调试Python代码的工具
pdb: 首先来说Python里内建的调试器,pdb.它利用一个简单的命令行界面,还有很多你在用调试器时用得上的功能.帮助系统能为你指出你能运行的命令,比如单步调试代码,操纵调用栈和设置断点. 一些它 ...
- 使用 ipdb 调试 Python
1.安装 pip install ipdb 2.使用 python -m ipdb xxx.py 程序内部: from ipdb import set_trace set_trace() 3.常用命令 ...
- 在PyCharm中以root权限运行和调试python代码
python中有的代码可能需要su权限,如 import os os.mkdir('/media/xxx/disk_a') 如果在交互式环境中使用,需要以sudo的方式启动python.而在PyCha ...
随机推荐
- requset获取post提交的请求参数
1.请求体的内容通常是通过post来提交的,格式是 username=zhansan&password=123&hobby=football||&hobby=basketbal ...
- ECharts显示百分比(小数转百分比)
后台数据传递给前端是小数格式,例如:0.2248 前端显示要求为:22.48% 方法,设置tooltip.formatter和yAxis.axisLabel.formatter,两个分别是提示语格式化 ...
- javascript截取字符串长度
<html> <head> <meta charset="UTF-8"/> <title>截取字串长度</title> ...
- MFC string char cstring 类型转换
在Unicode环境下用以下转换: CString z_strCurtTime = _T(""); // 获取当前时间 CTime z_tCurTime = CTime::GetC ...
- SQL Server ->> FileTable
FileTable是SQL Server 2012的新特性之一.它是基于SQL Server 2008的FILESTREAM特性上而来的,允许我们把Windows文件存储在SQL Server中,让S ...
- Linux下TC使用说明 & 使用备注 ZZ
一.TC原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. Linux流量控制的基本原理如 ...
- MySQL MHA搭建
MHA算是业内比较成熟的MySQL高可用解决方案,在MySQL故障切换过程中,MHA能做到自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义 ...
- c++11简单的线程
线程的管理 启动线程 为了让编译器识别 std::thread 类,这个简单的例子也要包含 <thread> 头文件. 如同大多数C++标准库一样 线程在std::thread对象创建(为 ...
- ignore_user_abort函数制定计划任务
PHP中的ignore_user_abort函数是当用户关掉终端后脚本不停止仍然在执行,可以用它来实现计划任务与持续进程,下面会通过实例讨论ignore_user_abort()函数的作用与用法. ...
- Task执行内幕与结果处理解密
本课主题 Task执行内幕与结果处理解密 引言 这一章我们主要关心的是 Task 是怎样被计算的以及结果是怎么被处理的 了解 Task 是怎样被计算的以及结果是怎么被处理的 Task 执行原理流程图 ...