Issue #14143 has been updated by Eregon (Benoit Daloze).


ko1 (Koichi Sasada) wrote:
> I reconsider about this line and
> `#<Thread:0x000055c6660d0b10 / report.rb:3 run> terminated with exception (report_on_exception):`
> is not enough?
> 
> We can understand this report is related to `report_on_exception` (and can google it).

Ideally, I think referring to the documentation of Thread::report_on_exception directly would be the most helpful, so something like:

    #<Thread:0x000055c6660d0b10 / report.rb:3 run> terminated with exception (see Thread.report_on_exception)

Note that if one of your concerns is the line length, we at least can remove the status as it is useless.

    #<Thread:0x000055c6660d0b10 / report.rb:3> terminated with exception (see Thread.report_on_exception)

The address seems of little use beyond identifying which Thread is is, which we could use a simpler numbering, or simply skip leading zeros.
We could also show an extra backtrace line for Thread.new, so there is no need to show the source location on the first line:

    #<Thread:0x000055c6660d0b10> terminated with exception (see Thread.report_on_exception)
    Traceback (most recent call last):
    	5: from report.rb:3:in `Thread.new'
    	4: from report.rb:4:in `block in <main>'
    	3: from report.rb:4:in `times'
    	2: from report.rb:5:in `block (2 levels) in <main>'
    	1: from report.rb:5:in `times'
    report.rb:6:in `block (3 levels) in <main>': unhandled exception

But it might be harder to correlate with other `p Thread.current` / `Thread#inspect` output.

----------------------------------------
Feature #14143: Thread.report_on_exception should be true by default
https://bugs.ruby-lang.org/issues/14143#change-68445

* Author: Eregon (Benoit Daloze)
* Status: Closed
* Priority: Normal
* Assignee: Eregon (Benoit Daloze)
* Target version: 2.5
----------------------------------------
Extracted from #6647 to focus on the default value now that the feature is implemented.

I strongly believe we should have Thread.report_on_exception = true by default.

It only adds some extra stderr output for apps which let threads die, which is very rarely intended.
If it is intended, then one can use Thread.current.report_on_exception = false
to clarify it's OK for that thread to die and the failure is handled by the app on Thread#join.

I enabled Thread.report_on_exception=true by default in ruby/spec, see https://github.com/ruby/spec/pull/517,
the only cases needing Thread.current.report_on_exception=false
are the specs testing report_on_exception itself and Thread#join/value/status/raise.

Enabling it for test-all shows a fair amount of extra output and failures, which I would bet some of them are bugs in the tests (I already found one, r60854 & r60870),
and other tests should simply more carefully test what they expect
(for instance assert_raise() inside the Thread just around the code raising an exception and join the Thread).

I am willing to help to reduce the extra output and failures in test-all,
but I would like a OK from Matz to try enabling Thread.report_on_exception by default.

Dear Matz, do you think it is reasonable to show exceptions killing threads on stderr by default,
instead of silently swallowing them until Thread#join ?
(if there is ever a Thread#join ..., often not or too late, when the rest of the application has crashed)

---Files--------------------------------
0001-Set-Thread.report_on_exception-true-by-default-to-re.patch (5.27 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>