Python pdb 在没有断点的行处停止

问题描述

我在 JupyterLab 中运行了以下代码

import pdb; pdb.set_trace()
def cute_function(n):
    a = 0
    b = 1
    c = 7
    m = 1
    d = 1
    k = 2
    l = 10
    p = 7
    for i in range(n):
#         breakpoint()
        print(a,b,c,d)
        a = a + 1
        b = b + b
        x = k / d
        x = d + x
        d = x / k
        c = m * l
        m = c % p
        c = c // p
    return (a,d)
        
cute_function(10) 
cute_function(100) 

然后我进行交互调试:

--Return--
None
> <ipython-input-1-d9984dfe3110>(1)<module>()
----> 1 import pdb; pdb.set_trace()
      2 def cute_function(n):
      3     a = 0
      4     b = 1
      5     c = 7

ipdb>  b 13
Breakpoint 1 at <ipython-input-1-d9984dfe3110>:13
ipdb>  c
> <ipython-input-1-d9984dfe3110>(13)cute_function()
     11     for i in range(n):
     12 #         breakpoint()
1--> 13         print(a,d)
     14         a = a + 1
     15         b = b + b

ipdb>  display a
display a: 0
ipdb>  b cute_function
Breakpoint 2 at <ipython-input-1-d9984dfe3110>:2
ipdb>  c
0 1 7 1
> <ipython-input-1-d9984dfe3110>(14)cute_function()
     12 #         breakpoint()
1    13         print(a,d)
---> 14         a = a + 1
     15         b = b + b
     16         x = k / d

ipdb>  undisplay a
ipdb>  b
Num Type         disp Enb   Where
1   breakpoint   keep yes   at <ipython-input-1-d9984dfe3110>:13
    breakpoint already hit 1 time
2   breakpoint   keep yes   at <ipython-input-1-d9984dfe3110>:2
    breakpoint already hit 1 time
ipdb>  c
> <ipython-input-1-d9984dfe3110>(13)cute_function()
     11     for i in range(n):
     12 #         breakpoint()
1--> 13         print(a,d)
     14         a = a + 1
     15         b = b + b

ipdb>  c
1 2 1 1.5
> <ipython-input-1-d9984dfe3110>(14)cute_function()
     12 #         breakpoint()
1    13         print(a,d)
---> 14         a = a + 1
     15         b = b + b
     16         x = k / d

ipdb>  c
> <ipython-input-1-d9984dfe3110>(13)cute_function()
     11     for i in range(n):
     12 #         breakpoint()
1--> 13         print(a,d)
     14         a = a + 1
     15         b = b + b

ipdb>  c
2 4 4 1.4166666666666665
> <ipython-input-1-d9984dfe3110>(14)cute_function()
     12 #         breakpoint()
1    13         print(a,d)
---> 14         a = a + 1
     15         b = b + b
     16         x = k / d

ipdb>  b
Num Type         disp Enb   Where
1   breakpoint   keep yes   at <ipython-input-1-d9984dfe3110>:13
    breakpoint already hit 3 times
2   breakpoint   keep yes   at <ipython-input-1-d9984dfe3110>:2
    breakpoint already hit 3 times
ipdb>

令我惊讶的是,即使没有断点,代码也总是停在第 14 行。看起来好像断点 2 被移到了第 14 行,因为命中数一直在增加

在我看来,这是由“display”命令引起的,因为删除 display 命令解决了问题。

这是一个错误还是我遗漏了什么?

我的 Python 版本是 3.9.4,我的 JupyterLab 版本是 3.0.14。我使用的是 MacBook Pro 2017,macOS Big Sur v11.4。

编辑:当我使用认的 python 3.7.0 IDLE 时也会发生这种情况,所以这与 JupyterLab 无关。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...