def __init__(self, cumulative_mode, finalizer_func, disable_security_checks=False): bdb.Bdb.__init__(self) self.mainpyfile = '' self._wait_for_mainpyfile = 0 self.disable_security_checks = disable_security_checks # a function that takes the output trace as a parameter and # processes it self.finalizer_func = finalizer_func # if True, then displays ALL stack frames that have ever existed # rather than only those currently on the stack (and their # lexical parents) self.cumulative_mode = cumulative_mode # each entry contains a dict with the information for a single # executed line self.trace = [] #http://stackoverflow.com/questions/2112396/in-python-in-google-app-engine-how-do-you-capture-output-produced-by-the-print self.GAE_STDOUT = sys.stdout # Key: function object # Value: parent frame self.closures = {} # set of function objects that were defined in the global scope self.globally_defined_funcs = set() # Key: frame object # Value: monotonically increasing small ID, based on call order self.frame_ordered_ids = {} self.cur_frame_id = 1 # List of frames to KEEP AROUND after the function exits. # If cumulative_mode is True, then keep ALL frames in # zombie_frames; otherwise keep only frames where # nested functions were defined within them. self.zombie_frames = [] # set of elements within zombie_frames that are also # LEXICAL PARENTS of other frames self.parent_frames_set = set() # all globals that ever appeared in the program, in the order in # which they appeared. note that this might be a superset of all # the globals that exist at any particular execution point, # since globals might have been deleted (using, say, 'del') self.all_globals_in_order = [] # very important for this single object to persist throughout # execution, or else canonical small IDs won't be consistent. self.encoder = pg_encoder.ObjectEncoder() self.executed_script = None # Python script to be executed!
def __init__(self, cumulative_mode, heap_primitives, show_only_outputs, finalizer_func, disable_security_checks=False, crazy_mode=False): bdb.Bdb.__init__(self) self.mainpyfile = '' self._wait_for_mainpyfile = 0 self.disable_security_checks = disable_security_checks # if True, then displays ALL stack frames that have ever existed # rather than only those currently on the stack (and their # lexical parents) self.cumulative_mode = cumulative_mode # if True, then render certain primitive objects as heap objects self.render_heap_primitives = heap_primitives # if True, then don't render any data structures in the trace, # and show only outputs self.show_only_outputs = show_only_outputs # Run using the custom Py2crazy Python interpreter self.crazy_mode = crazy_mode # a function that takes the output trace as a parameter and # processes it self.finalizer_func = finalizer_func # each entry contains a dict with the information for a single # executed line self.trace = [] # if this is true, don't put any more stuff into self.trace self.done = False # if this is non-null, don't do any more tracing until a # 'return' instruction with a stack gotten from # get_stack_code_IDs() that matches wait_for_return_stack self.wait_for_return_stack = None #http://stackoverflow.com/questions/2112396/in-python-in-google-app-engine-how-do-you-capture-output-produced-by-the-print self.GAE_STDOUT = sys.stdout # Key: function object # Value: parent frame self.closures = {} # set of function objects that were defined in the global scope self.globally_defined_funcs = set() # Key: frame object # Value: monotonically increasing small ID, based on call order self.frame_ordered_ids = {} self.cur_frame_id = 1 # List of frames to KEEP AROUND after the function exits. # If cumulative_mode is True, then keep ALL frames in # zombie_frames; otherwise keep only frames where # nested functions were defined within them. self.zombie_frames = [] # set of elements within zombie_frames that are also # LEXICAL PARENTS of other frames self.parent_frames_set = set() # all globals that ever appeared in the program, in the order in # which they appeared. note that this might be a superset of all # the globals that exist at any particular execution point, # since globals might have been deleted (using, say, 'del') self.all_globals_in_order = [] # very important for this single object to persist throughout # execution, or else canonical small IDs won't be consistent. self.encoder = pg_encoder.ObjectEncoder(self.render_heap_primitives) self.executed_script = None # Python script to be executed! # if there is at least one line that ends with BREAKPOINT_STR, # then activate "breakpoint mode", where execution should stop # ONLY at breakpoint lines. self.breakpoints = [] self.prev_lineno = -1 # keep track of previous line just executed