C++ 如何获取向未处理的ExceptionFilter或VectoredExceptionHandler抛出异常的线程句柄?
假设您有以下全局异常处理程序/筛选器:C++ 如何获取向未处理的ExceptionFilter或VectoredExceptionHandler抛出异常的线程句柄?,c++,multithreading,winapi,visual-c++,uncaughtexceptionhandler,C++,Multithreading,Winapi,Visual C++,Uncaughtexceptionhandler,假设您有以下全局异常处理程序/筛选器: LONG WINAPI UnhandledExceptionFilter(PEXCEPTION_POINTERS exception) { return EXCEPTION_CONTINUE_SEARCH; } LONG WINAPI VectoredExceptionHandler(PEXCEPTION_POINTERS exception) { return EXCEPTION_CONTINUE_SEARCH; } 调用时使用: S
LONG WINAPI UnhandledExceptionFilter(PEXCEPTION_POINTERS exception)
{
return EXCEPTION_CONTINUE_SEARCH;
}
LONG WINAPI VectoredExceptionHandler(PEXCEPTION_POINTERS exception)
{
return EXCEPTION_CONTINUE_SEARCH;
}
调用时使用:
SetUnhandledExceptionFilter(UnhandledExceptionFilter);
AddVectoredExceptionHandler(1, VectoredExceptionHandler);
我可能有一个单独的线程将异常抛出回用于设置筛选器或处理程序的主线程…但是在
UnhandledExceptionFilter
和VectoredExceptionHandler
的逻辑中,如何将句柄
获取到引发异常的线程?回调是在发生异常的同一线程上进行的,因此只需使用GetCurrentThreadId获取句柄。“将异常抛出主线程”毫无意义,异常不能跨线程跳转。@HansPassant为什么在全局异常发生后堆栈会部分展开自身,特别是在单独的线程抛出异常时?(看)@HansPassant我以前试过问你这个问题。这是一个与这个问题无关的问题,但它很重要。你想让我开始一个新问题吗?因为我在上一次会议上得到的答案是不够的,并且不会导致我产生一个真正的堆栈跟踪程序:(我不知道该往哪里转。我在这里读了很多你的答案,这些反驳了堆栈上被否决和接受的答案,尤其是在SEH和C++异常处理的情况下……汉斯潘,看看你是否愿意提供你的两分钱。