Skip to content

Commit d1e38e5

Browse files
committed
test: fix gem binaries and CLI (#76)
Fix native recorder loading and debug printing. Update gem installation scripts to use new classes and add '--' separator test.
1 parent f05c5ac commit d1e38e5

File tree

9 files changed

+359
-308
lines changed

9 files changed

+359
-308
lines changed

MAINTAINERS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ just build-extension
2323

2424
This compiles the extension in release mode using Cargo. The resulting
2525
shared library is placed under
26-
`ext/native_tracer/target/release/` and is loaded by `gems/codetracer-ruby-recorder/lib/native_trace.rb`.
26+
`ext/native_tracer/target/release/` and is loaded by `gems/codetracer-ruby-recorder/lib/codetracer_ruby_recorder.rb`.
2727

2828
## Running tests
2929

gems/codetracer-pure-ruby-recorder/bin/codetracer-pure-ruby-recorder

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44

55
lib_dir = File.expand_path('../lib', __dir__)
66
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
7-
require 'trace'
7+
require 'codetracer_pure_ruby_recorder'
88

99
exit Codetracer::PureRubyRecorder.parse_argv_and_trace_ruby_file(ARGV)

gems/codetracer-pure-ruby-recorder/lib/trace.rb renamed to gems/codetracer-pure-ruby-recorder/lib/codetracer_pure_ruby_recorder.rb

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ def self.parse_argv_and_trace_ruby_file(argv)
4242
end
4343

4444
def self.trace_ruby_file(program, out_dir, program_args = [])
45-
tracer = PureRubyRecorder.new($codetracer_record, debug: ENV['CODETRACER_RUBY_RECORDER_DEBUG'] == '1')
45+
tracer = PureRubyRecorder.new(debug: ENV['CODETRACER_RUBY_RECORDER_DEBUG'] == '1')
4646

4747
tracer.record.register_call('', 1, '<top-level>', [])
4848
tracer.ignore('lib/ruby')
49-
tracer.ignore('trace.rb')
49+
tracer.ignore('codetracer_pure_ruby_recoreder.rb')
5050
tracer.ignore('recorder.rb')
5151
tracer.ignore('<internal:')
5252
tracer.ignore('gems/')
@@ -61,13 +61,23 @@ def self.trace_ruby_file(program, out_dir, program_args = [])
6161
Kernel.load(program)
6262
rescue Exception => e
6363
if tracer.debug
64-
codetracer_original_puts ''
65-
codetracer_original_puts '==== trace.rb error while tracing program ==='
66-
codetracer_original_puts 'ERROR'
67-
codetracer_original_puts e
68-
codetracer_original_puts e.backtrace
69-
codetracer_original_puts '====================='
70-
codetracer_original_puts ''
64+
if Kernel.respond_to?(:codetracer_original_puts, true)
65+
Kernel.codetracer_original_puts ''
66+
Kernel.codetracer_original_puts '==== trace.rb error while tracing program ==='
67+
Kernel.codetracer_original_puts 'ERROR'
68+
Kernel.codetracer_original_puts e
69+
Kernel.codetracer_original_puts e.backtrace
70+
Kernel.codetracer_original_puts '====================='
71+
Kernel.codetracer_original_puts ''
72+
else
73+
puts ''
74+
puts '==== trace.rb error while tracing program ==='
75+
puts 'ERROR'
76+
puts e
77+
puts e.backtrace
78+
puts '====================='
79+
puts ''
80+
end
7181
end
7282
ensure
7383
# Restore original ARGV
@@ -80,9 +90,9 @@ def self.trace_ruby_file(program, out_dir, program_args = [])
8090
0
8191
end
8292

83-
def initialize(record, debug: false)
93+
def initialize(debug: false)
8494
@tracing = false
85-
@record = record
95+
@record = TraceRecord.new
8696
@ignore_list = []
8797
@debug = debug
8898
@record.debug = debug if @record.respond_to?(:debug=)
@@ -126,12 +136,12 @@ def setup_tracepoints
126136
def prepare_args(tp)
127137
args_after_self = tp.parameters.map do |(kind, name)|
128138
value = if tp.binding.nil? || name.nil?
129-
NIL_VALUE
139+
@record.nil_value
130140
else
131141
begin
132-
to_value(tp.binding.local_variable_get(name))
142+
@record.to_value(tp.binding.local_variable_get(name))
133143
rescue
134-
NIL_VALUE
144+
@record.nil_value
135145
end
136146
end
137147
[name.to_sym, value]
@@ -140,7 +150,7 @@ def prepare_args(tp)
140150
# can be class or module
141151
module_name = tp.self.class.name
142152
begin
143-
args = [[:self, raw_obj_value(tp.self.to_s, module_name)]] + args_after_self
153+
args = [[:self, @record.raw_obj_value(tp.self.to_s, module_name)]] + args_after_self
144154
rescue
145155
# $stderr.write("error args\n")
146156
args = []
@@ -163,7 +173,11 @@ def record_call(tp)
163173
method_name_prefix = module_name == 'Object' ? '' : "#{module_name}#"
164174
method_name = "#{method_name_prefix}#{tp.method_id}"
165175

166-
codetracer_original_puts "call #{method_name} with #{tp.parameters}" if $tracer.debug
176+
if @debug && Kernel.respond_to?(:codetracer_original_puts, true)
177+
Kernel.codetracer_original_puts "call #{method_name} with #{tp.parameters}"
178+
elsif @debug
179+
puts "call #{method_name} with #{tp.parameters}"
180+
end
167181

168182
arg_records = prepare_args(tp)
169183

@@ -175,8 +189,12 @@ def record_call(tp)
175189

176190
def record_return(tp)
177191
if self.tracks_call?(tp)
178-
codetracer_original_puts "return" if $tracer.debug
179-
return_value = to_value(tp.return_value)
192+
if @debug && Kernel.respond_to?(:codetracer_original_puts, true)
193+
Kernel.codetracer_original_puts 'return'
194+
elsif @debug
195+
puts 'return'
196+
end
197+
return_value = @record.to_value(tp.return_value)
180198
@record.register_step(tp.path, tp.lineno)
181199
# return value support inspired by existing IDE-s/envs like
182200
# Visual Studio/JetBrains IIRC
@@ -248,14 +266,19 @@ def trace_block(&block)
248266
end
249267
end
250268

269+
# Flush trace to output directory - compatible with native recorder API
270+
def flush_trace(out_dir)
271+
@record.serialize('', out_dir)
272+
end
273+
251274
private
252275

253276
def load_variables(binding)
254277
if !binding.nil?
255278
# $stdout.write binding.local_variables
256279
binding.local_variables.map do |name|
257280
v = binding.local_variable_get(name)
258-
out = to_value(v)
281+
out = @record.to_value(v)
259282
[name, out]
260283
end
261284
else

0 commit comments

Comments
 (0)