On 2024-05-07 21:05, Turtle Creek Software wrote:
TurtleSoft posted on the Interest list earlier about problems we had
with exception handling, and Thiago suggested I post here.
Since the early 90s, our C++ code has had about 10,000 sanity checks
which give an error message with source file & line number, then throw
an exception. There is a try/catch block in the event loop which
swallows them. That way users can continue work. Only a small % of
the checks are ever called, but it makes bugs very easy to fix when
users or testers report them. Our app almost never crashes thanks to
the many checks. We learned the system from Bill Atkinson, author of
MacPaint and HyperCard.
The sanity system started in Metrowerks PowerPlant, then worked OK in
Carbon, Cocoa, and MFC. For Qt we wrapped QApplication::notify with
try/catch. It worked for most checks on Macintel and Wintel, but
failed for Mac ARM. After the message, instant termination. Users lose
their work, testers must start over.
Turns out that Qt intentionally does not support exceptions thrown
through GUI classes, and the early success was just an accident.
Exceptions are an "exceptionally" handy C++ feature. Instant "beam me
up, Scotty". It is too bad that Qt does not support them fully, and
I'd like to change that. So I would be willing to work on getting GUI
classes like QWidget able to pass exceptions, if it means we can get
our old sanity-checking back. It would be our open-source contribution.
I realize this is a huge, fundamental change to Qt. It would need to
be a multi-year project, done in tiny bits so as not to break things.
Anyhow, my time is limited.
Getting exceptions through signals/slots is lower priority. We don't
use those much and probably could bypass them somehow. We just want a
reliable path to the event loop.
Personally, I've programmed since punch card days in 1966 or so. I've
designed and shipped several apps for PCs. I've refactored and rebuilt
all sorts of C++ code from other people, and could do this work
politely and competently.
Does this seem reasonable?
Dennis Kolva
Programming Director
TurtleSoft.com
Hi, interesting idea! However such a fundamental replumbing of Qt might
be a Herculean task.
I assume you've already looked a QException? It's a part of Qt
Concurrent and requires extra, receiving thread for the catching so it
might not fit the bill.
Maybe instead of using vanilla throws and catches, try implementing a
qThrow function that uses std::basic_stacktrace
https://en.cppreference.com/w/cpp/utility/basic_stacktrace to do your
own portable, generic stack unwinding?
Just some thoughts :-) Rgrds Henry
--
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development