]> granicus.if.org Git - python/commitdiff
#4547: When debugging a very large function, it was not always
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Mon, 1 Jun 2009 20:53:18 +0000 (20:53 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Mon, 1 Jun 2009 20:53:18 +0000 (20:53 +0000)
possible to update the lineno attribute of the current frame.

Lib/test/test_trace.py
Misc/NEWS
Objects/frameobject.c

index f5b8dbffb457088d866ec47c527678b66123adce..f69af8d40af3bd6fd7f1c30b278001470f65bbf5 100644 (file)
@@ -740,6 +740,23 @@ class JumpTestCase(unittest.TestCase):
     def test_19_no_jump_without_trace_function(self):
         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):
         # This tests that PDB can jump back to the first line in a
         # file.  See issue #1689458.  It can only be triggered in a
index 4558e5b9045c35e50fcb66e82db62e86a6bb8106..edc37d4e3da43a95df36d79aa51ff4e910f2d994 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.7 alpha 1
 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
   the various profiling modules (profile, cProfile). Patch by Hagen Fürstenau.
 
index ad31fc5dd49116afccf3c92302721d6019f37fa9..4cbb35d7ea4db8e3b46cf792982fc4f406c84db9 100644 (file)
@@ -98,7 +98,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno)
        int new_iblock = 0;             /* The new value of f_iblock */
        unsigned char *code = NULL;     /* The bytecode for the frame... */
        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) */
        int offset = 0;                 /* (ditto) */
        int line = 0;                   /* (ditto) */
@@ -148,7 +148,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno)
                /* Find the bytecode offset for the start of the given
                 * line, or the first code-owning line after it. */
                PyString_AsStringAndSize(f->f_code->co_lnotab,
-                                        &lnotab, &lnotab_len);
+                                        &(char*)lnotab, &lnotab_len);
                addr = 0;
                line = f->f_code->co_firstlineno;
                new_lasti = -1;