Class: Byebug::TraceCommand

Inherits:
Command
  • Object
show all
Defined in:
lib/byebug/commands/trace.rb

Constant Summary

Constants inherited from Command

Command::DEF_OPTIONS

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Command

commands, help, inherited, #initialize, load_commands, #match, method_missing, options, register_setting_get, register_setting_set, register_setting_var, settings, settings_map

Constructor Details

This class inherits a constructor from Byebug::Command

Class Method Details

.descriptionObject



42
43
44
45
46
47
# File 'lib/byebug/commands/trace.rb', line 42

def description
  %{
    tr[ace] (on|off)\tset trace mode
    tr[ace] var(iable) VARNAME [stop|nostop]\tset trace variable on VARNAME
  }
end

.namesObject



38
39
40
# File 'lib/byebug/commands/trace.rb', line 38

def names
  %w(trace)
end

Instance Method Details

#executeObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/byebug/commands/trace.rb', line 11

def execute
  if @match[1] =~ /on|off/
    onoff = 'on' == @match[1]
    Byebug.tracing = onoff
    print "Tracing is #{onoff ? 'on' : 'off'}\n"
  elsif @match[1] =~ /var(?:iable)?/
    varname=@match[2]
    if debug_eval("defined?(#{varname})")
      if @match[3] && @match[3] !~ /(:?no)?stop/
        errmsg "expecting \"stop\" or \"nostop\"; got \"#{@match[3]}\"\n"
      else
        dbg_cmd = (@match[3] && (@match[3] !~ /nostop/)) ? 'byebug' : ''
      end
      eval("trace_var(:#{varname}) do |val|
              print \"traced variable \#{varname} has value \#{val}\n\"
              #{dbg_cmd}
            end")
    else
      errmsg "#{varname} is not a global variable.\n"
    end
  else
    errmsg "expecting \"on\", \"off\", \"var\" or \"variable\"; got: " \
           "\"#{@match[1]}\"\n"
  end
end

#regexpObject



4
5
6
7
8
9
# File 'lib/byebug/commands/trace.rb', line 4

def regexp
  /^\s* tr(?:ace)? (?: \s+ (\S+))      # on | off | var(iable)
                   (?: \s+ (\S+))?     # (all | variable-name)?
                   (?: \s+ (\S+))? \s* # (stop | nostop)?
   $/ix
end