I have an application which implements crash handling and reporting using Google Crashpad and Sentry.
The application implements a watchdog which checks for freezes on critical threads, and aborts the application if it detects such a case.
However, when the "crash" gets reported to Sentry, the thread that "crashed" is, of course, the watchdog thread and not the actual thread which was frozen.
I need to trigger the frozen thread to abort to enable Sentry to correctly group related freezes together for analysis.
On POSIX systems, I can do this trivially:
pthread_kill(_threadHandle, SIGABRT);
On Windows, however, there doesn't seem to be an equivalent.
TerminateThread
cleanly kills the thread without triggering an abort, which is not suitable.
I believe that what I want to do is accomplishable with SuspendThread
, GetThreadContext
and ResumeThread
, but how do I do this without significantly corrupting the call stack (which needs to be intact for diagnosis)?
You can set the trap flag to cause an
EXCEPTION_SINGLE_STEP
.