[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