byebug 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|