accessing local variables from the pdb debugger

Jean-Michel Pichavant jeanmichel at sequans.com
Thu Dec 10 08:37:37 EST 2009


Diez B. Roggisch wrote:
> Jean-Michel Pichavant wrote:
>
>   
>> Guys,
>>
>> I have some problem changing method locals with pdb:
>>
>> import pdb
>>
>> def test():
>>     foo = 'foo'
>>     pdb.set_trace()
>>
>> test()
>> --Return--
>>  > /home/jeanmichel/trunk/tnt/test.py(5)test()->None
>> -> pdb.set_trace()
>> (Pdb) print foo
>> foo
>> (Pdb) foo = 'bar'
>> (Pdb) print foo
>> foo
>> (Pdb)
>>
>>
>> I tried using locals() but it returns a copy of the locals. So changing
>> locals['foo'] won't do any good.
>> (Pdb) locals()
>> Out[6]: {'__return__': None, 'foo': 'foo'}
>>
>>
>> Any idea ? I'm starting to wonder if it is possible.
>>     
>
> I recall having some issues with local variables sometimes, but actually
> your example works fine for me:
>
>
>
> def test():
>     foo = "foo"
>
>
>     import pdb; pdb.set_trace()
>
>     print foo
>
> test()
>
>
> And the session:
>
> $ python /tmp/test.py
>   
>> /tmp/test.py(9)test()
>>     
> -> print foo
> (Pdb) pp foo
> 'foo'
> (Pdb) foo = "bar"
> (Pdb) n
> bar
> --Return--
>   
>> /tmp/test.py(9)test()->None
>>     
> -> print foo
> (Pdb) c
>
>
> Diez
>   
You're right, it can work, eventually...

Take a look at sessions below:

def test():
    foo = 'foo'
    pdb.set_trace()
    print 'This is the test method displaying foo:', foo

In [3]: test()
 > /home/jeanmichel/trunk/tnt/test.py(6)test()
-> print 'This is the test method displaying foo:', foo
(Pdb) foo='bar'
(Pdb) c
This is the test method displaying foo: bar

In [5]: test()
 > /home/jeanmichel/trunk/tnt/test.py(6)test()
-> print 'This is the test method displaying foo:', foo
(Pdb) foo='bar'
(Pdb) print foo
foo
(Pdb) c
This is the test method displaying foo: foo

By just inserting the print foo statement right after changing foo's 
value, I've rolled back the value to 'foo' ??? A hell of a wtf pdb feature !

JM

PS : using python 2.5



More information about the Python-list mailing list