Make Breakpad's debug-exception-ignoring configurable. r=Nicolas Sylvain

git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@224 4c0a9323-5329-0410-9bdc-e9ce6186880e
This commit is contained in:
mmentovai 2007-10-18 20:54:20 +00:00
parent e47d3a6e36
commit f4021f0c68
2 changed files with 18 additions and 3 deletions

View file

@ -72,7 +72,8 @@ ExceptionHandler::ExceptionHandler(const wstring &dump_path,
requesting_thread_id_(0),
exception_info_(NULL),
assertion_(NULL),
handler_return_value_(false) {
handler_return_value_(false),
handle_debug_exceptions_(false) {
#if _MSC_VER >= 1400 // MSVC 2005/8
previous_iph_ = NULL;
#endif // _MSC_VER >= 1400
@ -274,10 +275,13 @@ LONG ExceptionHandler::HandleException(EXCEPTION_POINTERS *exinfo) {
// Ignore EXCEPTION_BREAKPOINT and EXCEPTION_SINGLE_STEP exceptions. This
// logic will short-circuit before calling WriteMinidumpOnHandlerThread,
// allowing something else to handle the breakpoint without incurring the
// overhead transitioning to and from the handler thread.
// overhead transitioning to and from the handler thread. This behavior
// can be overridden by calling ExceptionHandler::set_handle_debug_exceptions.
DWORD code = exinfo->ExceptionRecord->ExceptionCode;
LONG action;
if (code != EXCEPTION_BREAKPOINT && code != EXCEPTION_SINGLE_STEP &&
bool is_debug_exception = (code == EXCEPTION_BREAKPOINT) ||
(code == EXCEPTION_SINGLE_STEP);
if ((!is_debug_exception || current_handler->get_handle_debug_exceptions()) &&
current_handler->WriteMinidumpOnHandlerThread(exinfo, NULL)) {
// The handler fully handled the exception. Returning
// EXCEPTION_EXECUTE_HANDLER indicates this to the system, and usually