Background
- I have an application with a Poof-Crash[1]. I'm fairly certain it is due to a blown stack.
- The application is Multi-Threaded.
- I am compiling with "
Enable C++ Exceptions: Yes With SEH Exceptions (/EHa)
". - I have written an SE Translator function and called
_set_se_translator()
with it. - I have written functions for and setup
set_terminate()
andset_unexpected()
. - To get the Stack Overflow, I must run in release mode, under heavy load, for several days. Running under a debugger is not an option as the application can't perform fast enough to achieve the runtime necessary to see the issue.
- I can simulate the issue by adding infinite recursion on execution of one of the functions, and thus test the catching of the
EXCEPTION_STACK_OVERFLOW
exception. - I have WinDBG setup as the crash dump program, and get good information for all other crash issues but not this one. The crash dump will only contain one thread, which is 'Sleep()'ing. All other threads have exited.
The Question
None of the things I've tried has resulted in picking up the EXCEPTION_STACK_OVERFLOW
exception.
Does anyone know how to guarantee getting a a chance at this exception during runtime in release mode?
Definitions
- Poof-Crash: The application crashes by going "poof" and disappearing without a trace.
(Considering the name of this site, I'm kind of surprised this question isn't on here already!)
Notes
- An answer was posted briefly about adjusting the stack size to potentially force the issue sooner and allow catching it with a debugger. That is a clever thought, but unfortunately, I don't believe it would help. The issue is likely caused by a corner case leading to infinite recursion. Shortening the stack would not expose the issue any sooner and would likely cause an unrelated crash in validly deep code. Nice idea though, and thanks for posting it, even if you did remove it.