[pypy-commit] pypy reverse-debugger: breakpoints

arigo pypy.commits at gmail.com
Thu Jun 30 01:54:35 EDT 2016


Author: Armin Rigo <arigo at tunes.org>
Branch: reverse-debugger
Changeset: r85465:b4eaa8e5aef7
Date: 2016-06-30 07:53 +0200
http://bitbucket.org/pypy/pypy/changeset/b4eaa8e5aef7/

Log:	breakpoints

diff --git a/pypy/interpreter/reverse_debugging.py b/pypy/interpreter/reverse_debugging.py
--- a/pypy/interpreter/reverse_debugging.py
+++ b/pypy/interpreter/reverse_debugging.py
@@ -11,7 +11,7 @@
 class DBState:
     extend_syntax_with_dollar_num = False
     breakpoint_stack_id = 0
-    breakpoint_funcnames = []
+    breakpoint_funcnames = None
     printed_objects = {}
     metavars = []
     watch_progs = []
@@ -31,7 +31,6 @@
     dbstate.space = space
     dbstate.w_future = space.w_Ellipsis    # a random prebuilt object
 
-    make_sure_not_resized(dbstate.breakpoint_funcnames)
     make_sure_not_resized(dbstate.watch_progs)
     make_sure_not_resized(dbstate.metavars)
 
@@ -50,6 +49,10 @@
 
 
 def enter_call(caller_frame, callee_frame):
+    if dbstate.breakpoint_funcnames is not None:
+        name = callee_frame.getcode().co_name
+        if name in dbstate.breakpoint_funcnames:
+            revdb.breakpoint(dbstate.breakpoint_funcnames[name])
     if dbstate.breakpoint_stack_id != 0:
         if dbstate.breakpoint_stack_id == revdb.get_unique_id(caller_frame):
             revdb.breakpoint(-1)
@@ -382,6 +385,23 @@
 
 def command_breakpoints(cmd, extra):
     dbstate.breakpoint_stack_id = cmd.c_arg1
+    funcnames = None
+    for i, name in enumerate(extra.split('\x00')):
+        if name:
+            if name[0] == 'B':
+                if funcnames is None:
+                    funcnames = {}
+                funcnames[name[1:]] = i
+            elif name[0] == 'W':
+                pass
+                ## try:
+                ##     prog = compiler.parse(dbstate.space, name[1:])
+                ## except DuhtonError, e:
+                ##     revdb.send_output('compiling "%s": %s\n' %
+                ##                       (name[1:], e.msg))
+                ## else:
+                ##     watch_progs.append((prog, i, ''))
+    dbstate.breakpoint_funcnames = funcnames
 lambda_breakpoints = lambda: command_breakpoints
 
 def command_stackid(cmd, extra):


More information about the pypy-commit mailing list