Issue 33458: pdb.run() does not trace destructors of main (original) (raw)

This issue is a companion to issue 13044.

Running with Python 3.6.5 the following code fails with NameError:

1 class C: 2 def del(self): 3 print('deleted') 4 5 c = C() 6 x = 1

$ python -m pdb bar.py

./bar.py(1)() -> class C: (Pdb) break 6 Breakpoint 1 at ./bar.py:6 (Pdb) continue ./bar.py(6)() -> x = 1 (Pdb) step --Return-- ./bar.py(6)()->None -> x = 1 (Pdb) step --Return-- (1)()->None (Pdb) step /usr/lib/python3.6/bdb.py(438)run() -> self.quitting = True (Pdb) step The program finished and will be restarted Exception ignored in: <bound method C.__del__ of <__main__.C object at 0x7f3fb3485b70>> Traceback (most recent call last): File "./bar.py", line 3, in del print('deleted') NameError: name 'print' is not defined ./bar.py(1)() -> class C: (Pdb)

The following patch fixes the problem when applied applied on top of PR 6730:

diff --git a/Lib/bdb.py b/Lib/bdb.py index c6a10359ac..07231ec588 100644 --- a/Lib/bdb.py +++ b/Lib/bdb.py @@ -582,7 +582,7 @@ class Bdb: cmd = compile(cmd, "", "exec") sys.settrace(self.trace_dispatch) try: