当前,当我在pdb中的交互式解释器中修改变量时,它不会在交互式会话之外进行。有没有办法做到这一点?(我已经知道exec ,!)。但是,我想执行一些多行操作。
(Pdb) c
(Pdb) pp locals()['a']
*** KeyError: 'a'
(Pdb) !a=2
(Pdb) pp locals()['a']
2
(Pdb) !del a
(Pdb) pp locals()['a']
*** KeyError: 'a'
(Pdb) interact
*interactive*
>>> a=2
>>>
now exiting InteractiveConsole...
(Pdb) pp locals()['a']
*** KeyError: 'a'
答案 0 :(得分:2)
在pdb/ipdb
中调试时,尝试下面的代码执行多行代码
!import code; code.interact(local=vars())
这将进入interactive console
pdb
仅用于检查您的代码,那里的任何更改将仅适用于该执行,而不会更改您的代码
答案 1 :(得分:1)
正如Nbfour和我自己在上面的评论中所提到的,默认的 let array_e = this.E_Product;
array_e.filter((element) =>element.category == 'mobile' );
类不能与正在调试的当前帧所使用的名称空间相同。相反,包含局部变量的字典将被复制,并且交互模式将对该复制的字典起作用。这在默认的pdb.Pdb
类定义的do_interact
方法中发生。
继承Pdb
,我们可以实现所需的行为:
pdb.Pdb
运行上述脚本,我们对本地状态的交互模式更改现在是永久的:
import pdb
import code
class MyPdb(pdb.Pdb):
def do_interact(self, arg):
code.interact("*interactive*", local=self.curframe_locals)
MyPdb().set_trace()