Thanks to visit codestin.com
Credit goes to GitHub.com

Skip to content

Conversation

@headius
Copy link
Member

@headius headius commented Jan 6, 2026

This PR builds off of #9154 by also masking internal frames for MRI-formatted backtrace elements. It appears at some point we started showing Java lines in the MRI-formatted trace:

$ cx jruby-10.0.2.0 ruby -Xbacktrace.style=mri -e "def foo = 1 / 0; foo"
org/jruby/RubyFixnum.java:694:in '/': divided by 0 (ZeroDivisionError)
	from -e:1:in 'foo'
	from -e:1:in '<main>'

This differs from user expectations and the contents of caller traces, which both filter out internal methods (native or Ruby) by replacing them with the most recent external Ruby frame (CRuby also implements Integer#/ in native code):

$ cx ruby-4.0 ruby -e 'def foo = 1/0; foo'
-e:1:in 'Integer#/': divided by 0 (ZeroDivisionError)
	from -e:1:in 'Object#foo'
	from -e:1:in '<main>'

The patch here simply uses the caller backtrace-gathering logic for the MRI-mode backtrace data.

This is opened as a draft because I'm unsure how long this behavior has been broken, and I'm not sure what impact fixing it will have yet. Being based on #9154, that PR should be merged first, but this one needs more evaluation.

@headius headius added this to the JRuby 10.1.0.0 milestone Jan 6, 2026
@headius headius changed the title Mask native for mri stderr Mask native elements for MRI backtrace Jan 6, 2026
@headius headius force-pushed the mask_native_for_mri_stderr branch from b0e4c91 to 8a256b7 Compare January 6, 2026 07:24
@headius headius changed the base branch from ruby-4.0 to master January 6, 2026 07:24
At some point, we started including native .java lines in the MRI-
formatted trace. This was probably unintended, since MRI-format
traces should always follow CRuby's standard of replacing native
call frames with the most recent Ruby frame.

See jruby#9154 for some discussion of filtering and omitting
internal frames (that PR is about Ruby, but the same filtering
already applied to native frames used in `caller`).

This patch uses the same backtrace gathering logic for the MRI
format as it does for `caller`, since in both cases users expect
not to see .java frames for internal methods, and now with Ruby 4.0
they will also expect not to see internal Ruby sources.
@headius headius force-pushed the mask_native_for_mri_stderr branch from 9e4987f to dc7674a Compare January 6, 2026 07:26
@headius
Copy link
Member Author

headius commented Jan 6, 2026

This has been rebased against master to avoid 4.0 failing tests hiding whether it breaks anything. It should NOT be applied to JRuby 10.0.x.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant