old_contents: """
  LLDB modules which contains miscellaneous utilities.
  """
  
  import lldb
  
  def GetFunctionNames(thread):
      """
      Returns a sequence of function names from the stack frames of this thread.
      """
      def GetFuncName(i):
          return thread.GetFrameAtIndex(i).GetFunction().GetName()
  
      return map(GetFuncName, range(thread.GetNumFrames()))
  
  
  def GetFilenames(thread):
      """
      Returns a sequence of file names from the stack frames of this thread.
      """
      def GetFilename(i):
          return thread.GetFrameAtIndex(i).GetLineEntry().GetFileSpec().GetFilename()
  
      return map(GetFilename, range(thread.GetNumFrames()))
  
  
  def GetLineNumbers(thread):
      """
      Returns a sequence of line numbers from the stack frames of this thread.
      """
      def GetLineNumber(i):
          return thread.GetFrameAtIndex(i).GetLineEntry().GetLine()
  
      return map(GetLineNumber, range(thread.GetNumFrames()))
  
  
  def GetModuleNames(thread):
      """
      Returns a sequence of module names from the stack frames of this thread.
      """
      def GetModuleName(i):
          return thread.GetFrameAtIndex(i).GetModule().GetFileSpec().GetFilename()
  
      return map(GetModuleName, range(thread.GetNumFrames()))
  
  
  def GetStackFrames(thread):
      """
      Returns a sequence of stack frames for this thread.
      """
      def GetStackFrame(i):
          return thread.GetFrameAtIndex(i)
  
      return map(GetStackFrame, range(thread.GetNumFrames()))
  
  
  def PrintStackTrace(thread):
      """Prints a simple stack trace of this thread."""
      depth = thread.GetNumFrames()
  
      mods = GetModuleNames(thread)
      funcs = GetFunctionNames(thread)
      files = GetFilenames(thread)
      lines = GetLineNumbers(thread)
  
      print "Stack trace for thread id={0:#x} name={1} queue={2}:".format(
          thread.GetThreadID(), thread.GetName(), thread.GetQueueName())
  
      for i in range(depth - 1):
          print "  frame #{num}: {mod}`{func} at {file}:{line}".format(
              num=i, mod=mods[i], func=funcs[i], file=files[i], line=lines[i])
  
      print "  frame #{num}: {mod}`start".format(num=depth-1, mod=mods[depth-1])
  
new_contents: """
  LLDB modules which contains miscellaneous utilities.
  """
  
  import lldb
  import sys
  import StringIO
  
  def GetFunctionNames(thread):
      """
      Returns a sequence of function names from the stack frames of this thread.
      """
      def GetFuncName(i):
          return thread.GetFrameAtIndex(i).GetFunction().GetName()
  
      return map(GetFuncName, range(thread.GetNumFrames()))
  
  
  def GetFilenames(thread):
      """
      Returns a sequence of file names from the stack frames of this thread.
      """
      def GetFilename(i):
          return thread.GetFrameAtIndex(i).GetLineEntry().GetFileSpec().GetFilename()
  
      return map(GetFilename, range(thread.GetNumFrames()))
  
  
  def GetLineNumbers(thread):
      """
      Returns a sequence of line numbers from the stack frames of this thread.
      """
      def GetLineNumber(i):
          return thread.GetFrameAtIndex(i).GetLineEntry().GetLine()
  
      return map(GetLineNumber, range(thread.GetNumFrames()))
  
  
  def GetModuleNames(thread):
      """
      Returns a sequence of module names from the stack frames of this thread.
      """
      def GetModuleName(i):
          return thread.GetFrameAtIndex(i).GetModule().GetFileSpec().GetFilename()
  
      return map(GetModuleName, range(thread.GetNumFrames()))
  
  
  def GetStackFrames(thread):
      """
      Returns a sequence of stack frames for this thread.
      """
      def GetStackFrame(i):
          return thread.GetFrameAtIndex(i)
  
      return map(GetStackFrame, range(thread.GetNumFrames()))
  
  
  def PrintStackTrace(thread, string_buffer = False):
      """Prints a simple stack trace of this thread."""
  
      depth = thread.GetNumFrames()
  
      mods = GetModuleNames(thread)
      funcs = GetFunctionNames(thread)
      files = GetFilenames(thread)
      lines = GetLineNumbers(thread)
  
      output = StringIO.StringIO() if string_buffer else sys.stdout
  
      print >> output, "Stack trace for thread id={0:#x} name={1} queue={2}:".format(
          thread.GetThreadID(), thread.GetName(), thread.GetQueueName())
  
      for i in range(depth - 1):
          print >> output, "  frame #{num}: {mod}`{func} at {file}:{line}".format(
              num=i, mod=mods[i], func=funcs[i], file=files[i], line=lines[i])
  
      print >> output, "  frame #{num}: {mod}`start".format(num=depth-1, mod=mods[depth-1])
  
      if string_buffer:
          return output.getvalue()
  
subject: Add a keyword argument string_buffer (with a default value of False) to the PrintStackTrace(thread) function. If string_buffer is True, PrintStackTrace() will return the content of the stack trace as a string, instead.