Sha256: 902088ee35784b7334015d9fc1b41872a1434e543f9545ec2e9b52eebd8bccf5

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 KB

Contents

module Byebug::DAP
  class Command::ExceptionInfo < ContextualCommand
    # "Retrieves the details of the exception that caused this event to be raised.

    register!

    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

    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
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
byebug-dap-0.1.4 lib/byebug/dap/commands/exception_info.rb