exception_handler.h
来自「SumatraPDF是一款小型开源的pdf阅读工具。虽然玲珑小巧(只有800多K」· C头文件 代码 · 共 349 行 · 第 1/2 页
H
349 行
// dynamically. typedef BOOL (WINAPI *MiniDumpWriteDump_type)( HANDLE hProcess, DWORD dwPid, HANDLE hFile, MINIDUMP_TYPE DumpType, CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam); // Runs the main loop for the exception handler thread. static DWORD WINAPI ExceptionHandlerThreadMain(void *lpParameter); // Called on the exception thread when an unhandled exception occurs. // Signals the exception handler thread to handle the exception. static LONG WINAPI HandleException(EXCEPTION_POINTERS *exinfo);#if _MSC_VER >= 1400 // MSVC 2005/8 // This function will be called by some CRT functions when they detect // that they were passed an invalid parameter. Note that in _DEBUG builds, // the CRT may display an assertion dialog before calling this function, // and the function will not be called unless the assertion dialog is // dismissed by clicking "Ignore." static void HandleInvalidParameter(const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t reserved);#endif // _MSC_VER >= 1400 // This function will be called by the CRT when a pure virtual // function is called. static void HandlePureVirtualCall(); // This is called on the exception thread or on another thread that // the user wishes to produce a dump from. It calls // WriteMinidumpWithException on the handler thread, avoiding stack // overflows and inconsistent dumps due to writing the dump from // the exception thread. If the dump is requested as a result of an // exception, exinfo contains exception information, otherwise, it // is NULL. If the dump is requested as a result of an assertion // (such as an invalid parameter being passed to a CRT function), // assertion contains data about the assertion, otherwise, it is NULL. bool WriteMinidumpOnHandlerThread(EXCEPTION_POINTERS *exinfo, MDRawAssertionInfo *assertion); // This function does the actual writing of a minidump. It is called // on the handler thread. requesting_thread_id is the ID of the thread // that requested the dump. If the dump is requested as a result of // an exception, exinfo contains exception information, otherwise, // it is NULL. bool WriteMinidumpWithException(DWORD requesting_thread_id, EXCEPTION_POINTERS *exinfo, MDRawAssertionInfo *assertion); // Generates a new ID and stores it in next_minidump_id_, and stores the // path of the next minidump to be written in next_minidump_path_. void UpdateNextID(); FilterCallback filter_; MinidumpCallback callback_; void *callback_context_; // The directory in which a minidump will be written, set by the dump_path // argument to the constructor, or set_dump_path. wstring dump_path_; // The basename of the next minidump to be written, without the extension. wstring next_minidump_id_; // The full pathname of the next minidump to be written, including the file // extension. wstring next_minidump_path_; // Pointers to C-string representations of the above. These are set when // the above wstring versions are set in order to avoid calling c_str during // an exception, as c_str may attempt to allocate heap memory. These // pointers are not owned by the ExceptionHandler object, but their lifetimes // should be equivalent to the lifetimes of the associated wstring, provided // that the wstrings are not altered. const wchar_t *dump_path_c_; const wchar_t *next_minidump_id_c_; const wchar_t *next_minidump_path_c_; HMODULE dbghelp_module_; MiniDumpWriteDump_type minidump_write_dump_; // Tracks the handler types that were installed according to the // handler_types constructor argument. int handler_types_; // When installed_handler_ is true, previous_filter_ is the unhandled // exception filter that was set prior to installing ExceptionHandler as // the unhandled exception filter and pointing it to |this|. NULL indicates // that there is no previous unhandled exception filter. LPTOP_LEVEL_EXCEPTION_FILTER previous_filter_;#if _MSC_VER >= 1400 // MSVC 2005/8 // Beginning in VC 8, the CRT provides an invalid parameter handler that will // be called when some CRT functions are passed invalid parameters. In // earlier CRTs, the same conditions would cause unexpected behavior or // crashes. _invalid_parameter_handler previous_iph_;#endif // _MSC_VER >= 1400 // The CRT allows you to override the default handler for pure // virtual function calls. _purecall_handler previous_pch_; // The exception handler thread. HANDLE handler_thread_; // The critical section enforcing the requirement that only one exception be // handled by a handler at a time. CRITICAL_SECTION handler_critical_section_; // Semaphores used to move exception handling between the exception thread // and the handler thread. handler_start_semaphore_ is signalled by the // exception thread to wake up the handler thread when an exception occurs. // handler_finish_semaphore_ is signalled by the handler thread to wake up // the exception thread when handling is complete. HANDLE handler_start_semaphore_; HANDLE handler_finish_semaphore_; // The next 2 fields contain data passed from the requesting thread to // the handler thread. // The thread ID of the thread requesting the dump (either the exception // thread or any other thread that called WriteMinidump directly). DWORD requesting_thread_id_; // The exception info passed to the exception handler on the exception // thread, if an exception occurred. NULL for user-requested dumps. EXCEPTION_POINTERS *exception_info_; // If the handler is invoked due to an assertion, this will contain a // pointer to the assertion information. It is NULL at other times. MDRawAssertionInfo *assertion_; // The return value of the handler, passed from the handler thread back to // the requesting thread. bool handler_return_value_; // A stack of ExceptionHandler objects that have installed unhandled // exception filters. This vector is used by HandleException to determine // which ExceptionHandler object to route an exception to. When an // ExceptionHandler is created with install_handler true, it will append // itself to this list. static vector<ExceptionHandler *> *handler_stack_; // The index of the ExceptionHandler in handler_stack_ that will handle the // next exception. Note that 0 means the last entry in handler_stack_, 1 // means the next-to-last entry, and so on. This is used by HandleException // to support multiple stacked Breakpad handlers. static LONG handler_stack_index_; // handler_stack_critical_section_ guards operations on handler_stack_ and // handler_stack_index_. static CRITICAL_SECTION handler_stack_critical_section_; // True when handler_stack_critical_section_ has been initialized. static bool handler_stack_critical_section_initialized_; // disallow copy ctor and operator= explicit ExceptionHandler(const ExceptionHandler &); void operator=(const ExceptionHandler &);};} // namespace google_breakpad#pragma warning( pop )#endif // CLIENT_WINDOWS_HANDLER_EXCEPTION_HANDLER_H__
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?