I might figure this out when I have free time this weekend... but if anyone can help me with this:
I noticed that when using the dynamic core, throwing a C++ exception doesn't always work, it's like the exception fails to make it up the call stack where try...catch is waiting and the C++ runtime acts as if nobody caught it. The best example was last night when I changed the INT 19h, keyboard, and port 92h reset emulation to throw a C++ exception to force unwinding up the stack back to main. If I was running the dynamic core, the exception never made it back up to the main function and DOSBox aborted with a message about an uncaught exception. When using any other core the exception worked reliably.
Related to that, is that whenever the dynamic core is involved, GDB is not able to do a proper stack trace beyond the point where the dynamically generated code called the callback function. I find it mildly annoying when something goes wrong and I need to determine how it got there.
Somehow, I think the failure for C++ exceptions to make it is related to the inability of GDB (and the C++ runtime) to trace the stack properly through the dynamic core. If the dynamic core could be updated to generate a stack frame that GDB and C++ runtime recognize, that might resolve these issues.
DOSBox-X project: more emulation better accuracy.
DOSLIB and DOSLIB2: Learn how to tinker and hack hardware and software from DOS.