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