class Byebug::WhereCommand


Show current backtrace.

def self.description

def self.description
  <<-DESCRIPTION
    w[here]|bt|backtrace[ maximum-frame]
    #{short_description}
    Print the entire stack frame. Each frame is numbered; the most recent
    frame is 0. A frame number can be referred to in the "frame" command.
    "up" and "down" add or subtract respectively to frame numbers shown.
    The position of the current frame is marked with -->. C-frames hang
    from their most immediate Ruby frame to indicate that they are not
    navigable.
    Without an argument, the command prints all the frames. With an argument,
    the command prints the nth first frames, where n is the largest between
    the argument or the maximum stack frame.
  DESCRIPTION
end

def self.regexp

def self.regexp
  /^\s* (?:w(?:here)?|bt|backtrace) (?:\s+(\S+))? \s*$/x
end

def self.short_description

def self.short_description
  "Displays the backtrace"
end

def execute

def execute
  print_backtrace
end

def print_backtrace

def print_backtrace
  max_frame =
    if @match[1] && @match[1].to_i <= context.stack_size
      @match[1].to_i
    else
      context.stack_size
    end
  bt = prc("frame.line", (0...max_frame)) do |_, index|
    Frame.new(context, index).to_hash
  end
  print(bt)
end