我正在使用make_fcontext
and jump_fcontext
from boost context 来实现用户空间上下文切换。我使用另一个库来捕获和报告应用程序崩溃。我发现这两个在 Windows 上不能一起工作。
崩溃库SetUnhandledExceptionFilter
在启动期间调用以设置异常处理程序以从进程中捕获未处理的异常。然后它处理异常记录以进行崩溃报告。这在大多数情况下都有效,并且我的应用程序中没有其他异常处理。
但是,当在 boost 上下文上运行的线程中发生崩溃(硬件/软件异常)时,我发现设置的异常处理程序没有被触发。似乎相反,启动的内核WerFault.exe
会在C:\Windows\System32\config\systemprofile\AppData\Local\CrashDumps
.
似乎在 boost 上下文上运行会影响内核查找或使用被取代的全局未处理异常过滤器的能力。在 boost 上下文中运行时,堆栈的底部如下所示:
...
my_context_function
make_fcontext+0x76
在普通 Windows 堆栈上运行时:
...
my_thread_start_function
KERNEL32!BaseThreadInitThunk+0x14
ntdll!RtlUserThreadStart+0x21
我想知道这里可能出了什么问题。我是 Windows 和 SEH 的新手,所以如果这个问题没有意义,请提前道歉。