Advertisement

ipdb python调试工具

阅读量:

ipdb python调试工具

在三维点云中,各种矩阵的运算及输出需要多次调试才能够理解和更改,原来一直使用print大法,这样会导致手忙脚乱,而且很烦。现在有一个ipdb工具可以进行方便的调试,同时也不会显得特别蠢。。。。。

python 提供了一个默认的 debugger:pdb,而 ipdb 则是 pdb 的增强版,提供了补全、语法高亮等功能,类似于 ipython 与 python 默认的交互终端的关系,通过 pip install ipdb 即可安装 ipdb。

github地址 :https://github.com/gotcha/ipdb

pdb的官方网址 https://docs.python.org/3.5/library/pdb.html

参考网址 https://wulc.me/2018/12/21/ipdb 使用小记/

使用方式

ipdb 的使用方法一般有两种:集成到源代码或通过命令交互

集成到源代码方式

集成到源代码可以直接在代码指定位置插入断点。

官方实例如下所示:

复制代码
    import ipdb
    ipdb.set_trace()
    ipdb.set_trace(context=5)  # will show five lines of code
                           # instead of the default three lines
                           # or you can set it via IPDB_CONTEXT_SIZE env variable
                           # or setup.cfg file
    ipdb.pm()
    ipdb.run('x[0] = 3')
    result = ipdb.runcall(function, arg0, arg1, kwarg='foo')
    result = ipdb.runeval('f(1,2) - 3')
    
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-19/mLsohQPU91qD4BbzgRa6nyY3t7r0.png)

一个简单的例子如下所示

复制代码
    import ipdb
    num=12
    ipdb.set_trace()
    
    

其中,在执行完num=12 命令后,会暂停进入ipython环境调试

常用命令

  • ENTER(重复上次命令)
  • c(继续)
  • l(查找当前位于哪里)
  • s(进入子程序)
  • r(直到子程序结束)
  • !<python 命令>
  • h(帮助)
  • a(rgs) 打印当前函数的参数
  • j(ump) 让程序跳转到指定的行数
  • l(ist) 可以列出当前将要的代码块
  • n(ext) 让程序下一行,如果当前语句有一个函数调用,用 n 是不会进入被调用的函数体中的
  • p(rint) 最有用的命令之一,打印某个变量
  • q(uit) 退出调试
    • r(eturn) 继续执行,直到函数体返回
  • s(tep) 跟 n 相似,但是如果当前有一个函数调用,那么 s 会进入被调用的函数体中

启动命令式

上面的方式虽然简单,但是存在着两个较为比较明显的问题:

插入的断点代码会污染原来的代码空间

每次插入断点都需要修改源码

因此,相比于上面的方式,交互式的命令式调试方法更加方便。启动命令式调试环境的方法也很简单:

复制代码
    python -m ipdb code.py
    
    

逐行执行

有两条命令可以进行逐行执行: s(step) 或 n(next), 两个命令的主要区别是:假如当前行调用了某个函数,s 会进入这个函数,n 则不会。因此,如果需要了解函数内部执行的细节,需要 s 命令进入函数内部进行 debug。

进入了函数之后 ,通过命令 a(argument) 可列出当前的函数的参数,通过 r(return)则可以直接执行至 return 语句。

忽略某段代码

使用 j line_number 可以忽略某段代码,下一步直接从 line_number 开始执行。

查看源码

通过命令 lll 可查看源码, ll 是查看整个源码文件, l 可指定需要查看的行数,默认是当前往后 11 行,也可指定具体的范围,如 l 2,5 是查看第 2-5 行的源码。

重启或退出 debugger

上面已经提到了重启 debugger 可通过 restartrun 命令,需要注意的是,**重启 debugger 后断点、debugger 的设置等是会保留的。**如果要一个全新的 debugger,可通过命令 qquitexit 退出 debugger 后进入。

全部评论 (0)

还没有任何评论哟~