【问题标题】:ipdb continue after hitting a bug遇到错误后 ipdb 继续
【发布时间】:2019-01-07 09:53:33
【问题描述】:

我使用 ipdb 调试器的方式如下:

ipython --pdb bugged.py

在一个文件上bugged.py

import numpy as np

a = np.array([0, 1, 2])
print(a[5])
a = 2 + a
print(a)

然后发生的事情是调试器在故障线处启动;这是预期的行为:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
/home/jrlab/Desktop/Current/debug_ipython/bugged.py in <module>()
      2 
      3 a = np.array([0, 1, 2])
----> 4 print(a[5])
      5 a = 2 + a
      6 print(a)

IndexError: index 5 is out of bounds for axis 0 with size 3
> /home/jrlab/Desktop/Current/debug_ipython/bugged.py(4)<module>()
      2 
      3 a = np.array([0, 1, 2])
----> 4 print(a[5])
      5 a = 2 + a
      6 print(a)

ipdb> n
~/Desktop/Current/debug_ipython>

但我真正想要的是在按下 n (或任何其他命令)时继续执行下一条指令,也就是说,一旦我通过hand with ! 命令执行故障行。

有什么办法吗?

编辑

1:在脚本需要很长时间运行的情况下,我想要这种行为;当我修复脚本中间的一个小错误时,我希望能够恢复执行,而无需从头开始重新运行耗时。

2:我知道这个错误是什么,我知道如何修复它。错误代码仅作为说明我想要的行为的一种方式(即,如果我愿意,可以在 print(a[5]) 之后恢复代码。

【问题讨论】:

  • 我认为可能有办法获得这种行为,但不确定如何。这个想法是,人们已经在 IPython 中获得了这种行为:每个单元格可以有一行代码,然后当一个单元格崩溃时修复它,然后再次继续从下面运行单元格。问题是,我们如何从命令行获得类似的东西?

标签: python debugging


【解决方案1】:

好吧,你得到一个错误,因为有问题的行试图访问仅包含 3 的数组的第 6 个元素。

通常,Python 调试器允许跳过有问题的行,不确定 ipython。但在我的标准安装中,我可以这样做:

j 5
n

j 5 将当前行设置在有问题的行之后,n 成功执行它。

【讨论】:

  • 我知道这是错误,我只是把它作为一个简单的例子;)我现在在评论中更清楚了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
相关资源
最近更新 更多