byebug 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/GUIDE.md +209 -0
  4. data/README.md +11 -2
  5. data/Rakefile +12 -0
  6. data/ext/byebug/byebug.c +50 -53
  7. data/ext/byebug/context.c +0 -24
  8. data/lib/byebug.rb +23 -7
  9. data/lib/byebug/command.rb +35 -24
  10. data/lib/byebug/commands/breakpoints.rb +24 -35
  11. data/lib/byebug/commands/catchpoint.rb +13 -17
  12. data/lib/byebug/commands/condition.rb +14 -19
  13. data/lib/byebug/commands/continue.rb +5 -7
  14. data/lib/byebug/commands/display.rb +3 -3
  15. data/lib/byebug/commands/edit.rb +1 -1
  16. data/lib/byebug/commands/enable.rb +18 -45
  17. data/lib/byebug/commands/eval.rb +1 -1
  18. data/lib/byebug/commands/finish.rb +1 -1
  19. data/lib/byebug/commands/frame.rb +24 -22
  20. data/lib/byebug/commands/info.rb +91 -122
  21. data/lib/byebug/commands/jump.rb +3 -8
  22. data/lib/byebug/commands/list.rb +2 -2
  23. data/lib/byebug/commands/method.rb +6 -8
  24. data/lib/byebug/commands/save.rb +1 -1
  25. data/lib/byebug/commands/set.rb +0 -12
  26. data/lib/byebug/commands/show.rb +9 -21
  27. data/lib/byebug/commands/variables.rb +3 -3
  28. data/lib/byebug/context.rb +13 -2
  29. data/lib/byebug/interface.rb +13 -7
  30. data/lib/byebug/processor.rb +23 -25
  31. data/lib/byebug/version.rb +1 -1
  32. data/old_doc/primes.rb +1 -4
  33. data/test/continue_test.rb +2 -9
  34. data/test/examples/list.rb +1 -1
  35. data/test/examples/trace.rb +1 -0
  36. data/test/help_test.rb +1 -1
  37. data/test/info_test.rb +3 -3
  38. data/test/list_test.rb +7 -1
  39. data/test/method_test.rb +0 -1
  40. data/test/show_test.rb +8 -0
  41. data/test/support/matchers.rb +4 -2
  42. data/test/trace_test.rb +18 -1
  43. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f2ab6f03625dc6bba2088e27bff9ec5f6c335b57
4
- data.tar.gz: 48cca8a66cb638c91a26728a334613c33359236b
3
+ metadata.gz: 497f9606e8de41c51c02441cdbda3092f7131ec3
4
+ data.tar.gz: 12a94e7916cc107fb392af1a7abc0cd8515ce696
5
5
  SHA512:
6
- metadata.gz: 0a7c63ad6c37d3d23f13aa5db25db6dec3bed363ece29fc40402d3fa852ab2255183bb3d705c394d4a6c8a62a81f88e45e8bab5786dc06aff92eea02b9309112
7
- data.tar.gz: 5274f6aa1ab234bd028ae07943cdbfa0bfa9f02a82e5925566a55e6f6a383fbabfeb6cbc9da64efb56b3098fbeb4320ba207485ccf4ed2aa812efe98c35bc1c7
6
+ metadata.gz: 7ffdf9b6cf8fc471af1b57efacabaa9e3159c115e59d718417792e6a70a7686070a7537a1d2c10da741988fb1416bf61cb95d71420718f89219d434d3c318b7f
7
+ data.tar.gz: f1ddc5b71c708a81de661402d52a2b758913cdd09d2b4827cf850643467ef857b50dc64fa0f98ed3ba774de0dc34f1dc6b69c6d3b68d4226f3a5ac835fb8ef7d
@@ -1,3 +1,11 @@
1
+ ## 1.3.1
2
+
3
+ * Byebug now works with Rails debugging flag
4
+ * Fix bug which would make byebug crash when trying to print lines of code
5
+ containing the character '%'
6
+ * Fix bug which prevented basename and linetrace options from working together
7
+
8
+
1
9
  ## 1.3.0
2
10
 
3
11
  * Support colon-delimited include paths in command-line front-end (@ender672)
data/GUIDE.md CHANGED
@@ -435,3 +435,212 @@ Much better. But again let me emphasize that the parameter types are those of
435
435
  the corresponding variables that _currently_ exist, and this might have changed
436
436
  since the time when the call was made.
437
437
 
438
+
439
+ ## Byebug.start with a block
440
+
441
+ We saw that `Byebug.start()` and `Byebug.stop()` allow fine-grain control over
442
+ where byebug tracking should occur.
443
+
444
+ Rather than use an explicit `stop()`, you can also pass a block to the `start()`
445
+ method. This causes `start()` to run and then `yield` to that block. When the
446
+ block is finished, `stop()` is run. In other words, this wraps a
447
+ `Byebug.start()` and `Byebug.stop()` around the block of code. But it also has a
448
+ side benefit of ensuring that in the presence of an uncaught exception `stop` is
449
+ run, without having to explicitly use `begin ... ensure Byebug.stop() end`.
450
+
451
+ For example, in Ruby on Rails you might want to debug code in one of the
452
+ controllers without causing any slowdown to any other code. And this can be done
453
+ by wrapping the controller in a `start()` with a block; when the method wrapped
454
+ this way finishes, byebug is turned off and the application proceeds at regular
455
+ speed.
456
+
457
+ Of course, inside the block you will probably want to enter the byebug using
458
+ `Byebug.byebug()`, otherwise there would be little point in using the `start`.
459
+ For example, you can do this in `irb`:
460
+
461
+ ```
462
+ $ irb
463
+ 2.0.0p195 :001 > require 'byebug'
464
+ => true
465
+ 2.0.0p195 :002 > def foo
466
+ 2.0.0p195 :003?> x=1
467
+ 2.0.0p195 :004?> puts 'foo'
468
+ 2.0.0p195 :005?> end
469
+ => nil
470
+ 2.0.0p195 :006 > Byebug.start{byebug; foo}
471
+ (irb) @ 6
472
+ (byebug) s
473
+ (irb) @ 3
474
+ (byebug) s
475
+ (irb) @ 4
476
+ (byebug) p x
477
+ 1
478
+ (byebug) s
479
+ foo
480
+ => true
481
+ 2.0.0p195 :007 >
482
+ ```
483
+
484
+ There is a counter inside of `Byebug.start` method to make sure that this works
485
+ when another `Byebug.start` method is called inside of the outer one. However,
486
+ if you are stopped inside byebug, issuing another `byebug` call will not have
487
+ any effect even if it is nested inside another `Byebug.start`.
488
+
489
+ ## Debugging Oddities: How debugging Ruby may be different from debugging other
490
+ languages
491
+
492
+ If you are used to debugging in other languages like C, C++, Perl, Java or even
493
+ Bash (see [bashdb](http://bashdb.sf.net)), there may be a number of things that
494
+ seem or feel a little bit different and may confuse you. A number of these
495
+ things aren't oddities of the debugger per se but differences in how Ruby works
496
+ compared to those other languages. Because Ruby works a little differently from
497
+ those other languages, writing a debugger has to also be a little different as
498
+ well if it is to be useful. In this respect, using byebug may help you
499
+ understand Ruby better.
500
+
501
+ We've already seen two examples of such differences. One difference is the fact
502
+ that we stop on method definitions or `def`'s and that is because these are in
503
+ fact executable statements. In other compiled languages this would not happen
504
+ because that's already been done when you compile the program (or in Perl when
505
+ it scans in the program). The other difference we saw was our inability to show
506
+ call stack parameter types without having made arrangements for byebug to track
507
+ this. In other languages call stack information is usually available without
508
+ asking assistance of the debugger (in C and C++, however, you generally have to
509
+ ask the compiler to add such information.).
510
+
511
+ In this section we'll consider some other things that might throw off new users
512
+ to Ruby who are familiar with other languages and debugging in them.
513
+
514
+ * Bouncing Around in Blocks (iterators)
515
+ * No Parameter Values in a Call Stack
516
+ * Lines You Can Stop At
517
+
518
+ ## Bouncing Around in Blocks (iterators)
519
+
520
+ When debugging languages with coroutines like Python and Ruby, a method call may
521
+ not necessarily go to the first statement after the method header. It's possible
522
+ that the call will continue after a `yield` statement from a prior call.
523
+
524
+ ```ruby
525
+
526
+ # Enumerator for primes
527
+ class SievePrime
528
+ @@odd_primes = []
529
+ def self.next_prime(&block)
530
+ candidate = 2
531
+ yield candidate
532
+ not_prime = false
533
+ candidate += 1
534
+ while true do
535
+ @@odd_primes.each do |p|
536
+ not_prime = (0 == (candidate % p))
537
+ break if not_prime
538
+ end
539
+ unless not_prime
540
+ @@odd_primes << candidate
541
+ yield candidate
542
+ end
543
+ candidate += 2
544
+ end
545
+ end
546
+ end
547
+ SievePrime.next_prime do |prime|
548
+ puts prime
549
+ break if prime > 10
550
+ end
551
+ ```
552
+
553
+ ```
554
+ $ byebug primes.rb
555
+ [1, 10] in /home/davidr/Proyectos/byebug/old_doc/primes.rb
556
+ 1: # Enumerator for primes
557
+ => 2: class SievePrime
558
+ 3: @@odd_primes = []
559
+ 4: def self.next_prime(&block)
560
+ 5: candidate = 2
561
+ 6: yield candidate
562
+ 7: not_prime = false
563
+ 8: candidate += 1
564
+ 9: while true do
565
+ 10: @@odd_primes.each do |p|
566
+ (byebug) set linetrace
567
+ line tracing is on.
568
+ (byebug) set basename
569
+ basename in on.
570
+ (byebug) step 9
571
+ Tracing: primes.rb:3 @@odd_primes = []
572
+ Tracing: primes.rb:4 def self.next_prime(&block)
573
+ Tracing: primes.rb:22 SievePrime.next_prime do |prime|
574
+ Tracing: primes.rb:5 candidate = 2
575
+ Tracing: primes.rb:6 yield candidate
576
+ Tracing: primes.rb:23 puts prime
577
+ 2
578
+ Tracing: primes.rb:24 break if prime > 10
579
+ Tracing: primes.rb:7 not_prime = false
580
+ Tracing: primes.rb:8 candidate += 1
581
+ [3, 12] in /home/davidr/Proyectos/byebug/old_doc/primes.rb
582
+ 3: @@odd_primes = []
583
+ 4: def self.next_prime(&block)
584
+ 5: candidate = 2
585
+ 6: yield candidate
586
+ 7: not_prime = false
587
+ => 8: candidate += 1
588
+ 9: while true do
589
+ 10: @@odd_primes.each do |p|
590
+ 11: not_prime = (0 == (candidate % p))
591
+ 12: break if not_prime
592
+ (byebug)
593
+ ```
594
+
595
+ The loop between lines 23-26 gets interleaved between those of
596
+ `Sieve::next_prime`, lines 6-19 above.
597
+
598
+
599
+ ### No Parameter Values in a Call Stack
600
+
601
+ In traditional debuggers, in a call stack you can generally see the names of the
602
+ parameters and the values that were passed in.
603
+
604
+ Ruby is a very dynamic language and it tries to be efficient within the confines
605
+ of the language definition. Values generally aren't taken out of a variable or
606
+ expression and pushed onto a stack. Instead a new scope is created and the
607
+ parameters are given initial values. Parameter passing is by _reference_ not by
608
+ _value_ as it is say Algol, C, or Perl. During the execution of a method,
609
+ parameter values can change (and often do). In fact even the _class_ of the
610
+ object can change.
611
+
612
+ So at present, the name of the parameter is shown. The call-style setting
613
+ ([callstyle]()) can be used to set whether the name is shown or the name and the
614
+ _current_ class of the object. It has been contemplated that a style might be
615
+ added which saves on call shorter "scalar" types of values and the class name.
616
+
617
+
618
+ ### Lines You Can Stop At
619
+
620
+ As with the duplicate stops per control (e.g. `if` statement), until tools like
621
+ debuggers get more traction among core ruby developers there are going to be
622
+ weirdness. Here we describe the stopping locations which effects the breakpoint
623
+ line numbers you can stop at.
624
+
625
+ Consider the following little Ruby program.
626
+
627
+ ```ruby
628
+ 'Yes it does' =~ /
629
+ (Yes) \s+
630
+ it \s+
631
+ does
632
+ /ix
633
+ puts $1
634
+ ```
635
+
636
+ The stopping points that Ruby records are the last two lines, lines 5 and 6.
637
+
638
+ Inside `byebug` you can get a list of stoppable lines for a file using the `info
639
+ file` command with the attribute `breakpoints`.
640
+
641
+ To be continued...
642
+ * more complex example with objects, pretty printing and irb.
643
+ * line tracing and non-interactive tracing.
644
+ * mixing in Byebug.debug with byebug
645
+ * post-mortem debugging and setting up for that
646
+ * references to videos
data/README.md CHANGED
@@ -1,7 +1,7 @@
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)
1
+ # Byebug [![Gem Version][1]][2] [![Build Status][3]][4] [![Code Climate][5]][6] [![Dependency Status][7]][8]
2
2
 
3
3
  <img src="https://raw.github.com/deivid-rodriguez/byebug/master/logo.png"
4
- alt="Byebug logo" align="right" />
4
+ alt="Byebug logo" align="right" style="margin-left: 10px" />
5
5
 
6
6
  _Debugging in Ruby 2.0_
7
7
 
@@ -254,3 +254,12 @@ software, specially:
254
254
  * Dennis Ushakov, author of [debase](https://github.com/denofevil/debase), the
255
255
  starting point of this.
256
256
  * Logo by [Ivlichev Victor Petrovich](http://www.aha-soft.com/)
257
+
258
+ [1]: https://badge.fury.io/rb/byebug.png
259
+ [2]: http://badge.fury.io/rb/byebug
260
+ [3]: https://secure.travis-ci.org/deivid-rodriguez/byebug.png
261
+ [4]: http://travis-ci.org/deivid-rodriguez/byebug
262
+ [5]: https://codeclimate.com/github/deivid-rodriguez/byebug.png
263
+ [6]: https://codeclimate.com/github/deivid-rodriguez/byebug
264
+ [7]: https://gemnasium.com/deivid-rodriguez/byebug.png
265
+ [8]: https://gemnasium.com/deivid-rodriguez/byebug
data/Rakefile CHANGED
@@ -17,3 +17,15 @@ end
17
17
  base_spec = eval(File.read('byebug.gemspec'), binding, 'byebug.gemspec')
18
18
 
19
19
  task :default => :test
20
+
21
+ desc 'Run a test in looped mode so that you can look for memory leaks'
22
+ task 'test_loop' do
23
+ code = %Q[loop{ require '#{$*[1]}' }]
24
+ cmd = %Q[ruby -Itest -e "#{ code }"]
25
+ system cmd
26
+ end
27
+
28
+ desc 'Watch memory use of a looping test'
29
+ task 'test_loop_mem' do
30
+ system "watch \"ps aux | grep -v 'sh -c r' | grep [I]test\""
31
+ end
@@ -95,22 +95,22 @@ load_frame_info(VALUE trace_point, VALUE *path, VALUE *lineno, VALUE *method_id,
95
95
  }
96
96
 
97
97
  static void
98
- call_at_line(debug_context_t *context, char *file, int line,
99
- VALUE context_object, VALUE path, VALUE lineno)
98
+ call_at_line(debug_context_t *context, VALUE context_obj,
99
+ VALUE path, VALUE lineno)
100
100
  {
101
101
  CTX_FL_UNSET(context, CTX_FL_ENABLE_BKPT);
102
102
  CTX_FL_UNSET(context, CTX_FL_FORCE_MOVE);
103
- context->last_file = file;
104
- context->last_line = line;
105
- rb_funcall(context_object, rb_intern("at_line"), 2, path, lineno);
103
+ context->last_file = RSTRING_PTR(path);
104
+ context->last_line = FIX2INT(lineno);
105
+ rb_funcall(context_obj, rb_intern("at_line"), 2, path, lineno);
106
106
  }
107
107
 
108
108
  #define EVENT_SETUP \
109
109
  VALUE path, lineno, method_id, defined_class, binding, self; \
110
- VALUE context_object; \
110
+ VALUE context_obj; \
111
111
  debug_context_t *context; \
112
- context_object = Byebug_context(mByebug); \
113
- Data_Get_Struct(context_object, debug_context_t, context); \
112
+ context_obj = Byebug_context(mByebug); \
113
+ Data_Get_Struct(context_obj, debug_context_t, context); \
114
114
  if (!check_start_processing(context)) return; \
115
115
  load_frame_info(trace_point, &path, &lineno, &method_id, &defined_class, \
116
116
  &binding, &self); \
@@ -140,7 +140,7 @@ process_line_event(VALUE trace_point, void *data)
140
140
  }
141
141
 
142
142
  if (RTEST(tracing))
143
- rb_funcall(context_object, rb_intern("at_tracing"), 2, path, lineno);
143
+ rb_funcall(context_obj, rb_intern("at_tracing"), 2, path, lineno);
144
144
 
145
145
  if (context->dest_frame == -1 || context->stack_size == context->dest_frame)
146
146
  {
@@ -159,18 +159,17 @@ process_line_event(VALUE trace_point, void *data)
159
159
  {
160
160
  context->stop_reason = CTX_STOP_STEP;
161
161
  reset_stepping_stop_points(context);
162
- call_at_line(
163
- context, RSTRING_PTR(path), FIX2INT(lineno), context_object, path, lineno);
162
+ call_at_line(context, context_obj, path, lineno);
164
163
  }
165
164
  else if (CTX_FL_TEST(context, CTX_FL_ENABLE_BKPT))
166
165
  {
167
166
  breakpoint = find_breakpoint_by_pos(breakpoints, path, lineno, binding);
168
- if (breakpoint != Qnil) {
167
+ if (breakpoint != Qnil)
168
+ {
169
169
  context->stop_reason = CTX_STOP_BREAKPOINT;
170
170
  reset_stepping_stop_points(context);
171
- rb_funcall(context_object, rb_intern("at_breakpoint"), 1, breakpoint);
172
- call_at_line(context, RSTRING_PTR(path), FIX2INT(lineno), context_object,
173
- path, lineno);
171
+ rb_funcall(context_obj, rb_intern("at_breakpoint"), 1, breakpoint);
172
+ call_at_line(context, context_obj, path, lineno);
174
173
  }
175
174
  }
176
175
 
@@ -224,11 +223,11 @@ process_call_event(VALUE trace_point, void *data)
224
223
  breakpoint = find_breakpoint_by_method(breakpoints, defined_class,
225
224
  SYM2ID(method_id),
226
225
  binding, self);
227
- if (breakpoint != Qnil) {
228
- context->stop_reason = CTX_STOP_BREAKPOINT;
229
- rb_funcall(context_object, rb_intern("at_breakpoint"), 1, breakpoint);
230
- call_at_line(context, RSTRING_PTR(path), FIX2INT(lineno), context_object,
231
- path, lineno);
226
+ if (breakpoint != Qnil)
227
+ {
228
+ context->stop_reason = CTX_STOP_BREAKPOINT;
229
+ rb_funcall(context_obj, rb_intern("at_breakpoint"), 1, breakpoint);
230
+ call_at_line(context, context_obj, path, lineno);
232
231
  }
233
232
 
234
233
  cleanup(context);
@@ -277,9 +276,8 @@ process_raise_event(VALUE trace_point, void *data)
277
276
  /* increment exception */
278
277
  rb_hash_aset(catchpoints, mod_name, INT2FIX(FIX2INT(hit_count) + 1));
279
278
  context->stop_reason = CTX_STOP_CATCHPOINT;
280
- rb_funcall(context_object, rb_intern("at_catchpoint"), 1, rb_errinfo());
281
- call_at_line(context, RSTRING_PTR(path), FIX2INT(lineno), context_object,
282
- path, lineno);
279
+ rb_funcall(context_obj, rb_intern("at_catchpoint"), 1, rb_errinfo());
280
+ call_at_line(context, context_obj, path, lineno);
283
281
  break;
284
282
  }
285
283
  }
@@ -403,11 +401,11 @@ Byebug_start(VALUE self)
403
401
  static VALUE
404
402
  set_current_skipped_status(VALUE status)
405
403
  {
406
- VALUE context_object;
404
+ VALUE context_obj;
407
405
  debug_context_t *context;
408
406
 
409
- context_object = Byebug_context(mByebug);
410
- Data_Get_Struct(context_object, debug_context_t, context);
407
+ context_obj = Byebug_context(mByebug);
408
+ Data_Get_Struct(context_obj, debug_context_t, context);
411
409
  if (status)
412
410
  CTX_FL_SET(context, CTX_FL_SKIPPED);
413
411
  else
@@ -418,39 +416,38 @@ set_current_skipped_status(VALUE status)
418
416
  static VALUE
419
417
  Byebug_load(int argc, VALUE *argv, VALUE self)
420
418
  {
421
- VALUE file, stop, context_object;
422
- debug_context_t *context;
423
- int state = 0;
419
+ VALUE file, stop, context_obj;
420
+ debug_context_t *context;
421
+ int state = 0;
424
422
 
425
- if (rb_scan_args(argc, argv, "11", &file, &stop) == 1)
426
- {
427
- stop = Qfalse;
428
- }
423
+ if (rb_scan_args(argc, argv, "11", &file, &stop) == 1)
424
+ {
425
+ stop = Qfalse;
426
+ }
429
427
 
430
- Byebug_start(self);
428
+ Byebug_start(self);
431
429
 
432
- context_object = Byebug_context(self);
433
- Data_Get_Struct(context_object, debug_context_t, context);
434
- context->stack_size = 0;
435
- if (RTEST(stop)) context->steps = 1;
430
+ context_obj = Byebug_context(self);
431
+ Data_Get_Struct(context_obj, debug_context_t, context);
432
+ context->stack_size = 0;
433
+ if (RTEST(stop)) context->steps = 1;
436
434
 
437
- /* Initializing $0 to the script's path */
438
- ruby_script(RSTRING_PTR(file));
439
- rb_load_protect(file, 0, &state);
440
- if (0 != state)
441
- {
442
- VALUE errinfo = rb_errinfo();
443
- //debug_suspend(self);
444
- reset_stepping_stop_points(context);
445
- rb_set_errinfo(Qnil);
446
- return errinfo;
447
- }
435
+ /* Initializing $0 to the script's path */
436
+ ruby_script(RSTRING_PTR(file));
437
+ rb_load_protect(file, 0, &state);
438
+ if (0 != state)
439
+ {
440
+ VALUE errinfo = rb_errinfo();
441
+ reset_stepping_stop_points(context);
442
+ rb_set_errinfo(Qnil);
443
+ return errinfo;
444
+ }
448
445
 
449
- /* We should run all at_exit handler's in order to provide, for instance, a
450
- * chance to run all defined test cases */
451
- rb_exec_end_proc();
446
+ /* We should run all at_exit handler's in order to provide, for instance, a
447
+ * chance to run all defined test cases */
448
+ rb_exec_end_proc();
452
449
 
453
- return Qnil;
450
+ return Qnil;
454
451
  }
455
452
 
456
453
  static VALUE
@@ -247,28 +247,6 @@ Context_frame_class(int argc, VALUE *argv, VALUE self)
247
247
  return frame->defined_class;
248
248
  }
249
249
 
250
- static VALUE
251
- Context_frame_locals(int argc, VALUE *argv, VALUE self)
252
- {
253
- VALUE binding = Context_frame_binding(argc, argv, self);
254
- const char src[] =
255
- "local_variables.inject({}){|h, v| h[v] = eval(\"#{v}\"); h}";
256
- return NIL_P(binding) ?
257
- rb_hash_new() :
258
- rb_funcall(binding, rb_intern("eval"), 1, rb_str_new2(src));
259
- }
260
-
261
- static VALUE
262
- Context_frame_args_info(int argc, VALUE *argv, VALUE self)
263
- {
264
- VALUE binding = Context_frame_binding(argc, argv, self);
265
- const char src[] = "method(__method__).parameters";
266
-
267
- return NIL_P(binding) ?
268
- rb_ary_new() :
269
- rb_funcall(binding, rb_intern("eval"), 1, rb_str_new2(src));
270
- }
271
-
272
250
  static VALUE
273
251
  Context_tracing(VALUE self)
274
252
  {
@@ -427,8 +405,6 @@ Init_context(VALUE mByebug)
427
405
  rb_define_method(cContext, "frame_binding", Context_frame_binding, -1);
428
406
  rb_define_method(cContext, "frame_self", Context_frame_self, -1);
429
407
  rb_define_method(cContext, "frame_class", Context_frame_class, -1);
430
- rb_define_method(cContext, "frame_args_info", Context_frame_args_info, -1);
431
- rb_define_method(cContext, "frame_locals", Context_frame_locals, -1);
432
408
  rb_define_method(cContext, "step_into", Context_step_into, -1);
433
409
  rb_define_method(cContext, "step_over", Context_step_over, -1);
434
410
  rb_define_method(cContext, "step_out", Context_step_out, 1);