Not really, no.
For non-Windows builds, Hercules has and "abend" signal handler in place that is designed to intercept "abend" type signals (SIGBUS, SIGFPE, SIGILL, SIGSEGV, etc) which indicate a programming error. That is, if any of these signals occur, it means Hercules is sick, having done something "wrong" programmatically-speaking.
Such errors normally immediately terminate (crash) the process in question, but if you have a "signal handler" in place, it can intercept such error conditions instead and decide whether the error, whatever it is, is serious enough to terminate the process or whether the error can possibly be recovered from such that the process can continue running.
This "abend handler" function in Hercules is the "sigabend_handler" function in source file 'machchk.c'. It is designed to catch abend signals, and if it occurs in one of the CPU threads, it simply terminates that CPU thread and takes that CPU offline, and presents the guest (z/OS, z/VM, etc) a "Machine Check" interrupt. This allows Hercules (and thus the guest!) to continue running (rather than crash), letting you do a graceful shutdown of your guest thereby preventing damage to your dasd, etc.
There is also a "watchdog_thread" in source file 'impl.c' that monitors all CPU threads to make sure they are still executing instructions. If any one of them fails to increment their "regs->instcount" value within a certain length of time (currently 20 seconds?? minutes??), then it presumes there's a bug in Hercules that is causing that CPU thread to get stuck in a loop, and sends an abend signal for that thread (which the "sigabend_handler" function in 'machchk.c' then handles my generating a Machine Check interruption as previously explained).
Post by Mike Stramba ***@gmail.com [hercules-390]
It looks like just what I need for single stepping through code.
Nope. Has nothing to do with stepping through code. Sorry.
"Fish" (David B. Trout)
Software Development Laboratories