byebug 1.0.2 → 1.0.3

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/README.md +1 -1
  4. data/bin/byebug +1 -2
  5. data/byebug.gemspec +1 -1
  6. data/ext/byebug/byebug.c +50 -35
  7. data/ext/byebug/context.c +99 -45
  8. data/lib/byebug.rb +5 -10
  9. data/lib/byebug/command.rb +20 -12
  10. data/lib/byebug/commands/breakpoints.rb +1 -1
  11. data/lib/byebug/commands/control.rb +14 -21
  12. data/lib/byebug/commands/display.rb +4 -4
  13. data/lib/byebug/commands/enable.rb +20 -19
  14. data/lib/byebug/commands/eval.rb +1 -1
  15. data/lib/byebug/commands/finish.rb +4 -5
  16. data/lib/byebug/commands/info.rb +118 -116
  17. data/lib/byebug/commands/list.rb +72 -48
  18. data/lib/byebug/commands/reload.rb +4 -3
  19. data/lib/byebug/commands/set.rb +7 -16
  20. data/lib/byebug/commands/show.rb +2 -2
  21. data/lib/byebug/commands/threads.rb +7 -6
  22. data/lib/byebug/context.rb +10 -2
  23. data/lib/byebug/helper.rb +3 -3
  24. data/lib/byebug/processor.rb +1 -1
  25. data/lib/byebug/version.rb +1 -1
  26. data/old_doc/byebug.texi +45 -51
  27. data/test/breakpoints_test.rb +180 -195
  28. data/test/display_test.rb +59 -53
  29. data/test/eval_test.rb +0 -2
  30. data/test/examples/info.rb +5 -5
  31. data/test/examples/info_threads.rb +1 -1
  32. data/test/finish_test.rb +16 -15
  33. data/test/info_test.rb +9 -10
  34. data/test/irb_test.rb +64 -65
  35. data/test/list_test.rb +76 -50
  36. data/test/method_test.rb +10 -5
  37. data/test/post_mortem_test.rb +27 -25
  38. data/test/reload_test.rb +31 -31
  39. data/test/restart_test.rb +106 -110
  40. data/test/show_test.rb +8 -16
  41. data/test/stepping_test.rb +4 -2
  42. data/test/support/test_dsl.rb +37 -76
  43. data/test/test_helper.rb +0 -1
  44. data/test/variables_test.rb +9 -12
  45. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9879e1bf4c99c2ce971bb11d2d0d9e1be2ab6b3f
4
- data.tar.gz: 5402c4b2c35821bb2a594dff94b2fe8f5928fa16
3
+ metadata.gz: db82855de95f0558289aa633b2432e871bf4a3bb
4
+ data.tar.gz: 805e3ed4d731545dd2a7f5d9a60ecfe4925e4fdd
5
5
  SHA512:
6
- metadata.gz: 500afcaa81db3c20f1e36a691d4599d29feeafa0670e7b37e134bd2a9e5afa8f7812caaa85b147ac72b1b870552ff655ffe767e10e4dd07e13359cebcd903039
7
- data.tar.gz: f8ac3188a9cd9520f8bd3d3b440ad5f9c29e4ec4feb5fd83236eaa4a43920c81a0fa72a47c5092898bab539fc3fcf1b99fb1d518646444d4d8f6eb2d3c658888
6
+ metadata.gz: 5662e984cfcb5562c7afe0ccfcb79b926e19ff8fefbf2cb55fae3f18705650983a5385daf5b1545c9dea85bb6d783a46e9ddc0204f08c3116a66e9cc1522a8f6
7
+ data.tar.gz: 2fe8c9c5934687b8dfdfccdec322a227a0892662010bc08db4be14ac5af4b49b674868da94773517691e57f6b4f4d3b53794e3c819cd9ccd1979092ed816a21e
@@ -1,3 +1,14 @@
1
+ ## 1.0.3
2
+
3
+ * "autoreload" is set by default now
4
+ * "list" command: no negative line numbers shown, and line range behaves as
5
+ expected at the begining/end of file
6
+ * In some weird cases, "backtrace" command segfaults when trying to show info on
7
+ some frame args. Don't know the reason yet, but the exception is handled now and
8
+ and the command doesn't segfault anymore.
9
+ * Try some thread support (not even close to usable)
10
+
11
+
1
12
  ## 1.0.2
2
13
 
3
14
  * "autolist" and "autoeval" are default settings now
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Byebug [![Build Status](https://secure.travis-ci.org/deivid-rodriguez/byebug.png)](http://travis-ci.org/deivid-rodriguez/byebug) [![Code Climate](https://codeclimate.com/github/deivid-rodriguez/byebug.png)](https://codeclimate.com/github/deivid-rodriguez/byebug) [![Dependency Status](https://gemnasium.com/deivid-rodriguez/byebug.png)](https://gemnasium.com/deivid-rodriguez/byebug)
1
+ # Byebug [![Gem Version](https://badge.fury.io/rb/byebug.png)](http://badge.fury.io/rb/byebug) [![Build Status](https://secure.travis-ci.org/deivid-rodriguez/byebug.png)](http://travis-ci.org/deivid-rodriguez/byebug) [![Code Climate](https://codeclimate.com/github/deivid-rodriguez/byebug.png)](https://codeclimate.com/github/deivid-rodriguez/byebug) [![Dependency Status](https://gemnasium.com/deivid-rodriguez/byebug.png)](https://gemnasium.com/deivid-rodriguez/byebug)
2
2
 
3
3
  A Ruby 2.0 debugger.
4
4
 
data/bin/byebug CHANGED
@@ -297,8 +297,7 @@ begin
297
297
  if RUBY_PLATFORM =~ /mswin/
298
298
  byebug_path += '.cmd' unless byebug_path =~ /\.cmd$/i
299
299
  end
300
- Byebug::RDEBUG_SCRIPT = byebug_path
301
- Byebug::BYEBUG_BIN = __FILE__
300
+ Byebug::BYEBUG_SCRIPT = byebug_path
302
301
  Byebug::INITIAL_DIR = Dir.pwd
303
302
  opts.parse! ARGV
304
303
  rescue StandardError => e
@@ -29,7 +29,7 @@ Gem::Specification.new do |s|
29
29
  s.add_development_dependency 'rake', '~> 10.0.4'
30
30
  s.add_development_dependency 'rake-compiler', '~> 0.8.3'
31
31
  s.add_development_dependency 'mocha', '~> 0.13.3'
32
- s.add_development_dependency 'minitest', '~> 4.7.0'
32
+ s.add_development_dependency 'minitest', '~> 4.7.3'
33
33
 
34
34
  s.license = "BSD"
35
35
  end
@@ -19,19 +19,37 @@ static VALUE tpRaise;
19
19
 
20
20
  static VALUE idAlive;
21
21
 
22
- static void
23
- print_debug_info(char *event, VALUE path, VALUE lineno, VALUE method_id,
24
- VALUE defined_class, int stack_size)
25
- {
26
- char *file;
27
- const char *method_name, *class_name;
28
-
29
- file = strrchr(RSTRING_PTR(path), '/');
30
- method_name = rb_id2name(SYM2ID(method_id));
31
- class_name = NIL_P(defined_class) ? "undef" : rb_class2name(defined_class);
32
- fprintf(stderr, "%s: file=%s, line=%d, class=%s, method=%s, stack=%d\n",
33
- event, ++file, FIX2INT(lineno), class_name, method_name, stack_size);
34
- return;
22
+ static VALUE
23
+ tp_inspect(VALUE trace_point) {
24
+ rb_trace_arg_t *trace_arg = rb_tracearg_from_tracepoint(trace_point);
25
+ if (trace_arg) {
26
+ VALUE event = rb_tracearg_event(trace_arg);
27
+ if (ID2SYM(rb_intern("line")) == event ||
28
+ ID2SYM(rb_intern("specified_line")) == event)
29
+ {
30
+ VALUE sym = rb_tracearg_method_id(trace_arg);
31
+ if (!NIL_P(sym))
32
+ return rb_sprintf("%"PRIsVALUE"@%"PRIsVALUE":%d in `%"PRIsVALUE"'",
33
+ rb_tracearg_event(trace_arg),
34
+ rb_tracearg_path(trace_arg),
35
+ FIX2INT(rb_tracearg_lineno(trace_arg)),
36
+ sym);
37
+ }
38
+ if (ID2SYM(rb_intern("call")) == event ||
39
+ ID2SYM(rb_intern("c_call")) == event ||
40
+ ID2SYM(rb_intern("return")) == event ||
41
+ ID2SYM(rb_intern("c_return")) == event)
42
+ return rb_sprintf("%"PRIsVALUE" `%"PRIsVALUE"'@%"PRIsVALUE":%d",
43
+ rb_tracearg_event(trace_arg),
44
+ rb_tracearg_method_id(trace_arg),
45
+ rb_tracearg_path(trace_arg),
46
+ FIX2INT(rb_tracearg_lineno(trace_arg)));
47
+ return rb_sprintf("%"PRIsVALUE"@%"PRIsVALUE":%d",
48
+ rb_tracearg_event(trace_arg),
49
+ rb_tracearg_path(trace_arg),
50
+ FIX2INT(rb_tracearg_lineno(trace_arg)));
51
+ }
52
+ return rb_sprintf("No info");
35
53
  }
36
54
 
37
55
  static VALUE
@@ -158,13 +176,12 @@ process_line_event(VALUE trace_point, void *data)
158
176
 
159
177
  load_frame_info(
160
178
  trace_point, &path, &lineno, &method_id, &defined_class, &binding, &self);
179
+ if (debug == Qtrue)
180
+ printf("%s (stack_size: %d)\n", RSTRING_PTR(tp_inspect(trace_point)),
181
+ context->stack_size);
161
182
  update_frame(context_object, RSTRING_PTR(path), FIX2INT(lineno), method_id,
162
183
  defined_class, binding, self);
163
184
 
164
- if (debug == Qtrue)
165
- print_debug_info(
166
- "line", path, lineno, method_id, defined_class, context->stack_size);
167
-
168
185
  if (context->last_line != FIX2INT(lineno) || context->last_file == NULL ||
169
186
  strcmp(context->last_file, RSTRING_PTR(path)))
170
187
  {
@@ -220,21 +237,20 @@ process_return_event(VALUE trace_point, void *data)
220
237
  Data_Get_Struct(context_object, debug_context_t, context);
221
238
  if (!check_start_processing(context, rb_thread_current())) return;
222
239
 
240
+ load_frame_info(
241
+ trace_point, &path, &lineno, &method_id, &defined_class, &binding, &self);
242
+ if (debug == Qtrue)
243
+ printf("%s (stack_size: %d)\n", RSTRING_PTR(tp_inspect(trace_point)),
244
+ context->stack_size);
245
+
223
246
  if (context->stack_size == context->stop_frame)
224
247
  {
225
248
  context->stop_next = 1;
226
249
  context->stop_frame = 0;
227
250
  }
228
251
 
229
- load_frame_info(trace_point, &path, &lineno, &method_id, &defined_class,
230
- &binding, &self);
231
252
  pop_frame(context_object);
232
253
 
233
- if (debug == Qtrue)
234
- print_debug_info("return", path, lineno, method_id, defined_class,
235
- context->stack_size);
236
- //rb_funcall(context_object, idAtReturn, 2, path, lineno);
237
-
238
254
  cleanup(context);
239
255
  }
240
256
 
@@ -250,15 +266,14 @@ process_call_event(VALUE trace_point, void *data)
250
266
  Data_Get_Struct(context_object, debug_context_t, context);
251
267
  if (!check_start_processing(context, rb_thread_current())) return;
252
268
 
253
- load_frame_info(trace_point, &path, &lineno, &method_id, &defined_class,
254
- &binding, &self);
269
+ load_frame_info(
270
+ trace_point, &path, &lineno, &method_id, &defined_class, &binding, &self);
271
+ if (debug == Qtrue)
272
+ printf("%s (stack_size: %d)\n", RSTRING_PTR(tp_inspect(trace_point)),
273
+ context->stack_size);
255
274
  push_frame(context_object, RSTRING_PTR(path), FIX2INT(lineno), method_id,
256
275
  defined_class, binding, self);
257
276
 
258
- if (debug == Qtrue)
259
- print_debug_info("call", path, lineno, method_id, defined_class,
260
- context->stack_size);
261
-
262
277
  breakpoint = find_breakpoint_by_method(breakpoints, defined_class,
263
278
  SYM2ID(method_id),
264
279
  binding, self);
@@ -287,14 +302,14 @@ process_raise_event(VALUE trace_point, void *data)
287
302
  Data_Get_Struct(context_object, debug_context_t, context);
288
303
  if (!check_start_processing(context, rb_thread_current())) return;
289
304
 
290
- load_frame_info(trace_point, &path, &lineno, &method_id, &defined_class,
291
- &binding, &self);
305
+ load_frame_info(
306
+ trace_point, &path, &lineno, &method_id, &defined_class, &binding, &self);
307
+ if (debug == Qtrue)
308
+ printf("%s (stack_size: %d)\n", RSTRING_PTR(tp_inspect(trace_point)),
309
+ context->stack_size);
292
310
  update_frame(context_object, RSTRING_PTR(path), FIX2INT(lineno), method_id,
293
311
  defined_class, binding, self);
294
312
 
295
- if (debug == Qtrue)
296
- print_debug_info("call", path, lineno, method_id, defined_class,
297
- context->stack_size);
298
313
  expn_class = rb_obj_class(err);
299
314
 
300
315
  if (catchpoints == Qnil ||
@@ -5,6 +5,18 @@ static int thnum_current = 0;
5
5
 
6
6
  static VALUE idAlive;
7
7
 
8
+ static VALUE
9
+ id2ref(VALUE id)
10
+ {
11
+ return id;
12
+ }
13
+
14
+ static VALUE
15
+ context_thread_0(debug_context_t *context)
16
+ {
17
+ return id2ref(context->thread);
18
+ }
19
+
8
20
  /* "Step", "Next" and "Finish" do their work by saving information about where
9
21
  * to stop next. reset_stepping_stop_points removes/resets this information. */
10
22
  extern void
@@ -251,25 +263,27 @@ Context_frame_self(int argc, VALUE *argv, VALUE self)
251
263
  }
252
264
 
253
265
  static VALUE
254
- Context_frame_locals(int argc, VALUE *argv, VALUE self)
266
+ Context_frame_class(int argc, VALUE *argv, VALUE self)
255
267
  {
256
- VALUE binding = Context_frame_binding(argc, argv, self);
257
- const char src[] =
258
- "local_variables.inject({}){|h, v| h[v] = eval(\"#{v}\"); h}";
259
- return NIL_P(binding) ?
260
- rb_hash_new() :
261
- rb_funcall(binding, rb_intern("eval"), 1, rb_str_new2(src));
268
+ debug_context_t *context;
269
+ debug_frame_t *frame;
270
+ VALUE frame_no;
271
+ int frame_n;
272
+
273
+ Data_Get_Struct(self, debug_context_t, context);
274
+ frame_n = rb_scan_args(argc, argv, "01", &frame_no) == 0 ? 0 : FIX2INT(frame_no);
275
+ frame = get_frame_no(context, frame_n);
276
+ return frame->defined_class;
262
277
  }
263
278
 
264
279
  static VALUE
265
- Context_frame_args(int argc, VALUE *argv, VALUE self)
280
+ Context_frame_locals(int argc, VALUE *argv, VALUE self)
266
281
  {
267
282
  VALUE binding = Context_frame_binding(argc, argv, self);
268
283
  const char src[] =
269
- "__method__ ? " \
270
- "self.method(__method__).parameters.map{|(attr, mid)| mid} : []";
284
+ "local_variables.inject({}){|h, v| h[v] = eval(\"#{v}\"); h}";
271
285
  return NIL_P(binding) ?
272
- rb_ary_new() :
286
+ rb_hash_new() :
273
287
  rb_funcall(binding, rb_intern("eval"), 1, rb_str_new2(src));
274
288
  }
275
289
 
@@ -287,53 +301,91 @@ Context_frame_args_info(int argc, VALUE *argv, VALUE self)
287
301
  static VALUE
288
302
  Context_tracing(VALUE self)
289
303
  {
290
- debug_context_t *context;
304
+ debug_context_t *context;
291
305
 
292
- Data_Get_Struct(self, debug_context_t, context);
293
- return CTX_FL_TEST(context, CTX_FL_TRACING) ? Qtrue : Qfalse;
306
+ Data_Get_Struct(self, debug_context_t, context);
307
+ return CTX_FL_TEST(context, CTX_FL_TRACING) ? Qtrue : Qfalse;
294
308
  }
295
309
 
296
310
  static VALUE
297
311
  Context_set_tracing(VALUE self, VALUE value)
298
312
  {
299
- debug_context_t *context;
313
+ debug_context_t *context;
314
+
315
+ Data_Get_Struct(self, debug_context_t, context);
316
+
317
+ if (RTEST(value))
318
+ CTX_FL_SET(context, CTX_FL_TRACING);
319
+ else
320
+ CTX_FL_UNSET(context, CTX_FL_TRACING);
321
+ return value;
322
+ }
323
+
324
+ static VALUE
325
+ Context_stop_reason(VALUE self)
326
+ {
327
+ debug_context_t *context;
328
+ const char *symbol;
329
+
330
+ Data_Get_Struct(self, debug_context_t, context);
331
+
332
+ switch(context->stop_reason)
333
+ {
334
+ case CTX_STOP_STEP:
335
+ symbol = "step";
336
+ break;
337
+ case CTX_STOP_BREAKPOINT:
338
+ symbol = "breakpoint";
339
+ break;
340
+ case CTX_STOP_CATCHPOINT:
341
+ symbol = "catchpoint";
342
+ break;
343
+ case CTX_STOP_NONE:
344
+ default:
345
+ symbol = "none";
346
+ }
347
+ if(CTX_FL_TEST(context, CTX_FL_DEAD))
348
+ symbol = "post-mortem";
300
349
 
301
- Data_Get_Struct(self, debug_context_t, context);
350
+ return ID2SYM(rb_intern(symbol));
351
+ }
302
352
 
303
- if (RTEST(value))
304
- CTX_FL_SET(context, CTX_FL_TRACING);
353
+ static void
354
+ context_suspend_0(debug_context_t *context)
355
+ {
356
+ VALUE status;
357
+
358
+ status = rb_funcall(context_thread_0(context), rb_intern("status"), 0);
359
+ if (rb_str_cmp(status, rb_str_new2("run")) == 0)
360
+ CTX_FL_SET(context, CTX_FL_WAS_RUNNING);
361
+ else if(rb_str_cmp(status, rb_str_new2("sleep")) == 0)
362
+ CTX_FL_UNSET(context, CTX_FL_WAS_RUNNING);
305
363
  else
306
- CTX_FL_UNSET(context, CTX_FL_TRACING);
307
- return value;
364
+ return;
365
+ CTX_FL_SET(context, CTX_FL_SUSPEND);
308
366
  }
309
367
 
310
368
  static VALUE
311
- Context_stop_reason(VALUE self)
369
+ Context_suspend(VALUE self)
312
370
  {
313
- debug_context_t *context;
314
- const char *symbol;
315
-
316
- Data_Get_Struct(self, debug_context_t, context);
317
-
318
- switch(context->stop_reason)
319
- {
320
- case CTX_STOP_STEP:
321
- symbol = "step";
322
- break;
323
- case CTX_STOP_BREAKPOINT:
324
- symbol = "breakpoint";
325
- break;
326
- case CTX_STOP_CATCHPOINT:
327
- symbol = "catchpoint";
328
- break;
329
- case CTX_STOP_NONE:
330
- default:
331
- symbol = "none";
332
- }
333
- if(CTX_FL_TEST(context, CTX_FL_DEAD))
334
- symbol = "post-mortem";
371
+ debug_context_t *context;
335
372
 
336
- return ID2SYM(rb_intern(symbol));
373
+ Data_Get_Struct(self, debug_context_t, context);
374
+
375
+ if (CTX_FL_TEST(context, CTX_FL_SUSPEND))
376
+ rb_raise(rb_eRuntimeError, "Already suspended.");
377
+ context_suspend_0(context);
378
+
379
+ return Qnil;
380
+ }
381
+
382
+ static VALUE
383
+ Context_is_suspended(VALUE self)
384
+ {
385
+ debug_context_t *context;
386
+
387
+ Data_Get_Struct(self, debug_context_t, context);
388
+ return CTX_FL_TEST(context, CTX_FL_SUSPEND) ? Qtrue : Qfalse;
337
389
  }
338
390
 
339
391
  #if 0
@@ -436,6 +488,8 @@ Init_context(VALUE mByebug)
436
488
  rb_define_method(cContext, "ignored?", Context_ignored, 0);
437
489
  rb_define_method(cContext, "thnum", Context_thnum, 0);
438
490
  rb_define_method(cContext, "stop_reason", Context_stop_reason, 0);
491
+ rb_define_method(cContext, "suspend", Context_suspend, 0);
492
+ rb_define_method(cContext, "suspended?", Context_is_suspended, 0);
439
493
  rb_define_method(cContext, "tracing", Context_tracing, 0);
440
494
  rb_define_method(cContext, "tracing=", Context_set_tracing, 1);
441
495
  rb_define_method(cContext, "frame_file", Context_frame_file, -1);
@@ -443,7 +497,7 @@ Init_context(VALUE mByebug)
443
497
  rb_define_method(cContext, "frame_method", Context_frame_method, -1);
444
498
  rb_define_method(cContext, "frame_binding", Context_frame_binding, -1);
445
499
  rb_define_method(cContext, "frame_self", Context_frame_self, -1);
446
- rb_define_method(cContext, "frame_args", Context_frame_args, -1);
500
+ rb_define_method(cContext, "frame_class", Context_frame_class, -1);
447
501
  rb_define_method(cContext, "frame_args_info", Context_frame_args_info, -1);
448
502
  rb_define_method(cContext, "frame_locals", Context_frame_locals, -1);
449
503
  rb_define_method(cContext, "stop_next=", Context_stop_next, -1);
@@ -10,8 +10,6 @@ require 'linecache19'
10
10
 
11
11
  module Byebug
12
12
 
13
- @reload_source_on_change = false
14
-
15
13
  self.handler = CommandProcessor.new
16
14
 
17
15
  # Default options to Byebug.start
@@ -29,10 +27,6 @@ module Byebug
29
27
 
30
28
  class << self
31
29
 
32
- # If true, checks the modification time of source files and reloads them if
33
- # they were modified
34
- attr_accessor :reload_source_on_change
35
-
36
30
  attr_accessor :last_exception
37
31
  Byebug.last_exception = nil
38
32
 
@@ -66,7 +60,8 @@ module Byebug
66
60
  end
67
61
 
68
62
  def source_reload
69
- Object.send(:remove_const, "SCRIPT_LINES__") if Object.const_defined?("SCRIPT_LINES__")
63
+ Object.send(:remove_const, "SCRIPT_LINES__") if
64
+ Object.const_defined?("SCRIPT_LINES__")
70
65
  Object.const_set("SCRIPT_LINES__", {})
71
66
  LineCache::clear_file_cache
72
67
  end
@@ -74,8 +69,8 @@ module Byebug
74
69
  # Get line +line_number+ from file named +filename+.
75
70
  # @return "\n" if there was a problem. Leaking blanks are stripped off.
76
71
  def line_at(filename, line_number)
77
- @reload_on_change = nil unless defined?(@reload_on_change)
78
- line = LineCache::getline(filename, line_number, @reload_on_change)
72
+ @@reload_source_on_change = nil unless defined?(@@reload_source_on_change)
73
+ line = LineCache::getline(filename, line_number, @@reload_source_on_change)
79
74
  return "\n" unless line
80
75
  return "#{line.gsub(/^\s+/, '').chomp}"
81
76
  end
@@ -390,7 +385,7 @@ module Kernel
390
385
  end
391
386
  alias breakpoint byebug unless respond_to?(:breakpoint)
392
387
 
393
- #
388
+ ##
394
389
  # Returns a binding of n-th call frame
395
390
  #
396
391
  def binding_n(n = 0)
@@ -210,6 +210,14 @@ module Byebug
210
210
  end
211
211
  end
212
212
 
213
+ def debug_warning_eval(str, b = get_binding)
214
+ begin
215
+ debug_eval(str, b)
216
+ rescue :debug_error => e
217
+ print "#{e.class} Exception: #{e.message}\n"
218
+ end
219
+ end
220
+
213
221
  def get_binding
214
222
  @state.context.frame_binding(@state.frame_pos)
215
223
  end
@@ -226,18 +234,18 @@ module Byebug
226
234
  # Use Byebug.settings[] and Byebug.settings[]= methods to query and set
227
235
  # byebug settings. These settings are available:
228
236
  #
229
- # :autolist - automatically calls 'list' command on breakpoint
230
- # :autoeval - evaluates input in the current binding if it's
231
- # not recognized as a byebug command
232
- # :autoirb - automatically calls 'irb' command on breakpoint
233
- # :stack_trace_on_error - shows full stack trace if eval command results in
234
- # an exception
235
- # :frame_full_path - displays full paths when showing frame stack
236
- # :frame_class_names - displays method's class name when showing frame
237
- # stack
238
- # :reload_source_on_change - makes 'list' command always display up-to-date
239
- # source code
240
- # :force_stepping - stepping command always move to the new line
237
+ # :autolist - automatically calls 'list' command on breakpoint
238
+ # :autoeval - evaluates input in the current binding if it's
239
+ # not recognized as a byebug command
240
+ # :autoirb - automatically calls 'irb' command on breakpoint
241
+ # :stack_trace_on_error - shows full stack trace if eval command results
242
+ # in an exception
243
+ # :frame_full_path - displays full paths when showing frame stack
244
+ # :frame_class_names - displays method's class name when showing frame
245
+ # stack
246
+ # :reload_source_on_change - makes 'list' command always display up-to-date
247
+ # source code
248
+ # :force_stepping - stepping command always move to the new line
241
249
  #
242
250
  def self.settings
243
251
  Command.settings