debase 0.2.3.beta4 → 0.2.3.beta5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0ab6aa605704f82f8d20fccc0b7aba1a2790a64e
4
- data.tar.gz: e932ae5bf06bed324738e1f7c260333c3e54be04
3
+ metadata.gz: 682d6984f0e5b33479f3c5138c7af974e59597cf
4
+ data.tar.gz: ed9e19b600656cbd66f46c29673c1f557db8e51b
5
5
  SHA512:
6
- metadata.gz: 8410ac3816e22adfd65d8ddc882af826291400700d7ec61a740e3b391fbef05abca1cc0d8ffb26341d675b1518211923d51b89fcfb1bb3611f196306fe010d82
7
- data.tar.gz: a3e01772f780cbd70a44b0cab7e291de31988f48f25c563e3c4f3d7e8eb77b8eb02411ee6beab9a5b6c2fdd4de0829017a4339bfe02fd308150af729f6d4a63f
6
+ metadata.gz: c128d2bfbc14ba0078f5605fbd9b2213eb77fcee710621efb9938d86923b1159707ea743a322e89f6b084089b7c6d1d1b3aec59acbd786578a8b6a0f2a739db6
7
+ data.tar.gz: df4677f7266bdee7fe11fbb9157544a01233c65707dcb312927962591897a9187a412a976d8e98686a53645228313077c769f91a5e5b519ff72f9716b80aaae5
@@ -637,6 +637,50 @@ Debase_enable_file_filtering(VALUE self, VALUE value)
637
637
  return value;
638
638
  }
639
639
 
640
+ #if RUBY_API_VERSION_CODE >= 20500 && RUBY_API_VERSION_CODE < 20600 && !(RUBY_RELEASE_YEAR == 2017 && RUBY_RELEASE_MONTH == 10 && RUBY_RELEASE_DAY == 10)
641
+ static const rb_iseq_t *
642
+ my_iseqw_check(VALUE iseqw)
643
+ {
644
+ rb_iseq_t *iseq = DATA_PTR(iseqw);
645
+
646
+ if (!iseq->body) {
647
+ return NULL;
648
+ }
649
+
650
+ return iseq;
651
+ }
652
+
653
+ static void
654
+ Debase_set_trace_flag_to_iseq(VALUE self, VALUE rb_iseq) {
655
+ if (!SPECIAL_CONST_P(rb_iseq) && RBASIC_CLASS(rb_iseq) == rb_cISeq) {
656
+ rb_iseq_t *iseq = my_iseqw_check(rb_iseq);
657
+
658
+ if(iseq) {
659
+ rb_iseq_trace_set(iseq, RUBY_EVENT_TRACEPOINT_ALL);
660
+ }
661
+ }
662
+ }
663
+
664
+ static void
665
+ Debase_unset_trace_flags(VALUE self, VALUE rb_iseq) {
666
+ if (!SPECIAL_CONST_P(rb_iseq) && RBASIC_CLASS(rb_iseq) == rb_cISeq) {
667
+ rb_iseq_t *iseq = my_iseqw_check(rb_iseq);
668
+
669
+ if(iseq) {
670
+ rb_iseq_trace_set(iseq, RUBY_EVENT_NONE);
671
+ }
672
+ }
673
+ }
674
+ #else
675
+ static void
676
+ Debase_set_trace_flag_to_iseq(VALUE self, VALUE rb_iseq) {
677
+ }
678
+
679
+ static void
680
+ Debase_unset_trace_flags(VALUE self, VALUE rb_iseq) {
681
+ }
682
+ #endif
683
+
640
684
  static VALUE
641
685
  Debase_init_variables()
642
686
  {
@@ -680,6 +724,10 @@ Init_debase_internals()
680
724
  rb_define_module_function(mDebase, "enable_trace_points", Debase_enable_trace_points, 0);
681
725
  rb_define_module_function(mDebase, "prepare_context", Debase_prepare_context, 0);
682
726
  rb_define_module_function(mDebase, "init_variables", Debase_init_variables, 0);
727
+ rb_define_module_function(mDebase, "set_trace_flag_to_iseq", Debase_set_trace_flag_to_iseq, 1);
728
+
729
+ //use only for tests
730
+ rb_define_module_function(mDebase, "unset_iseq_flags", Debase_unset_trace_flags, 1);
683
731
 
684
732
  idAlive = rb_intern("alive?");
685
733
  idAtLine = rb_intern("at_line");
@@ -21,9 +21,22 @@ module Debase
21
21
  Debugger.const_set('PROG_SCRIPT', $0) unless defined? Debugger::PROG_SCRIPT
22
22
  Debugger.const_set('INITIAL_DIR', Dir.pwd) unless defined? Debugger::INITIAL_DIR
23
23
 
24
+ monkey_patch_prepend
25
+
24
26
  Debugger.started? ? block && block.call(self) : Debugger.start_(&block)
25
27
  end
26
28
 
29
+ def monkey_patch_prepend
30
+ class << RubyVM::InstructionSequence
31
+ def self.prepend(mod, *smth)
32
+ super
33
+ if mod.to_s.include?('Bootsnap') && RUBY_VERSION >= '2.5' && RUBY_VERSION < '2.6'
34
+ prepend InstructionSequenceMixin
35
+ end
36
+ end
37
+ end
38
+ end
39
+
27
40
  # @param [String] file
28
41
  # @param [Fixnum] line
29
42
  # @param [String] expr
@@ -82,6 +95,21 @@ module Debase
82
95
  def file_filter
83
96
  @file_filter ||= FileFilter.new
84
97
  end
98
+
99
+ module InstructionSequenceMixin
100
+ def load_iseq(path)
101
+ iseq = super(path)
102
+
103
+ do_set_flags(iseq)
104
+
105
+ iseq
106
+ end
107
+
108
+ def do_set_flags(iseq)
109
+ Debugger.set_trace_flag_to_iseq(iseq)
110
+ iseq.each_child { |child_iseq| do_set_flags(child_iseq) } if iseq.respond_to? :each_child
111
+ end
112
+ end
85
113
  end
86
114
 
87
115
  class FileFilter
@@ -1,3 +1,3 @@
1
1
  module Debase
2
- VERSION = "0.2.3.beta4" unless defined? VERSION
2
+ VERSION = "0.2.3.beta5" unless defined? VERSION
3
3
  end
@@ -44,4 +44,35 @@ class TestDebugLoad < Test::Unit::TestCase
44
44
  ensure
45
45
  Debugger.stop if Debugger.started?
46
46
  end
47
+
48
+ module MyBootsnap
49
+ def load_iseq(path)
50
+ iseq = RubyVM::InstructionSequence.compile_file(path)
51
+
52
+ Debugger.unset_iseq_flags(iseq)
53
+ iseq
54
+ end
55
+ end
56
+
57
+ def test_bootsnap
58
+ @@at_line = nil
59
+ src_dir = File.dirname(__FILE__)
60
+ prog_script = File.join(src_dir, 'example', 'bootsnap', 'bootsnap.rb')
61
+
62
+ class << RubyVM::InstructionSequence
63
+ prepend MyBootsnap
64
+ end
65
+ bt = Debugger.debug_load(prog_script, true)
66
+ assert_equal(nil, bt)
67
+ assert_not_nil(@@at_line)
68
+ if RUBY_VERSION >= '2.5' && RUBY_VERSION < '2.6'
69
+ assert_equal(['debase.rb', 101], @@at_line)
70
+ end
71
+
72
+ assert(Debugger.started?)
73
+ Debugger.stop
74
+
75
+ class << RubyVM::InstructionSequence; self end.class_eval { undef_method :load_iseq }
76
+
77
+ end
47
78
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: debase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3.beta4
4
+ version: 0.2.3.beta5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dennis Ushakov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-21 00:00:00.000000000 Z
11
+ date: 2019-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: debase-ruby_core_source
@@ -137,35 +137,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
137
  version: 1.3.1
138
138
  requirements: []
139
139
  rubyforge_project: debase
140
- rubygems_version: 2.5.2.3
140
+ rubygems_version: 2.6.10
141
141
  signing_key:
142
142
  specification_version: 4
143
143
  summary: debase is a fast implementation of the standard Ruby debugger debug.rb for
144
144
  Ruby 2.0
145
- test_files:
146
- - test/example/a/example.rb
147
- - test/example/at-exit.rb
148
- - test/example/b/example.rb
149
- - test/example/bootsnap/a.rb
150
- - test/example/bootsnap/bootsnap.rb
151
- - test/example/bp_loop_issue.rb
152
- - test/example/breakpoints-basename.rb
153
- - test/example/brkpt-class-bug.rb
154
- - test/example/classes.rb
155
- - test/example/dollar-0.rb
156
- - test/example/except-bug1.rb
157
- - test/example/file with space.rb
158
- - test/example/gcd.rb
159
- - test/example/info-var-bug.rb
160
- - test/example/info-var-bug2.rb
161
- - test/example/null.rb
162
- - test/example/output.rb
163
- - test/example/pm-bug.rb
164
- - test/example/pm.rb
165
- - test/example/raise.rb
166
- - test/helper.rb
167
- - test/test_base.rb
168
- - test/test_breakpoints.rb
169
- - test/test_catchpoint.rb
170
- - test/test_load.rb
171
- - test/test_reload_bug.rb
145
+ test_files: []