PDB-在交互模式下设置或更改变量

时间:2019-06-18 09:27:06

标签: python pdb

当前,当我在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' 

2 个答案:

答案 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()