Commit 24e581f7 authored by Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

Merged revisions 73114 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r73114 | amaury.forgeotdarc | 2009-06-01 22:53:18 +0200 (lun., 01 juin 2009) | 3 lines

  #4547: When debugging a very large function, it was not always
  possible to update the lineno attribute of the current frame.
........
parent 11729996
...@@ -741,6 +741,23 @@ class JumpTestCase(unittest.TestCase): ...@@ -741,6 +741,23 @@ class JumpTestCase(unittest.TestCase):
def test_19_no_jump_without_trace_function(self): def test_19_no_jump_without_trace_function(self):
no_jump_without_trace_function() no_jump_without_trace_function()
def test_20_large_function(self):
d = {}
exec("""def f(output): # line 0
x = 0 # line 1
y = 1 # line 2
''' # line 3
%s # lines 4-1004
''' # line 1005
x += 1 # line 1006
output.append(x) # line 1007
return""" % ('\n' * 1000,), d)
f = d['f']
f.jump = (2, 1007)
f.output = [0]
self.run_test(f)
def test_jump_to_firstlineno(self): def test_jump_to_firstlineno(self):
# This tests that PDB can jump back to the first line in a # This tests that PDB can jump back to the first line in a
# file. See issue #1689458. It can only be triggered in a # file. See issue #1689458. It can only be triggered in a
......
...@@ -12,6 +12,9 @@ What's New in Python 3.1 Release Candidate 2? ...@@ -12,6 +12,9 @@ What's New in Python 3.1 Release Candidate 2?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #4547: When debugging a very large function, it was not always
possible to update the lineno attribute of the current frame.
- Issue #5330: C functions called with keyword arguments were not reported by - Issue #5330: C functions called with keyword arguments were not reported by
the various profiling modules (profile, cProfile). Patch by Hagen Fürstenau. the various profiling modules (profile, cProfile). Patch by Hagen Fürstenau.
......
...@@ -69,7 +69,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno) ...@@ -69,7 +69,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno)
int new_iblock = 0; /* The new value of f_iblock */ int new_iblock = 0; /* The new value of f_iblock */
unsigned char *code = NULL; /* The bytecode for the frame... */ unsigned char *code = NULL; /* The bytecode for the frame... */
Py_ssize_t code_len = 0; /* ...and its length */ Py_ssize_t code_len = 0; /* ...and its length */
char *lnotab = NULL; /* Iterating over co_lnotab */ unsigned char *lnotab = NULL; /* Iterating over co_lnotab */
Py_ssize_t lnotab_len = 0; /* (ditto) */ Py_ssize_t lnotab_len = 0; /* (ditto) */
int offset = 0; /* (ditto) */ int offset = 0; /* (ditto) */
int line = 0; /* (ditto) */ int line = 0; /* (ditto) */
...@@ -131,7 +131,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno) ...@@ -131,7 +131,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno)
/* Find the bytecode offset for the start of the given /* Find the bytecode offset for the start of the given
* line, or the first code-owning line after it. */ * line, or the first code-owning line after it. */
PyBytes_AsStringAndSize(f->f_code->co_lnotab, PyBytes_AsStringAndSize(f->f_code->co_lnotab,
&lnotab, &lnotab_len); &(char*)lnotab, &lnotab_len);
addr = 0; addr = 0;
line = f->f_code->co_firstlineno; line = f->f_code->co_firstlineno;
new_lasti = -1; new_lasti = -1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment