From 7642cfc90fc9c3ebfd8e3b5041915705c93b5cf0 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Thu, 26 Feb 2015 10:56:09 +0000 Subject: Change how we report exceptions to the debugger. This is only a refactoring/cleanup. Bug fixes with respect to catch location, and more cleanups will follow. Change-Id: I30d3c6260b0c8f8115a811621397225b88f2063a --- runtime/quick_exception_handler.cc | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) (limited to 'runtime/quick_exception_handler.cc') 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); } } -- cgit v1.2.3-59-g8ed1b