code: def get_trace(self, frame, tb):
          
          import linecache
          frames = []
          stack, _ = self.get_stack(frame, tb)
          current = 0
  
          for i, (stack_frame, lno) in enumerate(stack):
              code = stack_frame.f_code
              filename = code.co_filename or '<unspecified>'
              line = None
              if filename[0] == '<' and filename[-1] == '>':
                  line = get_source_from_byte_code(code)
                  fn = filename
              else:
                  fn = os.path.abspath(filename)
              if not line:
                  linecache.checkcache(filename)
                  line = linecache.getline(filename, lno, stack_frame.f_globals)
                  if not line:
                      line = self.compile_cache.get(id(code), '')
                  line = to_unicode_string(line, filename)
                  line = line and line.strip()
              startlnos = dis.findlinestarts(code)
              lastlineno = list(startlnos)[-1][1]
              if frame == stack_frame:
                  current = i
              frames.append({
                  'file': fn,
                  'function': code.co_name,
                  'flno': code.co_firstlineno,
                  'llno': lastlineno,
                  'lno': lno,
                  'code': line,
                  'level': i,
                  'current': frame == stack_frame
              })
  
          # While in exception always put the context to the top
          return stack, frames, current
docs: Get a dict of the traceback for wdb.js use