Issue 6719: pdb messes up when debugging an non-ascii program (original) (raw)

consider a program like this one:

---- File: ./test.py ---- #/usr/bin/env python #coding: utf8

Here is a shell (e.g. bash) session:

$ python -m pdb ./test.py --Return--

/usr/lib/python2.6/encodings/init.py(69)normalize_encoding()->'latin1' -> return '_'.join(encoding.translate(_norm_encoding_map).split()) (Pdb)

While for a file without the line #2, the output would be:

$ python -m pdb ./test.py

/home/.../test.py(3)() -> print 'qwerty' (Pdb)

Here is the thing: the normal behaviour of pdb in this case is to pause before executing the first line of the program. Instead of this, it pauses at line #69 in .../encodings/init.py, which makes pdb almost unusable. Plus, pdb's inline command "q" (or "quit") does not work anymore. Here, the first line should close the program but it does not:

(Pdb) q Traceback (most recent call last): File "/usr/lib/python2.6/pdb.py", line 1283, in main pdb._runscript(mainpyfile) File "/usr/lib/python2.6/pdb.py", line 1202, in _runscript self.run(statement) File "/usr/lib/python2.6/bdb.py", line 368, in run exec cmd in globals, locals File "", line 1, in File "./test.py", line 2 SyntaxError: encoding problem: with BOM (test.py, line 2) Uncaught exception. Entering post mortem debugging Running 'cont' or 'step' will restart the program

(1)() (Pdb)

if 'q' is types a second time in a row, it goes like this and we are back to starting point:

(Pdb) q Post mortem debugger finished. The ./test.py will be restarted --Return--

/usr/lib/python2.6/encodings/init.py(69)normalize_encoding()->'latin1' -> return '_'.join(encoding.translate(_norm_encoding_map).split()) (Pdb)

Here is what's happening: when pdb starts up it sets tracing and several trace events happen before the pdb reaches the first line of the debugged program. So, pdb has some logic to ignore certain events on startup (_wait_for_main_pyfile).

On normal startup only "call" and "line"events need to be ignored and so that's what pdb did. However, the "coding" directive causes some additional code to get executed and results in "return" and "exception" events.

I am attaching the patch to properly ignore irrelevant "return" and "exception"events on startup. The patch fixes both the startup and the exit problems.