Closed alvinhochun closed 2 years ago
RaiseFailFastException
specifically skips any exception handlers. So I see the following options (from simplest to hardest):
qt_message_fatal
, where one could just raise a normal exception which would be trapped by ExcHndl.catchsegv -m krita ...
) -- if performance is acceptable, then you could have setup krita to always be run inside catchsegv (via the shortcuts, or through a launcher.) RaiseFailFastException
and report the exception. In one way, this is less disruptive, but potentially more brittle, as these code patching mechanisms are the same used by malware, hence are constantly getting constrained.I hope this helps.
Thanks for the suggestions. Given these options I think I will patch Qt's behaviour for now and consider moving to a catchsegv-like approach in the future. I've always wanted to implement a better UI on crash, so maybe I will try to make a fancier GUI version of it (not now though 😆 ). I tried catchsegv on Krita and didn't see any slowdown on initialization... but frankly Krita on Windows already starts up way slower than on Linux (10 seconds vs 3 seconds).
Side note: When I tested with catchsegv, it didn't seem to be able to produce line number info (exchndl outputs them fine). I have split debug file linked with gnu-debuglink, maybe that is broken with catchsegv?
When I tested with catchsegv, it didn't seem to be able to produce line number info (exchndl outputs them fine). I have split debug file linked with gnu-debuglink, maybe that is broken with catchsegv?
It should work.
No further action planned from DrMinGW side, so closing.
Qt decided that its fatal error handler should call
RaiseFailFastException
instead of justabort
(context). This issue also touches on the exceptional behaviour ofabort
which Qt is trying to prevent.However,
exchndl
is apparently unable to dump the stack trace when the Qt fatal error handler is called. Are there any tricks to makeexchndl
work for this case?