[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-core
Subject:    [ruby-core:89609] [Ruby trunk Bug#14702] On Ruby 2.5.1, tracepoint isn't working on the file that is
From:       alanwucanada () gmail ! com
Date:       2018-10-28 18:22:21
Message-ID: redmine.journal-74646.20181028182219.c54cad78be7366bc () ruby-lang ! org
[Download RAW message or body]

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>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic