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 + -
显示快捷键?