byebug 1.0.0 → 1.0.1
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 +7 -0
- data/.gitignore +2 -0
- data/README.md +36 -4
- data/Rakefile +1 -3
- data/bin/byebug +26 -30
- data/byebug.gemspec +8 -2
- data/lib/byebug.rb +6 -5
- data/lib/byebug/command.rb +30 -18
- data/lib/byebug/commands/control.rb +4 -4
- data/lib/byebug/commands/frame.rb +12 -11
- data/lib/byebug/commands/info.rb +43 -56
- data/lib/byebug/commands/irb.rb +3 -3
- data/lib/byebug/commands/list.rb +26 -25
- data/lib/byebug/commands/save.rb +11 -11
- data/lib/byebug/commands/set.rb +32 -38
- data/lib/byebug/commands/show.rb +3 -7
- data/lib/byebug/commands/variables.rb +6 -6
- data/lib/byebug/helper.rb +1 -1
- data/lib/byebug/interface.rb +6 -5
- data/lib/byebug/processor.rb +9 -9
- data/lib/byebug/version.rb +1 -1
- data/old_doc/byebug.1 +16 -16
- data/old_doc/byebug.texi +155 -163
- data/test/info_test.rb +11 -10
- data/test/list_test.rb +45 -22
- data/test/restart_test.rb +1 -1
- data/test/set_test.rb +6 -5
- data/test/support/matchers.rb +2 -3
- data/test/support/mocha_extensions.rb +2 -4
- data/test/support/test_dsl.rb +4 -0
- data/test/test_helper.rb +5 -0
- data/test/variables_test.rb +5 -5
- metadata +9 -26
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9de6831ec3ce9e27c6e2cca6a3e230f30d4c4498
|
4
|
+
data.tar.gz: 80c1890643664250f76be3332437054636223e6d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e57c240bc36528ad61d3e44be7819b9e72effe76f61e8895b9e24a8df9ee9a4eabbed01a6edfb6e42529128a02a0b1233761af4f2cf49e0119b49e2bfb4507a5
|
7
|
+
data.tar.gz: 88ce74faec5aef2ae39487e9be5912b1da806e2c8b8fe4513fcb9b0859a1432cc4ab764f95522ba2f01df853ee1fe97d737dd849bc8b42a6b56497fb1986c567
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,37 @@
|
|
1
|
-
|
1
|
+
# Byebug [](http://travis-ci.org/deivid-rodriguez/byebug) [](https://codeclimate.com/github/deivid-rodriguez/byebug) [](https://gemnasium.com/deivid-rodriguez/byebug)
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
A Ruby 2.0 debugger.
|
4
|
+
|
5
|
+
|
6
|
+
## Install
|
7
|
+
|
8
|
+
Just type
|
9
|
+
|
10
|
+
$ gem install byebug
|
11
|
+
|
12
|
+
or if you use bundler, drop
|
13
|
+
|
14
|
+
gem 'byebug'
|
15
|
+
|
16
|
+
in your Gemfile
|
17
|
+
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
Wherever you want to start debugging, simply drop:
|
22
|
+
|
23
|
+
byebug
|
24
|
+
|
25
|
+
and the execution will stop and allow you to start debugging.
|
26
|
+
|
27
|
+
## Credits
|
28
|
+
|
29
|
+
Everybody who has ever contributed to this forked and reforked piece of
|
30
|
+
software, specially:
|
31
|
+
|
32
|
+
* Kent Sibilev and Mark Moseley, original authors of
|
33
|
+
[ruby-debug](https://github.com/mark-moseley/ruby-debug).
|
34
|
+
* Gabriel Horner, [debugger](https://github.com/cldwalker/debugger)'s mantainer.
|
35
|
+
* Koichi Sasada, author of the new C debugging API for Ruby.
|
36
|
+
* Dennis Ushakov, author of [debase](https://github.com/denofevil/debase), the
|
37
|
+
starting point of this.
|
data/Rakefile
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'rake/testtask'
|
3
3
|
require 'rake/extensiontask'
|
4
4
|
require 'rubygems/package_task'
|
5
|
+
require 'bundler/gem_tasks'
|
5
6
|
|
6
7
|
Rake::ExtensionTask.new('byebug')
|
7
8
|
|
@@ -15,9 +16,6 @@ task :test do
|
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
|
-
desc "Test everything - same as test."
|
19
|
-
task :check => :test
|
20
|
-
|
21
19
|
base_spec = eval(File.read('byebug.gemspec'), binding, 'byebug.gemspec')
|
22
20
|
|
23
21
|
# Rake task to build the default package
|
data/bin/byebug
CHANGED
@@ -14,14 +14,13 @@
|
|
14
14
|
#
|
15
15
|
#<tt>-A | --annotate</tt> <i>level</i>::
|
16
16
|
# Set gdb-style annotation to <i>level</i>, a number. Additional
|
17
|
-
# information is output automatically when program state is
|
18
|
-
#
|
19
|
-
#
|
17
|
+
# information is output automatically when program state is changed. This
|
18
|
+
# can be used by front-ends such as GNU Emacs to post this updated
|
19
|
+
# information without having to poll for it.
|
20
20
|
#
|
21
21
|
#<tt>--client</tt>::
|
22
|
-
# Connect to a remote byebug. Used with another
|
23
|
-
#
|
24
|
-
# <tt>--cport</tt> options
|
22
|
+
# Connect to a remote byebug. Used with another byebug invocation using
|
23
|
+
# <tt>--server</tt>. See also <tt>--host</tt> and <tt>--cport</tt> options
|
25
24
|
#
|
26
25
|
#<tt>--cport=</tt><i>port</i>::
|
27
26
|
# Use port <i>port</i> for access to byebug control.
|
@@ -30,13 +29,12 @@
|
|
30
29
|
# Set $DEBUG true.
|
31
30
|
#
|
32
31
|
#<tt>--emacs</tt>::
|
33
|
-
# Activates full GNU Emacs mode. Is the equivalent of setting the
|
34
|
-
#
|
35
|
-
# --post-mortem</tt>.
|
32
|
+
# Activates full GNU Emacs mode. Is the equivalent of setting the options
|
33
|
+
# <tt>--emacs-basic --annotate=3 --no-stop --no-control --post-mortem</tt>.
|
36
34
|
#
|
37
35
|
#<tt>--emacs-basic</tt>::
|
38
|
-
# Activates GNU Emacs mode. Byebug prompts are prefaced with two
|
39
|
-
#
|
36
|
+
# Activates GNU Emacs mode. Byebug prompts are prefaced with two octal 032
|
37
|
+
# characters.
|
40
38
|
#
|
41
39
|
#<tt>-h | --host=</tt><i>host</i>::
|
42
40
|
# Use host name <i>host</i> for remote debugging.
|
@@ -66,8 +64,7 @@
|
|
66
64
|
# Show lines before executing them.
|
67
65
|
#
|
68
66
|
#<tt>--no-quit</tt>::
|
69
|
-
# Do not quit when script terminates. Instead rerun the
|
70
|
-
# program.
|
67
|
+
# Do not quit when script terminates. Instead rerun the program.
|
71
68
|
#
|
72
69
|
#<tt>--version</tt>::
|
73
70
|
# Show the version number and exit.
|
@@ -76,24 +73,24 @@
|
|
76
73
|
# Turn on verbose mode.
|
77
74
|
#
|
78
75
|
#<tt>--v</tt>::
|
79
|
-
# Print the version number, then turn on verbose mode if
|
80
|
-
#
|
81
|
-
#
|
76
|
+
# Print the version number, then turn on verbose mode if a script name is
|
77
|
+
# given. If no script name is given just exit after printing the version
|
78
|
+
# number.
|
82
79
|
#
|
83
80
|
#<tt>--nx</tt>::
|
84
|
-
# Don’t execute commands
|
85
|
-
#
|
81
|
+
# Don’t execute commands found in any initialization files like
|
82
|
+
# <tt>.byebugrc</tt>.
|
86
83
|
#
|
87
84
|
#<tt>--keep-frame-binding</tt>::
|
88
85
|
# Keep frame bindings.
|
89
86
|
#
|
90
87
|
#<tt>--script=</tt><i>file</i>::
|
91
|
-
# Name of the script file to run
|
88
|
+
# Name of the script file to run.
|
92
89
|
#
|
93
90
|
#<tt>-s | --server</tt>::
|
94
|
-
# Listen for remote connections. Another
|
95
|
-
#
|
96
|
-
#
|
91
|
+
# Listen for remote connections. Another byebug session accesses using the
|
92
|
+
# <tt>--client</tt> option. See also the <tt>--host</tt>, <tt>--port</tt>
|
93
|
+
# and <tt>--cport</tt> options
|
97
94
|
#
|
98
95
|
#<tt>-w | --wait</tt>::
|
99
96
|
# Wait for a client connection; implies <tt>-s</tt> option.
|
@@ -107,7 +104,7 @@ require File.dirname(__FILE__) + "/../lib/byebug"
|
|
107
104
|
|
108
105
|
def debug_program(options)
|
109
106
|
# Make sure Ruby script syntax checks okay.
|
110
|
-
# Otherwise we get a load message that looks like
|
107
|
+
# Otherwise we get a load message that looks like byebug has a problem.
|
111
108
|
output = `ruby -c "#{Byebug::PROG_SCRIPT}" 2>&1`
|
112
109
|
if $?.exitstatus != 0 and RUBY_PLATFORM !~ /mswin/
|
113
110
|
puts output
|
@@ -212,7 +209,7 @@ EOB
|
|
212
209
|
opts.on('--no-stop', 'Do not stop when script is loaded') do
|
213
210
|
options.stop = false
|
214
211
|
end
|
215
|
-
opts.on('-nx', 'Not run byebug initialization files (e.g. .
|
212
|
+
opts.on('-nx', 'Not run byebug initialization files (e.g. .byebugrc') do
|
216
213
|
options.nx = true
|
217
214
|
end
|
218
215
|
opts.on('-p', '--port PORT', Integer, 'Port used for remote debugging') do
|
@@ -289,8 +286,7 @@ unless defined?(OPTS_INITFILE)
|
|
289
286
|
end
|
290
287
|
begin
|
291
288
|
initfile = File.join(HOME_DIR, OPTS_INITFILE)
|
292
|
-
eval(File.read(initfile)) if
|
293
|
-
File.exist?(initfile)
|
289
|
+
eval(File.read(initfile)) if File.exist?(initfile)
|
294
290
|
rescue
|
295
291
|
end
|
296
292
|
|
@@ -299,11 +295,11 @@ begin
|
|
299
295
|
if not defined? Byebug::ARGV
|
300
296
|
Byebug::ARGV = ARGV.clone
|
301
297
|
end
|
302
|
-
|
298
|
+
byebug_path = File.expand_path($0)
|
303
299
|
if RUBY_PLATFORM =~ /mswin/
|
304
|
-
|
300
|
+
byebug_path += '.cmd' unless byebug_path =~ /\.cmd$/i
|
305
301
|
end
|
306
|
-
Byebug::RDEBUG_SCRIPT =
|
302
|
+
Byebug::RDEBUG_SCRIPT = byebug_path
|
307
303
|
Byebug::RDEBUG_FILE = __FILE__
|
308
304
|
Byebug::INITIAL_DIR = Dir.pwd
|
309
305
|
opts.parse! ARGV
|
@@ -350,7 +346,7 @@ else
|
|
350
346
|
# start control thread
|
351
347
|
Byebug.start_control(options.host, options.cport) if options.control
|
352
348
|
|
353
|
-
# load initrc script (e.g. .
|
349
|
+
# load initrc script (e.g. .byebugrc)
|
354
350
|
Byebug.run_init_script(StringIO.new) unless options.nx
|
355
351
|
|
356
352
|
# run restore-settings startup script if specified
|
data/byebug.gemspec
CHANGED
@@ -5,6 +5,7 @@ require File.dirname(__FILE__) + "/lib/byebug/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = %q{byebug}
|
7
7
|
s.version = Byebug::VERSION
|
8
|
+
|
8
9
|
s.authors = ["David Rodríguez", "Kent Sibilev", "Mark Moseley"]
|
9
10
|
s.email = "deivid.rodriguez@mail.com"
|
10
11
|
s.homepage = "http://github.com/deivid-rodriguez/byebug"
|
@@ -14,16 +15,21 @@ Gem::Specification.new do |s|
|
|
14
15
|
the rest of the gem was forked from debugger. The core component provides
|
15
16
|
support that front-ends can build on. It provides breakpoint handling,
|
16
17
|
bindings for stack frames among other things.}
|
17
|
-
|
18
|
+
|
19
|
+
s.required_ruby_version = '>= 2.0.0'
|
20
|
+
s.required_rubygems_version = ">= 2.0.3"
|
21
|
+
|
18
22
|
s.extra_rdoc_files = [ "README.md" ]
|
19
23
|
s.files = `git ls-files`.split("\n")
|
20
24
|
s.extensions << "ext/byebug/extconf.rb"
|
21
25
|
s.executables = ["byebug"]
|
26
|
+
|
22
27
|
s.add_dependency "columnize", "~> 0.3.6"
|
23
28
|
s.add_dependency "debugger-linecache", '~> 1.2.0'
|
24
|
-
s.add_development_dependency 'rake', '~> 10.0.
|
29
|
+
s.add_development_dependency 'rake', '~> 10.0.4'
|
25
30
|
s.add_development_dependency 'rake-compiler', '~> 0.8.3'
|
26
31
|
s.add_development_dependency 'mocha', '~> 0.13.3'
|
27
32
|
s.add_development_dependency 'minitest', '~> 4.7.0'
|
33
|
+
|
28
34
|
s.license = "BSD"
|
29
35
|
end
|
data/lib/byebug.rb
CHANGED
@@ -95,7 +95,7 @@ module Byebug
|
|
95
95
|
Breakpoint.remove breakpoints, id
|
96
96
|
end
|
97
97
|
|
98
|
-
def interface=(value)
|
98
|
+
def interface=(value)
|
99
99
|
handler.interface = value
|
100
100
|
end
|
101
101
|
|
@@ -231,7 +231,7 @@ module Byebug
|
|
231
231
|
socket.close
|
232
232
|
end
|
233
233
|
|
234
|
-
|
234
|
+
##
|
235
235
|
# Runs normal byebug initialization scripts.
|
236
236
|
#
|
237
237
|
# Reads and executes the commands from init file (if any) in the current
|
@@ -242,15 +242,15 @@ module Byebug
|
|
242
242
|
#
|
243
243
|
def run_init_script(out = handler.interface)
|
244
244
|
cwd_script = File.expand_path(File.join(".", INITFILE))
|
245
|
-
run_script(cwd_script, out) if File.exists?(
|
245
|
+
run_script(cwd_script, out) if File.exists?(cwd_script)
|
246
246
|
|
247
247
|
home_script = File.expand_path(File.join(ENV['HOME'].to_s, INITFILE))
|
248
248
|
if File.exists?(home_script) and cwd_script != home_script
|
249
|
-
run_script(
|
249
|
+
run_script(home_script, out)
|
250
250
|
end
|
251
251
|
end
|
252
252
|
|
253
|
-
|
253
|
+
##
|
254
254
|
# Runs a script file
|
255
255
|
#
|
256
256
|
def run_script(file, out = handler.interface, verbose=false)
|
@@ -367,6 +367,7 @@ class Module
|
|
367
367
|
# EOD
|
368
368
|
# end
|
369
369
|
end
|
370
|
+
|
370
371
|
module Kernel
|
371
372
|
|
372
373
|
##
|
data/lib/byebug/command.rb
CHANGED
@@ -4,6 +4,17 @@ require_relative 'helper'
|
|
4
4
|
|
5
5
|
module Byebug
|
6
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
|
+
|
7
18
|
# Root dir for byebug
|
8
19
|
BYEBUG_DIR = File.expand_path(File.dirname(__FILE__)) unless
|
9
20
|
defined?(BYEBUG_DIR)
|
@@ -13,6 +24,15 @@ module Byebug
|
|
13
24
|
SubcmdStruct = Struct.new(:name, :min, :short_help, :long_help) unless
|
14
25
|
defined?(SubcmdStruct)
|
15
26
|
|
27
|
+
def print_subcommands
|
28
|
+
cmd_name = self.class.name.chomp("Command").downcase
|
29
|
+
errmsg "#{cmd_name} must be followed by the name of a subcommand.\n"
|
30
|
+
print "List of #{cmd_name} subcommands:\n\n"
|
31
|
+
for subcmd in Subcommands do
|
32
|
+
print "#{cmd_name} #{subcmd.name} -- #{subcmd.short_help}\n"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
16
36
|
include Columnize
|
17
37
|
|
18
38
|
# Find param in subcmds. param id downcased and can be abbreviated
|
@@ -35,7 +55,7 @@ module Byebug
|
|
35
55
|
|
36
56
|
DEF_OPTIONS = {
|
37
57
|
:allow_in_control => false,
|
38
|
-
:allow_in_post_mortem =>
|
58
|
+
:allow_in_post_mortem => false ,
|
39
59
|
:event => true ,
|
40
60
|
:always_run => 0 ,
|
41
61
|
:unknown => false,
|
@@ -78,7 +98,7 @@ module Byebug
|
|
78
98
|
private :settings_map
|
79
99
|
|
80
100
|
def settings
|
81
|
-
unless
|
101
|
+
unless defined? @settings and @settings
|
82
102
|
@settings = Object.new
|
83
103
|
map = settings_map
|
84
104
|
c = class << @settings; self end
|
@@ -127,23 +147,19 @@ module Byebug
|
|
127
147
|
end
|
128
148
|
end
|
129
149
|
|
130
|
-
|
150
|
+
# Register default settings
|
151
|
+
register_setting_var(:basename, false)
|
131
152
|
register_setting_var(:callstyle, :last)
|
132
153
|
register_setting_var(:byebugtesting, false)
|
133
154
|
register_setting_var(:force_stepping, false)
|
134
155
|
register_setting_var(:full_path, true)
|
135
|
-
register_setting_var(:
|
156
|
+
register_setting_var(:autolist, 1)
|
157
|
+
register_setting_var(:listsize, 10)
|
136
158
|
register_setting_var(:stack_trace_on_error, false)
|
137
|
-
register_setting_var(:tracing_plus, false)
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
width = 80 unless width > 10
|
142
|
-
register_setting_var(:width, width)
|
143
|
-
|
144
|
-
if not defined? Byebug::ARGV
|
145
|
-
Byebug::ARGV = ARGV.clone
|
146
|
-
end
|
159
|
+
register_setting_var(:tracing_plus, false)
|
160
|
+
register_setting_var(:width,
|
161
|
+
ENV['COLUMNS'].to_i > 10 ? ENV['COLUMNS'].to_i : 80)
|
162
|
+
Byebug::ARGV = ARGV.clone unless defined? Byebug::ARGV
|
147
163
|
register_setting_var(:argv, Byebug::ARGV)
|
148
164
|
|
149
165
|
def initialize(state)
|
@@ -192,10 +208,6 @@ module Byebug
|
|
192
208
|
@state.context.frame_binding(@state.frame_pos)
|
193
209
|
end
|
194
210
|
|
195
|
-
#def line_at(file, line)
|
196
|
-
# Byebug.line_at(file, line)
|
197
|
-
#end
|
198
|
-
|
199
211
|
def get_context(thnum)
|
200
212
|
Byebug.contexts.find{|c| c.thnum == thnum}
|
201
213
|
end
|
@@ -28,12 +28,12 @@ module Byebug
|
|
28
28
|
print "Ruby program #{Byebug::PROG_SCRIPT} not executable... " \
|
29
29
|
"We'll add a call to Ruby.\n"
|
30
30
|
ruby = begin defined?(Gem) ? Gem.ruby : "ruby" rescue "ruby" end
|
31
|
-
|
31
|
+
byebug_script = "#{ruby} -I#{$:.join(' -I')} #{Byebug::PROG_SCRIPT}"
|
32
32
|
else
|
33
|
-
|
33
|
+
byebug_script = Byebug::PROG_SCRIPT
|
34
34
|
end
|
35
35
|
else
|
36
|
-
|
36
|
+
byebug_script = Byebug::RDEBUG_SCRIPT
|
37
37
|
end
|
38
38
|
|
39
39
|
begin
|
@@ -52,7 +52,7 @@ module Byebug
|
|
52
52
|
argv = Command.settings[:argv]
|
53
53
|
end
|
54
54
|
end
|
55
|
-
cmd = "#{
|
55
|
+
cmd = "#{byebug_script} #{argv.compact.join(' ')}"
|
56
56
|
|
57
57
|
# An execv would be preferable to the "exec" below.
|
58
58
|
print "Re exec'ing:\n\t#{cmd}\n"
|
@@ -109,19 +109,20 @@ module Byebug
|
|
109
109
|
#end
|
110
110
|
end
|
111
111
|
|
112
|
-
|
113
|
-
#
|
114
|
-
#
|
115
|
-
# definitely truncated, false if not, and
|
112
|
+
##
|
113
|
+
# Check if call stack is truncated. This can happen if Byebug.start is not
|
114
|
+
# called low enough in the call stack. An array of additional callstack
|
115
|
+
# lines from caller is returned if definitely truncated, false if not, and
|
116
|
+
# nil if we don't know.
|
116
117
|
#
|
117
|
-
# We determine truncation based on a passed in sentinal set via
|
118
|
-
#
|
118
|
+
# We determine truncation based on a passed in sentinal set via caller which
|
119
|
+
# can be nil.
|
119
120
|
#
|
120
|
-
# First we see if we can find our position in caller. If so, then
|
121
|
-
#
|
122
|
-
#
|
123
|
-
#
|
124
|
-
#
|
121
|
+
# First we see if we can find our position in caller. If so, then we compare
|
122
|
+
# context position to that in caller using sentinal as a place to start
|
123
|
+
# ignoring additional caller entries. sentinal is set by byebug, but if it's
|
124
|
+
# nil then additional entries are presumably ones that we haven't recorded
|
125
|
+
# in context
|
125
126
|
def truncated_callstack?(context, sentinal=nil, cs=caller)
|
126
127
|
recorded_size = context.stack_size
|
127
128
|
to_find_fl = "#{context.frame_file(0)}:#{context.frame_line(0)}"
|
data/lib/byebug/commands/info.rb
CHANGED
@@ -9,58 +9,56 @@ module Byebug
|
|
9
9
|
if Byebug.catchpoints and not Byebug.catchpoints.empty?
|
10
10
|
Byebug.catchpoints.each do |exception, hits|
|
11
11
|
print "#{exception}: #{exception.is_a?(Class)}\n"
|
12
|
-
#print "#{exception}\n"
|
13
12
|
end
|
14
13
|
else
|
15
14
|
print "No exceptions set to be caught.\n"
|
16
15
|
end
|
17
16
|
end
|
17
|
+
|
18
18
|
end
|
19
19
|
|
20
20
|
# Implements byebug "info" command.
|
21
21
|
class InfoCommand < Command
|
22
22
|
self.allow_in_control = true
|
23
|
-
Subcommands =
|
24
|
-
[
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
|
56
|
-
|
57
|
-
'Local and instance variables of the current stack frame']
|
23
|
+
Subcommands = [
|
24
|
+
['args', 1, 'Argument variables of current stack frame'],
|
25
|
+
['breakpoints', 1, 'Status of user-settable breakpoints',
|
26
|
+
'Without argument, list info about all breakpoints. With an integer ' \
|
27
|
+
'argument, list info on that breakpoint.'],
|
28
|
+
['catch', 3, 'Exceptions that can be caught in the current stack frame'],
|
29
|
+
['display', 2, 'Expressions to display when program stops'],
|
30
|
+
['file', 4, 'Info about a particular file read in',
|
31
|
+
'After the file name is supplied, you can list file attributes that ' \
|
32
|
+
'you wish to see. Attributes include: "all", "basic", "breakpoint", ' \
|
33
|
+
'"lines", "mtime", "path" and "sha1".'],
|
34
|
+
['files', 5, 'File names and timestamps of files read in'],
|
35
|
+
['global_variables', 2, 'Global variables'],
|
36
|
+
['instance_variables', 2,
|
37
|
+
'Instance variables of the current stack frame'],
|
38
|
+
['line', 2,
|
39
|
+
'Line number and file name of current position in source file'],
|
40
|
+
['locals', 2, 'Local variables of the current stack frame'],
|
41
|
+
['program', 2, 'Execution status of the program'],
|
42
|
+
['stack', 2, 'Backtrace of the stack'],
|
43
|
+
# ['thread', 6, 'List info about thread NUM',
|
44
|
+
# 'If no thread number is given, we list info for all threads. ' \
|
45
|
+
# '\'terse\' and \'verbose\' options are possible. If \'terse\', just ' \
|
46
|
+
# 'give summary thread name information. See "help info threads" for ' \
|
47
|
+
# 'more detail about this summary information. If \'verbose\' appended ' \
|
48
|
+
# 'to the end of the command, then the entire stack trace is given for ' \
|
49
|
+
# 'each thread.'],
|
50
|
+
# ['threads', 7, 'information of currently-known threads',
|
51
|
+
# 'This information includes whether the thread is the current thread ' \
|
52
|
+
# '(+), it\'s suspended ($) or it\'s ignored (!), plus the thread ' \
|
53
|
+
# 'number and the top stack item. If \'verbose\' is given then the ' \
|
54
|
+
# 'entire stack frame is shown.'],
|
55
|
+
['variables', 1,
|
56
|
+
'Local and instance variables of the current stack frame']
|
58
57
|
].map do |name, min, short_help, long_help|
|
59
58
|
SubcmdStruct.new(name, min, short_help, long_help)
|
60
59
|
end unless defined?(Subcommands)
|
61
60
|
|
62
|
-
InfoFileSubcommands =
|
63
|
-
[
|
61
|
+
InfoFileSubcommands = [
|
64
62
|
['all', 1, 'All file information available - breakpoints, lines, mtime' \
|
65
63
|
', path and sha1'],
|
66
64
|
['basic', 2, 'basic information - path, number of lines'],
|
@@ -74,9 +72,8 @@ module Byebug
|
|
74
72
|
SubcmdStruct.new(name, min, short_help, long_help)
|
75
73
|
end unless defined?(InfoFileSubcommands)
|
76
74
|
|
77
|
-
# InfoThreadSubcommands =
|
78
|
-
#
|
79
|
-
# ['terse', 1, 'summary information'],
|
75
|
+
# InfoThreadSubcommands = [
|
76
|
+
# ['terse', 1, 'summary information'],
|
80
77
|
# ['verbose', 1, 'summary information and stack frame info'],
|
81
78
|
# ].map do |name, min, short_help, long_help|
|
82
79
|
# SubcmdStruct.new(name, min, short_help, long_help)
|
@@ -88,11 +85,7 @@ module Byebug
|
|
88
85
|
|
89
86
|
def execute
|
90
87
|
if !@match[1]
|
91
|
-
|
92
|
-
print "List of info subcommands:\n\n"
|
93
|
-
for subcmd in Subcommands do
|
94
|
-
print "info #{subcmd.name} -- #{subcmd.short_help}\n"
|
95
|
-
end
|
88
|
+
print_subcommands
|
96
89
|
else
|
97
90
|
args = @match[1].split(/[ \t]+/)
|
98
91
|
param = args.shift
|
@@ -114,9 +107,7 @@ module Byebug
|
|
114
107
|
args = @state.context.frame_args(@state.frame_pos)
|
115
108
|
args.each do |name|
|
116
109
|
s = "#{name} = #{locals[name].inspect}"
|
117
|
-
|
118
|
-
s[self.class.settings[:width]-3 .. -1] = "..."
|
119
|
-
end
|
110
|
+
pad_with_dots(s)
|
120
111
|
print "#{s}\n"
|
121
112
|
end
|
122
113
|
end
|
@@ -278,9 +269,7 @@ module Byebug
|
|
278
269
|
s = "*Error in evaluation*"
|
279
270
|
end
|
280
271
|
end
|
281
|
-
|
282
|
-
s[self.class.settings[:width]-3 .. -1] = "..."
|
283
|
-
end
|
272
|
+
pad_with_dots(s)
|
284
273
|
print "#{s}\n"
|
285
274
|
end
|
286
275
|
end
|
@@ -381,7 +370,7 @@ module Byebug
|
|
381
370
|
errmsg "info global_variables not available here.\n"
|
382
371
|
return
|
383
372
|
end
|
384
|
-
|
373
|
+
var_global
|
385
374
|
end
|
386
375
|
|
387
376
|
def info_variables(*args)
|
@@ -404,9 +393,7 @@ module Byebug
|
|
404
393
|
s = "#{name} = *Error in evaluation*"
|
405
394
|
end
|
406
395
|
end
|
407
|
-
|
408
|
-
s[self.class.settings[:width]-3 .. -1] = "..."
|
409
|
-
end
|
396
|
+
pad_with_dots(s)
|
410
397
|
s.gsub!('%', '%%') # protect against printf format strings
|
411
398
|
print "#{s}\n"
|
412
399
|
end
|