diff options
author | jschuh@chromium.org <jschuh@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2009-10-19 18:10:49 +0000 |
---|---|---|
committer | jschuh@chromium.org <jschuh@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2009-10-19 18:10:49 +0000 |
commit | 5f4fa55598baf92785223debe7d3787c6b29cf3e (patch) | |
tree | 195a50f10733db124f17faa88d90ef743aae07c7 | |
parent | Allow the Breakpad Mac framework to be built without -fexceptions. (diff) | |
download | breakpad-5f4fa55598baf92785223debe7d3787c6b29cf3e.tar.xz |
Issue 35001: Fallback to Thread Context on bad Exception Context
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@418 4c0a9323-5329-0410-9bdc-e9ce6186880e
-rw-r--r-- | src/processor/minidump.cc | 9 | ||||
-rw-r--r-- | src/processor/minidump_processor.cc | 6 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/processor/minidump.cc b/src/processor/minidump.cc index 1a60d834..cd6da170 100644 --- a/src/processor/minidump.cc +++ b/src/processor/minidump.cc @@ -608,8 +608,9 @@ bool MinidumpContext::Read(u_int32_t expected_size) { } default: { - // Unknown context type - BPLOG(ERROR) << "MinidumpContext unknown context type " << + // Unknown context type - Don't log as an error yet. Let the + // caller work that out. + BPLOG(INFO) << "MinidumpContext unknown context type " << HexString(cpu_type); return false; break; @@ -2713,8 +2714,10 @@ MinidumpContext* MinidumpException::GetContext() { scoped_ptr<MinidumpContext> context(new MinidumpContext(minidump_)); + // Don't log as an error if we can still fall back on th thread's context + // (which must be possible if we got his far.) if (!context->Read(exception_.thread_context.data_size)) { - BPLOG(ERROR) << "MinidumpException cannot read context"; + BPLOG(INFO) << "MinidumpException cannot read context"; return NULL; } diff --git a/src/processor/minidump_processor.cc b/src/processor/minidump_processor.cc index 150887fb..f22320cb 100644 --- a/src/processor/minidump_processor.cc +++ b/src/processor/minidump_processor.cc @@ -169,8 +169,10 @@ ProcessResult MinidumpProcessor::Process( // of the thread's own context. For the crashed thread, the thread's // own context is the state inside the exception handler. Using it // would not result in the expected stack trace from the time of the - // crash. - context = exception->GetContext(); + // crash. If the exception context is invalid, however, we fall back + // on the thread context. + MinidumpContext * ctx = exception->GetContext(); + context = ctx ? ctx : thread->GetContext(); } } |