class Byebug::DAP::Command::ExceptionInfo

Public Instance Methods

execute_in_context() click to toggle source
# File lib/byebug/dap/commands/exception_info.rb, line 7
def execute_in_context
  unless ex = @processor.last_exception
    respond! success: false, message: 'Not in a catchpoint context'
    return
  end

  class_name = safe(ex, [:class, :name]) { "Unknown" }

  respond! body: {
    exceptionId: class_name,
    description: exception_description(ex),
    breakMode: Protocol::ExceptionBreakMode::ALWAYS,
    details: details(ex, '$!'),
  }
end

Private Instance Methods

details(ex, eval_name) click to toggle source
# File lib/byebug/dap/commands/exception_info.rb, line 25
def details(ex, eval_name)
  class_name = safe(ex, [:class, :name]) { nil }
  type_name = class_name.split('::').last if class_name
  inner = safe(ex, :cause) { nil }

  {
    message: safe(ex, :message) { nil },
    typeName: type_name,
    fullTypeName: class_name,
    evaluateName: eval_name,
    stackTrace: safe(ex, :backtrace) { [] }.join("\n"),
    innerException: inner.nil? ? [] : [details(inner, "#{eval_name}.#{cause}")],
  }
end