Sha256: b0a927f74cde25818b840471d179056e7fa167e475a8c53c8058f88372d9081b

Contents?: true

Size: 1.37 KB

Versions: 6770

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

require_relative "../command"

module Byebug
  #
  # Show (and possibily stop) at every line that changes a global variable.
  #
  class TracevarCommand < Command
    def self.regexp
      /^\s* tr(?:acevar)? (?: \s+ (\S+))?  # (variable-name)?
                          (?: \s+ (stop|nostop))?
       \s*$/x
    end

    def self.description
      <<-DESCRIPTION
        tr[acevar] <variable> [[no]stop]

        #{short_description}

        If "stop" is specified, execution will stop every time the variable
        changes its value. If nothing or "nostop" is specified, execution won't
        stop, changes will just be logged in byebug's output.
      DESCRIPTION
    end

    def self.short_description
      "Enables tracing of a global variable"
    end

    def execute
      var = @match[1]
      return errmsg(pr("trace.errors.needs_global_variable")) unless var
      return errmsg(pr("trace.errors.var_is_not_global", name: var)) unless global_variables.include?(:"#{var}")

      stop = @match[2] && @match[2] !~ /nostop/

      instance_eval do
        trace_var(:"#{var}") { |val| on_change(var, val, stop) }
      end

      puts pr("trace.messages.success", var: var)
    end

    private

    def on_change(name, value, stop)
      puts pr("trace.messages.on_change", name: name, value: value)

      context.step_out(1, false) if stop
    end
  end
end

Version data entries

6,770 entries across 6,767 versions & 30 rubygems

Version Path
passbase-1.0.1 vendor/bundle/ruby/2.7.0/gems/byebug-11.1.3/lib/byebug/commands/tracevar.rb
passbase-1.0.0 vendor/bundle/ruby/2.7.0/gems/byebug-11.1.3/lib/byebug/commands/tracevar.rb
files.com-1.0.1 vendor/bundle/ruby/2.5.0/gems/byebug-11.1.3/lib/byebug/commands/tracevar.rb
byebug-11.1.3 lib/byebug/commands/tracevar.rb
byebug-11.1.2 lib/byebug/commands/tracevar.rb
talon_one-2.0.0 vendor/bundle/ruby/2.7.0/gems/byebug-11.1.1/lib/byebug/commands/tracevar.rb
argon-1.3.1 vendor/bundle/ruby/2.7.0/gems/byebug-11.1.1/lib/byebug/commands/tracevar.rb
symbolic_enum-1.1.5 vendor/bundle/ruby/2.7.0/gems/byebug-11.1.1/lib/byebug/commands/tracevar.rb
byebug-11.1.1 lib/byebug/commands/tracevar.rb
byebug-11.1.0 lib/byebug/commands/tracevar.rb