diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2015-03-04 11:13:16 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2015-03-04 11:13:17 +0000 |
commit | 3d7d2af4c6502b771b032ee9bf3ab30e78f9c60d (patch) | |
tree | cc15416fa8208661fe98a19055fa4c98010a0e53 /runtime/quick_exception_handler.cc | |
parent | 87896b3a1f97c815fe02c7490c1f27951c58bbbf (diff) | |
parent | 7642cfc90fc9c3ebfd8e3b5041915705c93b5cf0 (diff) |
Merge "Change how we report exceptions to the debugger."
Diffstat (limited to 'runtime/quick_exception_handler.cc')
-rw-r--r-- | runtime/quick_exception_handler.cc | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/runtime/quick_exception_handler.cc b/runtime/quick_exception_handler.cc index 7bdf652355..1ddb761142 100644 --- a/runtime/quick_exception_handler.cc +++ b/runtime/quick_exception_handler.cc @@ -115,8 +115,7 @@ class CatchBlockStackVisitor FINAL : public StackVisitor { }; void QuickExceptionHandler::FindCatch(const ThrowLocation& throw_location, - mirror::Throwable* exception, - bool is_exception_reported) { + mirror::Throwable* exception) { DCHECK(!is_deoptimization_); if (kDebugExceptionDelivery) { mirror::String* msg = exception->GetDetailMessage(); @@ -147,23 +146,14 @@ void QuickExceptionHandler::FindCatch(const ThrowLocation& throw_location, } else { // Put exception back in root set with clear throw location. self_->SetException(ThrowLocation(), exception_ref.Get()); - self_->SetExceptionReportedToInstrumentation(is_exception_reported); } // The debugger may suspend this thread and walk its stack. Let's do this before popping // instrumentation frames. - if (!is_exception_reported) { - instrumentation::Instrumentation* instrumentation = Runtime::Current()->GetInstrumentation(); + instrumentation::Instrumentation* instrumentation = Runtime::Current()->GetInstrumentation(); + if (instrumentation->HasExceptionCaughtListeners() + && self_->IsExceptionThrownByCurrentMethod(exception)) { instrumentation->ExceptionCaughtEvent(self_, throw_location, handler_method_, handler_dex_pc_, exception_ref.Get()); - // We're not catching this exception but let's remind we already reported the exception above - // to avoid reporting it twice. - self_->SetExceptionReportedToInstrumentation(true); - } - bool caught_exception = (handler_method_ != nullptr && handler_dex_pc_ != DexFile::kDexNoIndex); - if (caught_exception) { - // We're catching this exception so we finish reporting it. We do it here to avoid doing it - // in the compiled code. - self_->SetExceptionReportedToInstrumentation(false); } } |