Merge pull request #2978 from RosettaCommons/roccomoretti/crash_report
(Client-side code for) Crash Reporter System for Rosetta
This PR merges a bunch of code which improves Rosetta's crash/error reporting handling.
Some highlights
* Backtrace printing is moved from stdout to another file (ROSETTA_CRASH.log).
* This makes the tracer-outputted error message cleaner to see (not hidden behind backtrace gobbledygook), and sets us up to potentially collect the crash log information later.
* This can be turned off by the NOCRASHREPORT compiler define, which is enabled in PyRosetta and BOINC builds.
* Normal runs install a signal handler which should give better diagnostics in cases of segfaults and the like.
* the `-run:nosignal` command line option (or the NOCRASHREPORT define) should turn this off, in case your debugger gives you issues with it.
* New `user_fixable_issue_exit()` and `user_fixable_issue_assert()` macros (parallel to the `utility_exit_with_message()` macro) are provided which will cause an exit without printing the backtrace/creating the crash log.
* Intended only for cases where you *know* that the user made a mistake, and can provide an error message which tells them exactly how to fix it. -- Not for cases where you get a residue number zero condition six levels deep and only infer that the user *probably* made a mistake "somewhere" in their setup.
* There are some changes to the exception hierarchy to support this.
Future directions are to build a system which can collect this info and summarize it (hopefully pointing out where common causes of errors in Rosetta are) and to clean up/improve our error handling and error messages so they're less obtuse.