Complementing the standard Linux fault handler ("Segmentation fault. Core dumped.") with a custom handler that reports the crashing program state without a debugger is a useful endeavor in many situations. Unfortunately, writing such a fault handler correctly can be surprisingly hard and requires certain amount of black magic.
The proposed lecture is a tutorial that will demonstrate how to write such a handler, covering such topics as: getting program symbolic stack trace and registers and reporting them safely, the care and feeding of async signal POSIX handler functions, how to avoid implicit memory allocations and how to test for them, how to handle multi-threaded faults, the black magic involved with how Linux handles signal handlers, the unfortunate effect this has on obtaining a correct stack trace in case of a fault and how to overcome this limitation.