sys.settrace(None)
globals = self.curframe.f_globals
locals = self.curframe_locals
+ try:
+ code = compile(arg, "<string>", "exec")
+ except SyntaxError:
+ exc_info = sys.exc_info()[:2]
+ self.error(traceback.format_exception_only(*exc_info)[-1].strip())
+ return
p = Pdb(self.completekey, self.stdin, self.stdout)
p.prompt = "(%s) " % self.prompt.strip()
self.message("ENTERING RECURSIVE DEBUGGER")
- sys.call_tracing(p.run, (arg, globals, locals))
+ sys.call_tracing(p.run, (code, globals, locals))
self.message("LEAVING RECURSIVE DEBUGGER")
sys.settrace(self.trace_dispatch)
self.lastcmd = p.lastcmd
stdout, _ = self._run_pdb(['-m', self.module_name + '.runme'], commands)
self.assertTrue(any("VAR from module" in l for l in stdout.splitlines()), stdout)
+ def test_syntaxerror_in_command(self):
+ commands = "print(\ndebug print("
+ stdout, _ = self.run_pdb_script("", commands)
+ self.assertEqual(stdout.splitlines()[1:], [
+ '(Pdb) *** SyntaxError: unexpected EOF while parsing',
+ '(Pdb) *** SyntaxError: unexpected EOF while parsing',
+ '(Pdb) ',
+ ])
def load_tests(*args):
from test import test_pdb