def stack_trace(self, f): """A mini stack trace routine for threads.""" while f: if (not self.core.ignore_filter.is_included(f) or self.settings['dbg_trepan']): s = Mstack.format_stack_entry(self, (f, f.f_lineno)) self.msg(" "*4 + s) pass f = f.f_back pass return
def stack_trace(self, f): """A mini stack trace routine for threads.""" while f: if (not self.core.ignore_filter.is_included(f) or self.settings['dbg_trepan']): s = Mstack.format_stack_entry(self, (f, f.f_lineno)) self.msg(" " * 4 + s) pass f = f.f_back pass return
def run(self, args): # FIXME: add thread locking here? self.thread_name = Mthread.current_thread_name() name2id = Mthread.map_thread_names() # invert threading._active for thread_id in list(threading._active.keys()): thread = threading._active[thread_id] name = thread.getName() if name not in list(self.name2id.keys()): self.name2id[name] = thread_id pass pass all_verbose = False if len(args) == 1: if args[0].startswith('verbose'): all_verbose = True elif args[0].startswith('terse'): self.info_thread_terse(name2id) return pass if len(args) > 0 and not all_verbose: thread_name = args[0] if thread_name == '.': thread_name = self.thread_name try: thread_id = int(thread_name) if thread_id not in list(threading._active.keys()): self.errmsg("Don't know about thread number %s" % thread_name) self.info_thread_terse(name2id) return except ValueError: if thread_name not in list(self.name2id.keys()): self.errmsg("Don't know about thread %s" % thread_name) self.info_thread_terse(name2id) return thread_id = self.name2id[thread_name] pass frame = sys._current_frames()[thread_id] self.stack_trace(frame) return # Show info about *all* threads thread_key_list = list(self.name2id.keys()) thread_key_list.sort() for thread_name in thread_key_list: thread_id = self.name2id[thread_name] frame = sys._current_frames()[thread_id] s = '' # Print location where thread was created and line number if thread_id in threading._active: thread = threading._active[thread_id] thread_name = thread.getName() if thread_name == self.proc.frame_thread_name: prefix = '-> ' if not self.settings['dbg_trepan']: frame = Mthread.find_debugged_frame(frame) pass pass elif thread_name == self.proc.thread_name: prefix = '=> ' else: prefix=' ' pass s += "%s%s" % (prefix, str(thread)) if all_verbose: s += ": %d" % thread_id pass else: s += " thread id: %d" % thread_id pass s += "\n " s += Mstack.format_stack_entry(self, (frame, frame.f_lineno), color=self.settings['highlight']) self.section('-' * 40) self.msg(s) frame = frame.f_back if all_verbose and frame: self.stack_trace(frame) pass return
def run(self, args): # FIXME: add thread locking here? self.thread_name = Mthread.current_thread_name() name2id = Mthread.map_thread_names() # invert threading._active for thread_id in list(threading._active.keys()): thread = threading._active[thread_id] name = thread.getName() if name not in list(self.name2id.keys()): self.name2id[name] = thread_id pass pass all_verbose = False if len(args) == 1: if args[0].startswith('verbose'): all_verbose = True elif args[0].startswith('terse'): self.info_thread_terse(name2id) return pass if len(args) > 0 and not all_verbose: thread_name = args[0] if thread_name == '.': thread_name = self.thread_name try: thread_id = int(thread_name) if thread_id not in list(threading._active.keys()): self.errmsg("Don't know about thread number %s" % thread_name) self.info_thread_terse(name2id) return except ValueError: if thread_name not in list(self.name2id.keys()): self.errmsg("Don't know about thread %s" % thread_name) self.info_thread_terse(name2id) return thread_id = self.name2id[thread_name] pass frame = sys._current_frames()[thread_id] self.stack_trace(frame) return # Show info about *all* threads thread_key_list = list(self.name2id.keys()) thread_key_list.sort() for thread_name in thread_key_list: thread_id = self.name2id[thread_name] frame = sys._current_frames()[thread_id] s = '' # Print location where thread was created and line number if thread_id in threading._active: thread = threading._active[thread_id] thread_name = thread.getName() if thread_name == self.proc.frame_thread_name: prefix = '-> ' if not self.settings['dbg_trepan']: frame = Mthread.find_debugged_frame(frame) pass pass elif thread_name == self.proc.thread_name: prefix = '=> ' else: prefix = ' ' pass s += "%s%s" % (prefix, str(thread)) if all_verbose: s += ": %d" % thread_id pass else: s += " thread id: %d" % thread_id pass s += "\n " s += Mstack.format_stack_entry(self, (frame, frame.f_lineno), color=self.settings['highlight']) self.section('-' * 40) self.msg(s) frame = frame.f_back if all_verbose and frame: self.stack_trace(frame) pass return