Issue #14702 has been updated by alanwu (Alan Wu).

File 0001-Fix-TracePoint-for-nested-iseq-loaded-from-binary.patch added

Hello. I don't think this issue is fully fixed.
I have put together a patch that has a fix and tests that fail on both trunk and ruby_2_5 for your consideration:


~~~
    Fix TracePoint for nested iseq loaded from binary [Bug #14702]
    
    When loading iseq from binary while a TracePoint is on, we need to
    recompile instructions to their "trace_" varient. Before this commit
    we only recompiled instructions in the top level iSeq, which meant
    that TracePoint was malfunctioning for code inside module/class/method
    definitions.
    
    * compile.c: Move rb_iseq_init_trace to rb_ibf_load_iseq_complete.
      It is called on all iseqs during loading.
    
    * test_iseq.rb: Test that tracepoints fire within children iseq when
      using load_from_binary.
~~~

----------------------------------------
Bug #14702: On Ruby 2.5.1, tracepoint isn't working on the file that is loaded by load_iseq
https://bugs.ruby-lang.org/issues/14702#change-74646

* Author: makoto_tajitsu / hotmail.co.jp (Makoto Tajitsu)
* Status: Closed
* Priority: Normal
* Assignee: ko1 (Koichi Sasada)
* Target version: 
* ruby -v: ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin16]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: DONE
----------------------------------------
On Ruby 2.5.1, when loading file with RubyVM::InstructionSequence.load_from_binary, TracePoint callback event is not working on loaded file.

## Steps to reproduce

Ruby version.
```
$ ruby -v
# => ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin16]
```

The example with `yomikomu` gem which is simply used `load_iseq` and `load_from_binary` method to load file quickly is following.
```ruby
$ YOMIKOMU_AUTO_COMPILE=true bundle exec irb

> TracePoint.trace(:line) { |tp| puts tp.lineno if tp.path == '/path/to/somefile.rb' }
# => #<TracePoint:enabled>

> load '/path/to/somefile.rb'
# 3
# 4
# ...

> require 'yomikomu'

> load '/path/to/somefile.rb'
# no tracepoint callback for line event
```

## Result of reproduce process

tracepoint callback isn't called on loaded file by using load_iseq and load_from_binary.

## Expected result and the reason why you expect

tracepoint callback should be called for any loaded file to debug with debugguer(e.g. byebug).

On Ruby 2.4.3, this example is working correctly, so tracepoint callback is called and output lineno to stdout when loaded file after `require 'yomikomu'`.



---Files--------------------------------
0001-Fix-TracePoint-for-nested-iseq-loaded-from-binary.patch (4.21 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>