From: deivid.rodriguez@... Date: 2019-10-03T15:32:23+00:00 Subject: [ruby-core:95199] [Ruby master Feature#15912] Allow some reentrancy during TracePoint events Issue #15912 has been updated by deivid (David Rodr�guez). I tried my idea and, while it seemed [not hard to implement](https://github.com/ruby/ruby/commit/ed0fd5d015860f5b2fa190d9287506d5b5142230), it's not going to work, because many many more event would be generated and that breaks `byebug` and I'm guessing other TracePoint API consumers. It's also not straightforward to communicate and understand, so I think your solution of adding `TracepPoint#reopen` is better and more explicit. I can try to implement it but I'm not sure how it will go. ---------------------------------------- Feature #15912: Allow some reentrancy during TracePoint events https://bugs.ruby-lang.org/issues/15912#change-81875 * Author: deivid (David Rodr�guez) * Status: Assigned * Priority: Normal * Assignee: ko1 (Koichi Sasada) * Target version: ---------------------------------------- I got a report in byebug about byebug being incompatible with zeitwerk. This one: https://github.com/deivid-rodriguez/byebug/issues/564. This is a problem because zeitwerk is the default Rails code loader, and byebug is the default Rails debugger. Both of these tools rely on the TracePoint API: * Byebug uses a bunch of TracePoint events to stop execution at certain points in your program. * Zeitwek uses `:class` events to be able to resolve some circular edge cases. I investigated the problem and I think the issue is that while stopped at the byebug prompt, we're actually in the middle of processing a TracePoint event. That means that further TracePoint events triggered at the byebug's prompt will be ignored, because otherwise we could get into an infinite loop where the handling of events would trigger more events that trigger themselves the execution of handlers again. I understand why the TracePoint API does this, but if we could allow some level of reentrancy here, we could probably make these tools play nice together. I figure if we kept a stack of TracePoint event handlers being run, and check that the current event type is not already in the stack, we would allow :class events to be triggered from :line events, and I think that would allow Zeitwerk to work within byebug. What do you think about this, @ko1? -- https://bugs.ruby-lang.org/ Unsubscribe: