byebug 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/GUIDE.md +2 -2
- data/LICENSE +3 -3
- data/README.md +5 -4
- data/byebug.gemspec +1 -1
- data/ext/byebug/byebug.c +20 -19
- data/lib/byebug.rb +2 -53
- data/lib/byebug/command.rb +9 -109
- data/lib/byebug/commands/breakpoints.rb +1 -1
- data/lib/byebug/commands/control.rb +20 -21
- data/lib/byebug/commands/display.rb +2 -3
- data/lib/byebug/commands/eval.rb +6 -16
- data/lib/byebug/commands/finish.rb +1 -1
- data/lib/byebug/commands/frame.rb +9 -9
- data/lib/byebug/commands/help.rb +2 -3
- data/lib/byebug/commands/history.rb +28 -0
- data/lib/byebug/commands/info.rb +3 -3
- data/lib/byebug/commands/list.rb +2 -13
- data/lib/byebug/commands/method.rb +5 -45
- data/lib/byebug/commands/reload.rb +1 -12
- data/lib/byebug/commands/repl.rb +6 -15
- data/lib/byebug/commands/save.rb +2 -7
- data/lib/byebug/commands/set.rb +45 -116
- data/lib/byebug/commands/show.rb +22 -126
- data/lib/byebug/commands/stepping.rb +1 -1
- data/lib/byebug/commands/trace.rb +14 -25
- data/lib/byebug/commands/variables.rb +3 -41
- data/lib/byebug/helper.rb +11 -42
- data/lib/byebug/history.rb +5 -13
- data/lib/byebug/processors/command_processor.rb +6 -6
- data/lib/byebug/setting.rb +82 -0
- data/lib/byebug/settings/autoeval.rb +20 -0
- data/lib/byebug/settings/autoirb.rb +19 -0
- data/lib/byebug/settings/autolist.rb +19 -0
- data/lib/byebug/settings/autoreload.rb +11 -0
- data/lib/byebug/settings/autosave.rb +11 -0
- data/lib/byebug/settings/basename.rb +7 -0
- data/lib/byebug/settings/callstyle.rb +15 -0
- data/lib/byebug/settings/forcestep.rb +11 -0
- data/lib/byebug/settings/fullpath.rb +11 -0
- data/lib/byebug/settings/histfile.rb +16 -0
- data/lib/byebug/settings/histsize.rb +18 -0
- data/lib/byebug/settings/linetrace.rb +15 -0
- data/lib/byebug/settings/listsize.rb +15 -0
- data/lib/byebug/settings/post_mortem.rb +15 -0
- data/lib/byebug/settings/stack_on_error.rb +7 -0
- data/lib/byebug/settings/testing.rb +7 -0
- data/lib/byebug/settings/tracing_plus.rb +7 -0
- data/lib/byebug/settings/verbose.rb +7 -0
- data/lib/byebug/settings/width.rb +29 -0
- data/lib/byebug/version.rb +1 -1
- data/test/breakpoints_test.rb +345 -324
- data/test/conditions_test.rb +61 -48
- data/test/continue_test.rb +38 -27
- data/test/debugger_alias_test.rb +5 -3
- data/test/display_test.rb +103 -92
- data/test/edit_test.rb +42 -34
- data/test/eval_test.rb +91 -75
- data/test/finish_test.rb +51 -40
- data/test/frame_test.rb +197 -184
- data/test/help_test.rb +47 -38
- data/test/history_test.rb +54 -0
- data/test/info_test.rb +306 -293
- data/test/interrupt_test.rb +44 -38
- data/test/kill_test.rb +40 -31
- data/test/list_test.rb +166 -133
- data/test/method_test.rb +67 -60
- data/test/post_mortem_test.rb +56 -48
- data/test/quit_test.rb +44 -35
- data/test/reload_test.rb +36 -24
- data/test/repl_test.rb +57 -47
- data/test/restart_test.rb +56 -69
- data/test/save_test.rb +62 -53
- data/test/set_test.rb +140 -118
- data/test/show_test.rb +68 -201
- data/test/source_test.rb +39 -29
- data/test/stepping_test.rb +163 -136
- data/test/support/test_dsl.rb +9 -11
- data/test/test_helper.rb +2 -7
- data/test/thread_test.rb +121 -107
- data/test/trace_test.rb +86 -83
- data/test/variables_test.rb +104 -98
- metadata +27 -86
- data/test/examples/breakpoint.rb +0 -6
- data/test/examples/breakpoint_deep.rb +0 -4
- data/test/examples/conditions.rb +0 -4
- data/test/examples/continue.rb +0 -5
- data/test/examples/display.rb +0 -5
- data/test/examples/edit.rb +0 -4
- data/test/examples/eval.rb +0 -4
- data/test/examples/finish.rb +0 -3
- data/test/examples/frame.rb +0 -4
- data/test/examples/frame_deep.rb +0 -1
- data/test/examples/gcd.rb +0 -15
- data/test/examples/hanoi.rb +0 -34
- data/test/examples/help.rb +0 -1
- data/test/examples/info.rb +0 -6
- data/test/examples/info2.rb +0 -3
- data/test/examples/interrupt.rb +0 -8
- data/test/examples/kill.rb +0 -2
- data/test/examples/list.rb +0 -23
- data/test/examples/method.rb +0 -4
- data/test/examples/post_mortem.rb +0 -4
- data/test/examples/primes.rb +0 -25
- data/test/examples/quit.rb +0 -2
- data/test/examples/reload.rb +0 -6
- data/test/examples/repl.rb +0 -6
- data/test/examples/restart.rb +0 -6
- data/test/examples/save.rb +0 -3
- data/test/examples/set.rb +0 -3
- data/test/examples/settings.rb +0 -1
- data/test/examples/show.rb +0 -1
- data/test/examples/source.rb +0 -3
- data/test/examples/stepping.rb +0 -8
- data/test/examples/stepping_raise_from_c_method.rb +0 -3
- data/test/examples/stepping_raise_from_ruby_method.rb +0 -3
- data/test/examples/test-triangle.rb +0 -14
- data/test/examples/thread.rb +0 -5
- data/test/examples/tmate.rb +0 -10
- data/test/examples/trace.rb +0 -8
- data/test/examples/tri3.rb +0 -6
- data/test/examples/triangle.rb +0 -13
- data/test/examples/variables.rb +0 -4
- data/test/timeout_test.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07f6616707d3f841c7c580f1f5e04ef9534a801d
|
4
|
+
data.tar.gz: e443182d786d0a652fa2166257727e3fb6298431
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ef519a0d284a6e4b2b7524569d2e164258e9105850366dc73938e1fbf0602ecd008f3d5f67f799529009d7de1bdd0f3389908dc979edaa8184631336ea20333
|
7
|
+
data.tar.gz: 9f305fd5c78c3a7c8b29ef7e302acc230686986c44a72d3f5e903d4ab4f4df2f99d032bceb67ae00e5ae04302dbbecce92bc86a421549a45346355ff04c7755a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
# 3.1.0
|
2
|
+
|
3
|
+
* `show commands` moved to a separate `history` command.
|
4
|
+
* Byebug.start can't recieve options any more. Any program settings you
|
5
|
+
want applied from the start should be set in .byebugrc.
|
6
|
+
* `trace` command has been removed. Line tracing functionality should be
|
7
|
+
enabled through the `linetrace` setting whereas the global variable
|
8
|
+
tracing functionality is now provided through the `tracevar` command.
|
9
|
+
* `version` setting has been removed. It was not really a setting because it
|
10
|
+
couldn't be set. Use `byebug --version` to check byebug's version.
|
11
|
+
* `arg` setting removed. Program restart arguments should be set through
|
12
|
+
`restart` command from now on.
|
13
|
+
* `linetrace_plus` setting has been renamed to `tracing_plus`.
|
14
|
+
|
15
|
+
|
1
16
|
# 3.0.0
|
2
17
|
|
3
18
|
- Bugfixes
|
data/GUIDE.md
CHANGED
@@ -104,7 +104,7 @@ to be displayed when tracing, we can turn on _basename_.
|
|
104
104
|
```
|
105
105
|
(byebug) display i
|
106
106
|
2: i =
|
107
|
-
(byebug) set
|
107
|
+
(byebug) set tracing on
|
108
108
|
line tracing is on.
|
109
109
|
(byebug) set basename on
|
110
110
|
basename is on.
|
@@ -638,7 +638,7 @@ $ byebug primes.rb
|
|
638
638
|
8: candidate += 1
|
639
639
|
9: while true do
|
640
640
|
10: @@odd_primes.each do |p|
|
641
|
-
(byebug) set
|
641
|
+
(byebug) set tracing
|
642
642
|
line tracing is on.
|
643
643
|
(byebug) set basename
|
644
644
|
basename in on.
|
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
Copyright (C)
|
1
|
+
Copyright (C) 2014 David Rodríguez <deivid.rodriguez@gmail.com>
|
2
2
|
All rights reserved.
|
3
|
-
|
3
|
+
|
4
4
|
Redistribution and use in source and binary forms, with or without
|
5
5
|
modification, are permitted provided that the following conditions
|
6
6
|
are met:
|
@@ -9,7 +9,7 @@ are met:
|
|
9
9
|
2. Redistributions in binary form must reproduce the above copyright
|
10
10
|
notice, this list of conditions and the following disclaimer in the
|
11
11
|
documentation and/or other materials provided with the distribution.
|
12
|
-
|
12
|
+
|
13
13
|
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
14
14
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
15
15
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
data/README.md
CHANGED
@@ -82,6 +82,7 @@ can now be placed at the end of a block or method call.
|
|
82
82
|
`finish` | |
|
83
83
|
`frame` | |
|
84
84
|
`help` | |
|
85
|
+
`history` | |
|
85
86
|
`info` | | `args` `breakpoints` `catch` `display` `file` `files` `global_variables` `instance_variables` `line` `locals` `program` `stack` `variables`
|
86
87
|
`irb` | |
|
87
88
|
`kill` | |
|
@@ -97,16 +98,16 @@ can now be placed at the end of a block or method call.
|
|
97
98
|
`reload` | |
|
98
99
|
`restart` | |
|
99
100
|
`save` | |
|
100
|
-
`set` | | `
|
101
|
-
`show` | | `
|
101
|
+
`set` | | `autoeval` `autoirb` `autolist` `autoreload` `autosave` `basename` `callstyle` `forcestep` `fullpath` `histfile` `histsize` `linetrace` `tracing_plus` `listsize` `post_mortem` `stack_on_error` `testing` `verbose` `width`
|
102
|
+
`show` | | `autoeval` `autoirb` `autolist` `autoreload` `autosave` `basename` `callstyle` `forcestep` `fullpath` `histfile` `histsize` `linetrace` `tracing_plus` `listsize` `post_mortem` `stack_on_error` `testing` `verbose` `width`
|
102
103
|
`skip` | |
|
103
104
|
`source` | |
|
104
105
|
`step` | |
|
105
106
|
`thread` | | `current` `list` `resume` `stop` `switch`
|
106
|
-
`
|
107
|
+
`tracevar` | |
|
107
108
|
`undisplay` | |
|
108
109
|
`up` | |
|
109
|
-
`var` | | `class` `constant` `global` `instance` `local`
|
110
|
+
`var` | | `class` `constant` `global` `instance` `local`
|
110
111
|
|
111
112
|
|
112
113
|
## Semantic Versioning
|
data/byebug.gemspec
CHANGED
data/ext/byebug/byebug.c
CHANGED
@@ -35,14 +35,15 @@ trace_print(rb_trace_arg_t *trace_arg, debug_context_t *dc)
|
|
35
35
|
if (trace_arg)
|
36
36
|
{
|
37
37
|
int i = 0;
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
VALUE
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
38
|
+
const char *event = rb_id2name(SYM2ID(rb_tracearg_event(trace_arg)));
|
39
|
+
char *path = RSTRING_PTR(rb_tracearg_path(trace_arg));
|
40
|
+
int line = NUM2INT(rb_tracearg_lineno(trace_arg));
|
41
|
+
VALUE v_mid = rb_tracearg_method_id(trace_arg);
|
42
|
+
const char *mid = NIL_P(v_mid) ? "" : rb_id2name(SYM2ID(v_mid));
|
43
|
+
|
44
|
+
for (i = 0; i < dc->calced_stack_size; i++) putc('-', stdout);
|
45
|
+
printf("(%d)->[#%d] %s@%s:%d %s\n",
|
46
|
+
dc->calced_stack_size, dc->thnum, event, path, line, mid);
|
46
47
|
}
|
47
48
|
}
|
48
49
|
|
@@ -543,17 +544,17 @@ bb_stop(VALUE self)
|
|
543
544
|
|
544
545
|
/*
|
545
546
|
* call-seq:
|
546
|
-
* Byebug.
|
547
|
-
* Byebug.
|
547
|
+
* Byebug.start -> bool
|
548
|
+
* Byebug.start { ... } -> bool
|
548
549
|
*
|
549
|
-
*
|
550
|
-
*
|
550
|
+
* If a block is given, it starts byebug and yields block. After the block is
|
551
|
+
* executed it stops byebug with Byebug.stop method. Inside the block you
|
552
|
+
* will probably want to have a call to Byebug.byebug. For example:
|
553
|
+
*
|
554
|
+
* Byebug.start { byebug; foo } # Stop inside of foo
|
551
555
|
*
|
552
556
|
* The return value is the value of !Byebug.started? <i>before</i> issuing the
|
553
557
|
* +start+; That is, +true+ is returned, unless byebug was previously started.
|
554
|
-
*
|
555
|
-
* If a block is given, it starts byebug and yields to block. When the block
|
556
|
-
* is finished executing it stops the debugger with Byebug.stop method.
|
557
558
|
*/
|
558
559
|
static VALUE
|
559
560
|
bb_start(VALUE self)
|
@@ -624,7 +625,7 @@ bb_load(int argc, VALUE *argv, VALUE self)
|
|
624
625
|
|
625
626
|
/*
|
626
627
|
* call-seq:
|
627
|
-
* Byebug.verbose -> bool
|
628
|
+
* Byebug.verbose? -> bool
|
628
629
|
*
|
629
630
|
* Returns +true+ if verbose output of TracePoint API events is enabled.
|
630
631
|
*/
|
@@ -650,7 +651,7 @@ bb_set_verbose(VALUE self, VALUE value)
|
|
650
651
|
|
651
652
|
/*
|
652
653
|
* call-seq:
|
653
|
-
* Byebug.tracing -> bool
|
654
|
+
* Byebug.tracing? -> bool
|
654
655
|
*
|
655
656
|
* Returns +true+ if global tracing is enabled.
|
656
657
|
*/
|
@@ -772,13 +773,13 @@ Init_byebug()
|
|
772
773
|
rb_define_module_function(mByebug, "post_mortem?" , bb_post_mortem , 0);
|
773
774
|
rb_define_module_function(mByebug, "post_mortem=" , bb_set_post_mortem , 1);
|
774
775
|
rb_define_module_function(mByebug, "raised_exception" , bb_raised_exception, 0);
|
775
|
-
rb_define_module_function(mByebug, "
|
776
|
+
rb_define_module_function(mByebug, "start" , bb_start , 0);
|
776
777
|
rb_define_module_function(mByebug, "started?" , bb_started , 0);
|
777
778
|
rb_define_module_function(mByebug, "stop" , bb_stop , 0);
|
778
779
|
rb_define_module_function(mByebug, "thread_context" , bb_thread_context , 1);
|
779
780
|
rb_define_module_function(mByebug, "tracing?" , bb_tracing , 0);
|
780
781
|
rb_define_module_function(mByebug, "tracing=" , bb_set_tracing , 1);
|
781
|
-
rb_define_module_function(mByebug, "verbose"
|
782
|
+
rb_define_module_function(mByebug, "verbose?" , bb_verbose , 0);
|
782
783
|
rb_define_module_function(mByebug, "verbose=" , bb_set_verbose , 1);
|
783
784
|
|
784
785
|
cThreadsTable = rb_define_class_under(mByebug, "ThreadsTable", rb_cObject);
|
data/lib/byebug.rb
CHANGED
@@ -3,6 +3,7 @@ require 'byebug/version'
|
|
3
3
|
require 'byebug/context'
|
4
4
|
require 'byebug/interface'
|
5
5
|
require 'byebug/processor'
|
6
|
+
require 'byebug/setting'
|
6
7
|
require 'byebug/remote'
|
7
8
|
require 'stringio'
|
8
9
|
require 'tracer'
|
@@ -13,18 +14,10 @@ module Byebug
|
|
13
14
|
# List of files byebug will ignore while debugging
|
14
15
|
IGNORED_FILES = Dir.glob(File.expand_path('../**/*.rb', __FILE__))
|
15
16
|
|
16
|
-
# Default options to Byebug.start
|
17
|
-
unless defined?(DEFAULT_START_SETTINGS)
|
18
|
-
DEFAULT_START_SETTINGS = { post_mortem: false,
|
19
|
-
tracing: false,
|
20
|
-
save_history: true }
|
21
|
-
end
|
22
|
-
|
23
17
|
# Configuration file used for startup commands. Default value is .byebugrc
|
24
18
|
INITFILE = '.byebugrc' unless defined?(INITFILE)
|
25
19
|
|
26
20
|
# Original ARGV, command line and initial directory to make restarts possible
|
27
|
-
ARGV = ARGV.clone unless defined?(ARGV)
|
28
21
|
PROG_SCRIPT = $0 unless defined?(PROG_SCRIPT)
|
29
22
|
INITIAL_DIR = Dir.pwd unless defined?(INITIAL_DIR)
|
30
23
|
|
@@ -83,46 +76,6 @@ module Byebug
|
|
83
76
|
extend Forwardable
|
84
77
|
def_delegators :"handler.interface", :print
|
85
78
|
|
86
|
-
#
|
87
|
-
# Byebug.start(options) -> bool
|
88
|
-
# Byebug.start(options) { ... } -> obj
|
89
|
-
#
|
90
|
-
# If it's called without a block, it returns +true+ unless byebug was
|
91
|
-
# already started.
|
92
|
-
#
|
93
|
-
# If a block is given, it starts byebug and yields block. After the block is
|
94
|
-
# executed it stops byebug with Byebug.stop method. Inside the block you
|
95
|
-
# will probably want to have a call to Byebug.byebug. For example:
|
96
|
-
#
|
97
|
-
# Byebug.start { byebug; foo } # Stop inside of foo
|
98
|
-
#
|
99
|
-
# Also, byebug only allows one invocation of byebug at a time; nested
|
100
|
-
# Byebug.start's have no effect and you can't use this inside byebug itself.
|
101
|
-
#
|
102
|
-
# <i>Note that if you want to stop byebug, you must call Byebug.stop as
|
103
|
-
# many times as you called Byebug.start method.</i>
|
104
|
-
#
|
105
|
-
# +options+ is a hash used to set various debugging options.
|
106
|
-
# :post_mortem - true if you want to enter post-mortem debugging on an
|
107
|
-
# uncaught exception, false otherwise. Default: false.
|
108
|
-
# :tracing - true if line tracing should be enabled, false otherwise.
|
109
|
-
# Default: false.
|
110
|
-
# :save_history - true if byebug's command history should be saved to a
|
111
|
-
# file on program termination so that it can be reloaded
|
112
|
-
# later.
|
113
|
-
#
|
114
|
-
def start(options={}, &block)
|
115
|
-
options = Byebug::DEFAULT_START_SETTINGS.merge(options)
|
116
|
-
Byebug.tracing = options[:tracing]
|
117
|
-
|
118
|
-
retval = Byebug._start(&block)
|
119
|
-
|
120
|
-
post_mortem if options[:post_mortem]
|
121
|
-
at_exit { Byebug::History.save } if options[:save_history]
|
122
|
-
|
123
|
-
return retval
|
124
|
-
end
|
125
|
-
|
126
79
|
#
|
127
80
|
# Runs normal byebug initialization scripts.
|
128
81
|
#
|
@@ -168,11 +121,7 @@ module Byebug
|
|
168
121
|
context = raised_exception.__bb_context
|
169
122
|
file = raised_exception.__bb_file
|
170
123
|
line = raised_exception.__bb_line
|
171
|
-
orig_tracing = Byebug.tracing?
|
172
|
-
Byebug.tracing = false
|
173
124
|
handler.at_line(context, file, line)
|
174
|
-
ensure
|
175
|
-
Byebug.tracing = orig_tracing
|
176
125
|
end
|
177
126
|
private :handle_post_mortem
|
178
127
|
end
|
@@ -188,8 +137,8 @@ module Kernel
|
|
188
137
|
# events occur. Before entering byebug the init script is read.
|
189
138
|
#
|
190
139
|
def byebug(steps_out = 1, before = true)
|
191
|
-
Byebug.start
|
192
140
|
Byebug.run_init_script(StringIO.new)
|
141
|
+
Byebug.start
|
193
142
|
Byebug.current_context.step_out(steps_out, before)
|
194
143
|
end
|
195
144
|
|
data/lib/byebug/command.rb
CHANGED
@@ -3,26 +3,10 @@ require 'forwardable'
|
|
3
3
|
require 'byebug/helper'
|
4
4
|
|
5
5
|
module Byebug
|
6
|
-
|
7
|
-
module CommandFunctions
|
8
|
-
#
|
9
|
-
# Pad a string with dots at the end to fit :width setting
|
10
|
-
#
|
11
|
-
def pad_with_dots(string)
|
12
|
-
if string.size > Command.settings[:width]
|
13
|
-
string[Command.settings[:width]-3 .. -1] = "..."
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
6
|
class Command
|
19
7
|
Subcmd = Struct.new(:name, :min, :help)
|
20
8
|
|
21
9
|
class << self
|
22
|
-
def commands
|
23
|
-
@commands ||= []
|
24
|
-
end
|
25
|
-
|
26
10
|
attr_accessor :allow_in_control, :unknown
|
27
11
|
attr_writer :allow_in_post_mortem, :always_run
|
28
12
|
|
@@ -76,87 +60,25 @@ module Byebug
|
|
76
60
|
return s
|
77
61
|
end
|
78
62
|
|
63
|
+
def commands
|
64
|
+
@commands ||= []
|
65
|
+
end
|
66
|
+
|
79
67
|
def inherited(klass)
|
80
68
|
commands << klass
|
81
69
|
end
|
82
70
|
|
83
71
|
def load_commands
|
84
|
-
Dir
|
85
|
-
|
86
|
-
Byebug.constants.grep(/Functions$/).map {
|
87
|
-
|name| Byebug.const_get(name) }.each { |mod| include mod }
|
88
|
-
end
|
89
|
-
|
90
|
-
def settings_map
|
91
|
-
@@settings_map ||= {}
|
92
|
-
end
|
93
|
-
private :settings_map
|
94
|
-
|
95
|
-
def settings
|
96
|
-
unless defined? @settings and @settings
|
97
|
-
@settings = Object.new
|
98
|
-
map = settings_map
|
99
|
-
c = class << @settings; self end
|
100
|
-
c.send(:define_method, :[]) do |name|
|
101
|
-
raise "No such setting #{name}" unless map.has_key?(name)
|
102
|
-
map[name][:getter].call
|
103
|
-
end
|
104
|
-
c.send(:define_method, :[]=) do |name, value|
|
105
|
-
raise "No such setting #{name}" unless map.has_key?(name)
|
106
|
-
map[name][:setter].call(value)
|
107
|
-
end
|
72
|
+
Dir.glob(File.expand_path('../commands/*.rb', __FILE__)).each do |file|
|
73
|
+
require file
|
108
74
|
end
|
109
|
-
@settings
|
110
|
-
end
|
111
75
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
register_setting_get(name) { class_variable_get(var_name) }
|
116
|
-
register_setting_set(name) { |value| class_variable_set(var_name, value) }
|
117
|
-
end
|
118
|
-
|
119
|
-
def register_setting_get(name, &block)
|
120
|
-
settings_map[name] ||= {}
|
121
|
-
settings_map[name][:getter] = block
|
122
|
-
end
|
123
|
-
|
124
|
-
def register_setting_set(name, &block)
|
125
|
-
settings_map[name] ||= {}
|
126
|
-
settings_map[name][:setter] = block
|
127
|
-
end
|
128
|
-
|
129
|
-
def command_exists?(command)
|
130
|
-
ENV['PATH'].split(File::PATH_SEPARATOR).any? {
|
131
|
-
|d| File.exist? File.join(d, command) }
|
132
|
-
end
|
133
|
-
|
134
|
-
def terminal_width
|
135
|
-
if ENV['COLUMNS'] =~ /^\d+$/
|
136
|
-
ENV['COLUMNS'].to_i
|
137
|
-
elsif STDIN.tty? && command_exists?('stty')
|
138
|
-
`stty size`.scan(/\d+/)[1].to_i
|
139
|
-
else
|
140
|
-
nil
|
141
|
-
end
|
76
|
+
Byebug.constants.grep(/Functions$/).map {
|
77
|
+
|name| Byebug.const_get(name)
|
78
|
+
}.each { |mod| include mod }
|
142
79
|
end
|
143
80
|
end
|
144
81
|
|
145
|
-
# Register default settings
|
146
|
-
register_setting_var(:autosave, true)
|
147
|
-
register_setting_var(:basename, false)
|
148
|
-
register_setting_var(:callstyle, :long)
|
149
|
-
register_setting_var(:testing, false)
|
150
|
-
register_setting_var(:forcestep, false)
|
151
|
-
register_setting_var(:fullpath, true)
|
152
|
-
register_setting_var(:listsize, 10)
|
153
|
-
register_setting_var(:stack_on_error, false)
|
154
|
-
register_setting_var(:linetrace_plus, false)
|
155
|
-
cols = terminal_width || 160
|
156
|
-
register_setting_var(:width, cols > 10 ? cols : 160)
|
157
|
-
Byebug::ARGV = ARGV.clone unless defined? Byebug::ARGV
|
158
|
-
register_setting_var(:argv, Byebug::ARGV)
|
159
|
-
|
160
82
|
def initialize(state)
|
161
83
|
@match, @state = nil, state
|
162
84
|
end
|
@@ -206,26 +128,4 @@ module Byebug
|
|
206
128
|
end
|
207
129
|
|
208
130
|
Command.load_commands
|
209
|
-
|
210
|
-
##
|
211
|
-
# Returns ths settings object.
|
212
|
-
# Use Byebug.settings[] and Byebug.settings[]= methods to query and set
|
213
|
-
# byebug settings. These settings are available:
|
214
|
-
#
|
215
|
-
# :autoeval - evaluates input in the current binding if it's not
|
216
|
-
# recognized as a byebug command
|
217
|
-
# :autoirb - automatically calls 'irb' command on breakpoint
|
218
|
-
# :autolist - automatically calls 'list' command on breakpoint
|
219
|
-
# :autoreload - makes 'list' command always display up-to-date source
|
220
|
-
# code
|
221
|
-
# :autosave - automatic saving of command history on exit
|
222
|
-
# :frame_class_names - displays method's class name when showing frame stack
|
223
|
-
# :forcestep - stepping command always move to the new line
|
224
|
-
# :fullpath - displays full paths when showing frame stack
|
225
|
-
# :stack_on_error - shows full stack trace if eval command results in an
|
226
|
-
# exception
|
227
|
-
#
|
228
|
-
def self.settings
|
229
|
-
Command.settings
|
230
|
-
end
|
231
131
|
end
|
@@ -54,7 +54,7 @@ module Byebug
|
|
54
54
|
|
55
55
|
if line =~ /^\d+$/
|
56
56
|
line = line.to_i
|
57
|
-
if LineCache.cache(brkpt_filename,
|
57
|
+
if LineCache.cache(brkpt_filename, Setting[:autoreload])
|
58
58
|
last_line = LineCache.size(brkpt_filename)
|
59
59
|
return errmsg "There are only #{last_line} lines in file " \
|
60
60
|
"#{brkpt_filename}\n" if line > last_line
|
@@ -1,30 +1,31 @@
|
|
1
1
|
module Byebug
|
2
|
-
|
3
2
|
class RestartCommand < Command
|
4
3
|
self.allow_in_control = true
|
5
4
|
|
6
5
|
def regexp
|
7
|
-
/^\s* (?:restart|R) (?:\s+(
|
6
|
+
/^\s* (?:restart|R) (?:\s+(?<args>.+))? \s*$/x
|
8
7
|
end
|
9
8
|
|
10
9
|
def execute
|
11
|
-
|
12
|
-
|
10
|
+
prog = Byebug::PROG_SCRIPT if defined?(Byebug::PROG_SCRIPT)
|
11
|
+
byebug_script = Byebug::BYEBUG_SCRIPT if defined?(Byebug::BYEBUG_SCRIPT)
|
12
|
+
|
13
|
+
return errmsg "Don't know name of debugged program\n" unless prog
|
13
14
|
|
14
|
-
|
15
|
-
|
15
|
+
unless File.exist?(File.expand_path(prog))
|
16
|
+
return errmsg "Ruby program #{prog} doesn't exist\n"
|
17
|
+
end
|
16
18
|
|
17
|
-
if
|
19
|
+
if byebug_script
|
20
|
+
cmd = "#{byebug_script} #{prog}"
|
21
|
+
else
|
18
22
|
print "Byebug was not called from the outset...\n"
|
19
|
-
if
|
20
|
-
|
21
|
-
"We'll add a call to Ruby.\n"
|
22
|
-
cmd = "ruby -rbyebug -I#{$:.join(' -I')} #{Byebug::PROG_SCRIPT}"
|
23
|
+
if File.executable?(prog)
|
24
|
+
cmd = prog
|
23
25
|
else
|
24
|
-
|
26
|
+
print "Ruby program #{prog} not executable... We'll wrap it in a ruby call\n"
|
27
|
+
cmd = "ruby -rbyebug -I#{$:.join(' -I')} #{prog}"
|
25
28
|
end
|
26
|
-
else
|
27
|
-
cmd = "#{Byebug::BYEBUG_SCRIPT} #{Byebug::PROG_SCRIPT}"
|
28
29
|
end
|
29
30
|
|
30
31
|
begin
|
@@ -33,13 +34,11 @@ module Byebug
|
|
33
34
|
print "Failed to change initial directory #{Byebug::INITIAL_DIR}"
|
34
35
|
end
|
35
36
|
|
36
|
-
if @match[
|
37
|
-
cmd += " #{@match[
|
38
|
-
elsif not defined? Command.settings[:argv]
|
39
|
-
return errmsg "Arguments not set. Use 'set args' to set them.\n"
|
37
|
+
if @match[:args]
|
38
|
+
cmd += " #{@match[:args]}"
|
40
39
|
else
|
41
40
|
require 'shellwords'
|
42
|
-
cmd += " #{
|
41
|
+
cmd += " #{ARGV.compact.shelljoin}"
|
43
42
|
end
|
44
43
|
|
45
44
|
# An execv would be preferable to the "exec" below.
|
@@ -72,8 +71,8 @@ module Byebug
|
|
72
71
|
end
|
73
72
|
|
74
73
|
def execute
|
75
|
-
|
76
|
-
|
74
|
+
context = Byebug.thread_context(Thread.main)
|
75
|
+
context.interrupt
|
77
76
|
end
|
78
77
|
|
79
78
|
class << self
|