Revert "Reland "Update instrumentation support for non-java debuggable runtimes""

This reverts commit 322ef183e602f304e3d093c083490dd2e766b254.

Reason for revert: Failures on art-tracing:
https://android-build.googleplex.com/builds/submitted/9062353/art-tracing/latest/view/logs/build_error.log

Change-Id: I59f39e2833b63be15e7507a53ddb5ff6a30d55f3
diff --git a/compiler/jit/jit_compiler.cc b/compiler/jit/jit_compiler.cc
index f12a3ad..e578d3b 100644
--- a/compiler/jit/jit_compiler.cc
+++ b/compiler/jit/jit_compiler.cc
@@ -41,10 +41,6 @@
   return new JitCompiler();
 }
 
-void JitCompiler::SetDebuggableCompilerOption(bool value) {
-  compiler_options_->SetDebuggable(value);
-}
-
 void JitCompiler::ParseCompilerOptions() {
   // Special case max code units for inlining, whose default is "unset" (implictly
   // meaning no limit). Do this before parsing the actual passed options.
diff --git a/compiler/jit/jit_compiler.h b/compiler/jit/jit_compiler.h
index 8cd6b5a..8e9966d 100644
--- a/compiler/jit/jit_compiler.h
+++ b/compiler/jit/jit_compiler.h
@@ -50,8 +50,6 @@
 
   bool IsBaselineCompiler() const override;
 
-  void SetDebuggableCompilerOption(bool val) override;
-
   bool GenerateDebugInfo() override;
 
   void ParseCompilerOptions() override;
diff --git a/openjdkjvmti/OpenjdkJvmTi.cc b/openjdkjvmti/OpenjdkJvmTi.cc
index d7db3d2..09900e1 100644
--- a/openjdkjvmti/OpenjdkJvmTi.cc
+++ b/openjdkjvmti/OpenjdkJvmTi.cc
@@ -89,6 +89,12 @@
     }                           \
   } while (false)
 
+// Returns whether we are able to use all jvmti features.
+static bool IsFullJvmtiAvailable() {
+  art::Runtime* runtime = art::Runtime::Current();
+  return runtime->GetInstrumentation()->IsForcedInterpretOnly() || runtime->IsJavaDebuggable();
+}
+
 class JvmtiFunctions {
  private:
   static jvmtiError getEnvironmentError(jvmtiEnv* env) {
@@ -1468,7 +1474,13 @@
   FieldUtil::Register(gEventHandler);
   BreakpointUtil::Register(gEventHandler);
   Transformer::Register(gEventHandler);
-  gDeoptManager->FinishSetup();
+
+  {
+    // Make sure we can deopt anything we need to.
+    art::ScopedSuspendAll ssa(__FUNCTION__);
+    gDeoptManager->FinishSetup();
+  }
+
   runtime->GetJavaVM()->AddEnvironmentHook(GetEnvHandler);
 
   return true;
diff --git a/openjdkjvmti/art_jvmti.h b/openjdkjvmti/art_jvmti.h
index bc965a2..cdda09b 100644
--- a/openjdkjvmti/art_jvmti.h
+++ b/openjdkjvmti/art_jvmti.h
@@ -47,11 +47,9 @@
 #include "base/strlcpy.h"
 #include "base/mutex.h"
 #include "events.h"
-#include "instrumentation.h"
 #include "jni/java_vm_ext.h"
 #include "jni/jni_env_ext.h"
 #include "jvmti.h"
-#include "runtime.h"
 #include "ti_breakpoint.h"
 
 namespace art {
@@ -71,13 +69,6 @@
 // This is the value 0x70010200.
 static constexpr jint kArtTiVersion = JVMTI_VERSION_1_2 | 0x40000000;
 
-// Returns whether we are able to use all jvmti features.
-static inline bool IsFullJvmtiAvailable() {
-  art::Runtime* runtime = art::Runtime::Current();
-  return runtime->GetInstrumentation()->IsForcedInterpretOnly() ||
-         runtime->IsJavaDebuggableAtInit();
-}
-
 // A structure that is a jvmtiEnv with additional information for the runtime.
 struct ArtJvmTiEnv : public jvmtiEnv {
   art::JavaVMExt* art_vm;
diff --git a/openjdkjvmti/deopt_manager.cc b/openjdkjvmti/deopt_manager.cc
index 129aa0f..03042ec 100644
--- a/openjdkjvmti/deopt_manager.cc
+++ b/openjdkjvmti/deopt_manager.cc
@@ -47,12 +47,10 @@
 #include "gc/scoped_gc_critical_section.h"
 #include "instrumentation.h"
 #include "jit/jit.h"
-#include "jit/jit_code_cache.h"
 #include "jni/jni_internal.h"
 #include "mirror/class-inl.h"
 #include "mirror/object_array-inl.h"
 #include "nativehelper/scoped_local_ref.h"
-#include "oat_file_manager.h"
 #include "read_barrier_config.h"
 #include "runtime_callbacks.h"
 #include "scoped_thread_state_change-inl.h"
@@ -63,8 +61,6 @@
 
 namespace openjdkjvmti {
 
-static constexpr const char* kInstrumentationKey = "JVMTI_DeoptRequester";
-
 // We could make this much more selective in the future so we only return true when we
 // actually care about the method at this time (ie active frames had locals changed). For now we
 // just assume that if anything has changed any frame's locals we care about all methods. This only
@@ -95,6 +91,14 @@
   callbacks->AddMethodInspectionCallback(&inspection_callback_);
 }
 
+void DeoptManager::Shutdown() {
+  art::ScopedThreadStateChange stsc(art::Thread::Current(),
+                                    art::ThreadState::kWaitingForDebuggerToAttach);
+  art::ScopedSuspendAll ssa("remove method Inspection Callback");
+  art::RuntimeCallbacks* callbacks = art::Runtime::Current()->GetRuntimeCallbacks();
+  callbacks->RemoveMethodInspectionCallback(&inspection_callback_);
+}
+
 void DeoptManager::DumpDeoptInfo(art::Thread* self, std::ostream& stream) {
   art::ScopedObjectAccess soa(self);
   art::MutexLock mutll(self, *art::Locks::thread_list_lock_);
@@ -144,59 +148,48 @@
 
 void DeoptManager::FinishSetup() {
   art::Thread* self = art::Thread::Current();
+  art::MutexLock mu(self, deoptimization_status_lock_);
+
   art::Runtime* runtime = art::Runtime::Current();
-  if (runtime->IsJavaDebuggable()) {
-    return;
-  }
-
-  // See if we can enable all JVMTI functions.
-  if (PhaseUtil::GetPhaseUnchecked() == JVMTI_PHASE_ONLOAD) {
-    // We are still early enough to change the compiler options and get full JVMTI support.
-    LOG(INFO) << "Openjdkjvmti plugin loaded on a non-debuggable runtime. Changing runtime to "
-              << "debuggable state. Please pass '--debuggable' to dex2oat and "
-              << "'-Xcompiler-option --debuggable' to dalvikvm in the future.";
-    DCHECK(runtime->GetJit() == nullptr) << "Jit should not be running yet!";
-    art::ScopedSuspendAll ssa(__FUNCTION__);
-    // TODO check if we need to hold deoptimization_status_lock_ here.
-    art::MutexLock mu(self, deoptimization_status_lock_);
-    runtime->AddCompilerOption("--debuggable");
-    runtime->SetRuntimeDebugState(art::Runtime::RuntimeDebugState::kJavaDebuggableAtInit);
+  // See if we need to do anything.
+  if (!runtime->IsJavaDebuggable()) {
+    // See if we can enable all JVMTI functions. If this is false, only kArtTiVersion agents can be
+    // retrieved and they will all be best-effort.
+    if (PhaseUtil::GetPhaseUnchecked() == JVMTI_PHASE_ONLOAD) {
+      // We are still early enough to change the compiler options and get full JVMTI support.
+      LOG(INFO) << "Openjdkjvmti plugin loaded on a non-debuggable runtime. Changing runtime to "
+                << "debuggable state. Please pass '--debuggable' to dex2oat and "
+                << "'-Xcompiler-option --debuggable' to dalvikvm in the future.";
+      DCHECK(runtime->GetJit() == nullptr) << "Jit should not be running yet!";
+      runtime->AddCompilerOption("--debuggable");
+      runtime->SetJavaDebuggable(true);
+    } else {
+      LOG(WARNING) << "Openjdkjvmti plugin was loaded on a non-debuggable Runtime. Plugin was "
+                   << "loaded too late to change runtime state to DEBUGGABLE. Only kArtTiVersion "
+                   << "(0x" << std::hex << kArtTiVersion << ") environments are available. Some "
+                   << "functionality might not work properly.";
+      if (runtime->GetJit() == nullptr &&
+          runtime->GetJITOptions()->UseJitCompilation() &&
+          !runtime->GetInstrumentation()->IsForcedInterpretOnly()) {
+        // If we don't have a jit we should try to start the jit for performance reasons. We only
+        // need to do this for late attach on non-debuggable processes because for debuggable
+        // processes we already rely on jit and we cannot force this jit to start if we are still in
+        // OnLoad since the runtime hasn't started up sufficiently. This is only expected to happen
+        // on userdebug/eng builds.
+        LOG(INFO) << "Attempting to start jit for openjdkjvmti plugin.";
+        // Note: use rwx allowed = true, because if this is the system server, we will not be
+        //       allowed to allocate any JIT code cache, anyways.
+        runtime->CreateJitCodeCache(/*rwx_memory_allowed=*/true);
+        runtime->CreateJit();
+        if (runtime->GetJit() == nullptr) {
+          LOG(WARNING) << "Could not start jit for openjdkjvmti plugin. This process might be "
+                       << "quite slow as it is running entirely in the interpreter. Try running "
+                       << "'setenforce 0' and restarting this process.";
+        }
+      }
+    }
     runtime->DeoptimizeBootImage();
-    return;
   }
-
-  // Runtime has already started in non-debuggable mode. Only kArtTiVersion agents can be
-  // retrieved and they will all be best-effort.
-  LOG(WARNING) << "Openjdkjvmti plugin was loaded on a non-debuggable Runtime. Plugin was "
-               << "loaded too late to change runtime state to support all capabilities. Only "
-               << "kArtTiVersion (0x" << std::hex << kArtTiVersion << ") environments are "
-               << "available. Some functionality might not work properly.";
-
-  // Transition the runtime to debuggable:
-  // 1. Wait for any background verification tasks to finish. We don't support
-  // background verification after moving to debuggable state.
-  runtime->GetOatFileManager().WaitForBackgroundVerificationTasksToFinish();
-
-  // Do the transition in ScopedJITSuspend, so we don't start any JIT compilations
-  // before the transition to debuggable is finished.
-  art::jit::ScopedJitSuspend suspend_jit;
-  art::ScopedSuspendAll ssa(__FUNCTION__);
-
-  // 2. Discard any JITed code that was generated before, since they would be
-  // compiled without debug support.
-  art::jit::Jit* jit = runtime->GetJit();
-  if (jit != nullptr) {
-    jit->GetCodeCache()->InvalidateAllCompiledCode();
-    jit->GetCodeCache()->TransitionToDebuggable();
-    jit->GetJitCompiler()->SetDebuggableCompilerOption(true);
-  }
-
-  // 3. Change the state to JavaDebuggable, so that debug features can be
-  // enabled from now on.
-  runtime->SetRuntimeDebugState(art::Runtime::RuntimeDebugState::kJavaDebuggable);
-
-  // 4. Update all entrypoints to avoid using any AOT code.
-  runtime->GetInstrumentation()->UpdateEntrypointsForDebuggable();
 }
 
 bool DeoptManager::MethodHasBreakpoints(art::ArtMethod* method) {
@@ -369,39 +362,6 @@
   }
 }
 
-void DeoptManager::Shutdown() {
-  art::Thread* self = art::Thread::Current();
-  art::Runtime* runtime = art::Runtime::Current();
-
-  // Do the transition in ScopedJITSuspend, so we don't start any JIT compilations
-  // before the transition to debuggable is finished.
-  art::jit::ScopedJitSuspend suspend_jit;
-
-  art::ScopedThreadStateChange sts(self, art::ThreadState::kSuspended);
-  deoptimization_status_lock_.ExclusiveLock(self);
-  ScopedDeoptimizationContext sdc(self, this);
-
-  art::jit::Jit* jit = runtime->GetJit();
-  if (jit != nullptr && !runtime->IsShuttingDown(self)) {
-    jit->GetCodeCache()->InvalidateAllCompiledCode();
-    jit->GetCodeCache()->TransitionToDebuggable();
-    jit->GetJitCompiler()->SetDebuggableCompilerOption(false);
-  }
-
-  art::RuntimeCallbacks* callbacks = runtime->GetRuntimeCallbacks();
-  callbacks->RemoveMethodInspectionCallback(&inspection_callback_);
-  if (!runtime->IsJavaDebuggableAtInit()) {
-    runtime->SetRuntimeDebugState(art::Runtime::RuntimeDebugState::kNonJavaDebuggable);
-  }
-  // TODO(mythria): DeoptManager should use only one key. Merge
-  // kInstrumentationKey and kDeoptManagerInstrumentationKey.
-  if (!runtime->IsShuttingDown(self)) {
-    art::Runtime::Current()->GetInstrumentation()->DisableDeoptimization(kInstrumentationKey);
-    art::Runtime::Current()->GetInstrumentation()->DisableDeoptimization(
-        kDeoptManagerInstrumentationKey);
-  }
-}
-
 void DeoptManager::RemoveDeoptimizeAllMethodsLocked(art::Thread* self) {
   DCHECK_GT(global_deopt_count_, 0u) << "Request to remove non-existent global deoptimization!";
   global_deopt_count_--;
@@ -475,6 +435,7 @@
   return OK;
 }
 
+static constexpr const char* kInstrumentationKey = "JVMTI_DeoptRequester";
 
 void DeoptManager::RemoveDeoptimizationRequester() {
   art::Thread* self = art::Thread::Current();
diff --git a/openjdkjvmti/deopt_manager.h b/openjdkjvmti/deopt_manager.h
index e9b91de..9278bf1 100644
--- a/openjdkjvmti/deopt_manager.h
+++ b/openjdkjvmti/deopt_manager.h
@@ -110,7 +110,9 @@
       REQUIRES_SHARED(art::Locks::mutator_lock_);
   void DeoptimizeAllThreads() REQUIRES_SHARED(art::Locks::mutator_lock_);
 
-  void FinishSetup() REQUIRES(!deoptimization_status_lock_, !art::Roles::uninterruptible_);
+  void FinishSetup()
+      REQUIRES(!deoptimization_status_lock_, !art::Roles::uninterruptible_)
+      REQUIRES(art::Locks::mutator_lock_);
 
   static DeoptManager* Get();
 
diff --git a/openjdkjvmti/ti_extension.cc b/openjdkjvmti/ti_extension.cc
index 02dc9f1..10ea43a 100644
--- a/openjdkjvmti/ti_extension.cc
+++ b/openjdkjvmti/ti_extension.cc
@@ -398,7 +398,8 @@
 
   // These require index-ids and debuggable to function
   art::Runtime* runtime = art::Runtime::Current();
-  if (runtime->GetJniIdType() == art::JniIdType::kIndices && IsFullJvmtiAvailable()) {
+  if (runtime->GetJniIdType() == art::JniIdType::kIndices &&
+      (runtime->GetInstrumentation()->IsForcedInterpretOnly() || runtime->IsJavaDebuggable())) {
     // IsStructurallyModifiableClass
     error = add_extension(
         reinterpret_cast<jvmtiExtensionFunction>(Redefiner::IsStructurallyModifiableClass),
@@ -702,7 +703,8 @@
     return error;
   }
   art::Runtime* runtime = art::Runtime::Current();
-  if (runtime->GetJniIdType() == art::JniIdType::kIndices && IsFullJvmtiAvailable()) {
+  if (runtime->GetJniIdType() == art::JniIdType::kIndices &&
+      (runtime->GetInstrumentation()->IsForcedInterpretOnly() || runtime->IsJavaDebuggable())) {
     error = add_extension(
         ArtJvmtiEvent::kStructuralDexFileLoadHook,
         "com.android.art.class.structural_dex_file_load_hook",
diff --git a/runtime/hidden_api.h b/runtime/hidden_api.h
index 8688a6d..1eb5e17 100644
--- a/runtime/hidden_api.h
+++ b/runtime/hidden_api.h
@@ -123,7 +123,7 @@
 
     if (domain == Domain::kApplication &&
         klass->ShouldSkipHiddenApiChecks() &&
-        Runtime::Current()->IsJavaDebuggableAtInit()) {
+        Runtime::Current()->IsJavaDebuggable()) {
       // Class is known, it is marked trusted and we are in debuggable mode.
       domain = ComputeDomain(/* is_trusted= */ true);
     }
diff --git a/runtime/instrumentation.cc b/runtime/instrumentation.cc
index 6359579..8735dcf 100644
--- a/runtime/instrumentation.cc
+++ b/runtime/instrumentation.cc
@@ -170,6 +170,7 @@
   return !new_exception_thrown;
 }
 
+
 void Instrumentation::InstallStubsForClass(ObjPtr<mirror::Class> klass) {
   if (!klass->IsResolved()) {
     // We need the class to be resolved to install/uninstall stubs. Otherwise its methods
@@ -449,14 +450,6 @@
   UpdateEntryPoints(method, GetOptimizedCodeFor(method));
 }
 
-void Instrumentation::UpdateEntrypointsForDebuggable() {
-  Runtime* runtime = Runtime::Current();
-  // If we are transitioning from non-debuggable to debuggable, we patch
-  // entry points of methods to remove any aot / JITed entry points.
-  InstallStubsClassVisitor visitor(this);
-  runtime->GetClassLinker()->VisitClasses(&visitor);
-}
-
 // Places the instrumentation exit pc as the return PC for every quick frame. This also allows
 // deoptimization of quick frames to interpreter frames. When force_deopt is
 // true the frames have to be deoptimized. If the frame has a deoptimization
@@ -1005,15 +998,17 @@
   Locks::mutator_lock_->AssertExclusiveHeld(self);
   Locks::thread_list_lock_->AssertNotHeld(self);
   UpdateInstrumentationLevel(requested_level);
-  InstallStubsClassVisitor visitor(this);
-  runtime->GetClassLinker()->VisitClasses(&visitor);
   if (requested_level > InstrumentationLevel::kInstrumentNothing) {
+    InstallStubsClassVisitor visitor(this);
+    runtime->GetClassLinker()->VisitClasses(&visitor);
     instrumentation_stubs_installed_ = true;
     MutexLock mu(self, *Locks::thread_list_lock_);
     for (Thread* thread : Runtime::Current()->GetThreadList()->GetList()) {
       InstrumentThreadStack(thread, /* deopt_all_frames= */ false);
     }
   } else {
+    InstallStubsClassVisitor visitor(this);
+    runtime->GetClassLinker()->VisitClasses(&visitor);
     MaybeRestoreInstrumentationStack();
   }
 }
@@ -1228,14 +1223,6 @@
     return;
   }
 
-  if (method->IsObsolete()) {
-    // Don't update entry points for obsolete methods. The entrypoint should
-    // have been set to InvokeObsoleteMethoStub.
-    DCHECK_EQ(method->GetEntryPointFromQuickCompiledCodePtrSize(kRuntimePointerSize),
-              GetInvokeObsoleteMethodStub());
-    return;
-  }
-
   // We are not using interpreter stubs for deoptimization. Restore the code of the method.
   // We still retain interpreter bridge if we need it for other reasons.
   if (InterpretOnly(method)) {
diff --git a/runtime/instrumentation.h b/runtime/instrumentation.h
index b232422..23c433e 100644
--- a/runtime/instrumentation.h
+++ b/runtime/instrumentation.h
@@ -550,8 +550,6 @@
 
   void InstallStubsForMethod(ArtMethod* method) REQUIRES_SHARED(Locks::mutator_lock_);
 
-  void UpdateEntrypointsForDebuggable() REQUIRES(art::Locks::mutator_lock_);
-
   // Install instrumentation exit stub on every method of the stack of the given thread.
   // This is used by:
   //  - the debugger to cause a deoptimization of the all frames in thread's stack (for
diff --git a/runtime/jit/jit.h b/runtime/jit/jit.h
index c95fd9d..fd92451 100644
--- a/runtime/jit/jit.h
+++ b/runtime/jit/jit.h
@@ -196,7 +196,6 @@
   virtual bool GenerateDebugInfo() = 0;
   virtual void ParseCompilerOptions() = 0;
   virtual bool IsBaselineCompiler() const = 0;
-  virtual void SetDebuggableCompilerOption(bool value) = 0;
 
   virtual std::vector<uint8_t> PackElfFileForJIT(ArrayRef<const JITCodeEntry*> elf_files,
                                                  ArrayRef<const void*> removed_symbols,
diff --git a/runtime/jit/jit_code_cache.cc b/runtime/jit/jit_code_cache.cc
index ad8cc9a..39f165d 100644
--- a/runtime/jit/jit_code_cache.cc
+++ b/runtime/jit/jit_code_cache.cc
@@ -1763,18 +1763,6 @@
       Runtime::Current()->GetInstrumentation()->InitializeMethodsCode(meth, /*aot_code=*/ nullptr);
     }
   }
-
-  for (auto it : zygote_map_) {
-    if (it.method == nullptr) {
-      continue;
-    }
-    if (it.method->IsPreCompiled()) {
-      it.method->ClearPreCompiled();
-    }
-    Runtime::Current()->GetInstrumentation()->InitializeMethodsCode(it.method,
-                                                                    /*aot_code=*/nullptr);
-  }
-
   saved_compiled_methods_map_.clear();
   osr_code_map_.clear();
 }
diff --git a/runtime/native/dalvik_system_DexFile.cc b/runtime/native/dalvik_system_DexFile.cc
index 9b6fb3e..d714206 100644
--- a/runtime/native/dalvik_system_DexFile.cc
+++ b/runtime/native/dalvik_system_DexFile.cc
@@ -904,7 +904,7 @@
   ScopedObjectAccess soa(env);
 
   // Currently only allow this for debuggable apps.
-  if (!runtime->IsJavaDebuggableAtInit()) {
+  if (!runtime->IsJavaDebuggable()) {
     ThrowSecurityException("Can't exempt class, process is not debuggable.");
     return;
   }
diff --git a/runtime/native/dalvik_system_VMDebug.cc b/runtime/native/dalvik_system_VMDebug.cc
index 1d5ac02..2e09c9f 100644
--- a/runtime/native/dalvik_system_VMDebug.cc
+++ b/runtime/native/dalvik_system_VMDebug.cc
@@ -466,7 +466,7 @@
   Runtime* runtime = Runtime::Current();
   ScopedObjectAccess soa(env);
 
-  if (!runtime->IsJavaDebuggableAtInit()) {
+  if (!runtime->IsJavaDebuggable()) {
     ThrowSecurityException("Can't exempt class, process is not debuggable.");
     return;
   }
diff --git a/runtime/native/dalvik_system_ZygoteHooks.cc b/runtime/native/dalvik_system_ZygoteHooks.cc
index d6b40c6..eae7c20 100644
--- a/runtime/native/dalvik_system_ZygoteHooks.cc
+++ b/runtime/native/dalvik_system_ZygoteHooks.cc
@@ -205,7 +205,7 @@
   if ((runtime_flags & DEBUG_JAVA_DEBUGGABLE) != 0) {
     runtime->AddCompilerOption("--debuggable");
     runtime_flags |= DEBUG_GENERATE_MINI_DEBUG_INFO;
-    runtime->SetRuntimeDebugState(Runtime::RuntimeDebugState::kJavaDebuggableAtInit);
+    runtime->SetJavaDebuggable(true);
     {
       // Deoptimize the boot image as it may be non-debuggable.
       ScopedSuspendAll ssa(__FUNCTION__);
diff --git a/runtime/oat_file_manager.cc b/runtime/oat_file_manager.cc
index dfb9eaf..6f1e95a 100644
--- a/runtime/oat_file_manager.cc
+++ b/runtime/oat_file_manager.cc
@@ -836,15 +836,6 @@
   verification_thread_pool_.reset(nullptr);
 }
 
-void OatFileManager::WaitForBackgroundVerificationTasksToFinish() {
-  if (verification_thread_pool_ == nullptr) {
-    return;
-  }
-
-  Thread* const self = Thread::Current();
-  verification_thread_pool_->Wait(self, /* do_work= */ true, /* may_hold_locks= */ false);
-}
-
 void OatFileManager::WaitForBackgroundVerificationTasks() {
   if (verification_thread_pool_ != nullptr) {
     Thread* const self = Thread::Current();
diff --git a/runtime/oat_file_manager.h b/runtime/oat_file_manager.h
index e09390b..b73ac58 100644
--- a/runtime/oat_file_manager.h
+++ b/runtime/oat_file_manager.h
@@ -134,9 +134,6 @@
   // If allocated, delete a thread pool of background verification threads.
   void DeleteThreadPool();
 
-  // Wait for any ongoing background verification tasks to finish.
-  void WaitForBackgroundVerificationTasksToFinish();
-
   // Wait for all background verification tasks to finish. This is only used by tests.
   void WaitForBackgroundVerificationTasks();
 
diff --git a/runtime/runtime.cc b/runtime/runtime.cc
index b291e7d..6e583af 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -288,7 +288,7 @@
       is_native_debuggable_(false),
       async_exceptions_thrown_(false),
       non_standard_exits_enabled_(false),
-      runtime_debug_state_(RuntimeDebugState::kNonJavaDebuggable),
+      is_java_debuggable_(false),
       monitor_timeout_enable_(false),
       monitor_timeout_ns_(0),
       zygote_max_failed_boots_(0),
@@ -1543,7 +1543,7 @@
   compiler_options_ = runtime_options.ReleaseOrDefault(Opt::CompilerOptions);
   for (const std::string& option : Runtime::Current()->GetCompilerOptions()) {
     if (option == "--debuggable") {
-      SetRuntimeDebugState(RuntimeDebugState::kJavaDebuggableAtInit);
+      SetJavaDebuggable(true);
       break;
     }
   }
@@ -3226,12 +3226,9 @@
   instrumentation::Instrumentation* const instrumentation_;
 };
 
-void Runtime::SetRuntimeDebugState(RuntimeDebugState state) {
-  if (state != RuntimeDebugState::kJavaDebuggableAtInit) {
-    // We never change the state if we started as a debuggable runtime.
-    DCHECK(runtime_debug_state_ != RuntimeDebugState::kJavaDebuggableAtInit);
-  }
-  runtime_debug_state_ = state;
+void Runtime::SetJavaDebuggable(bool value) {
+  is_java_debuggable_ = value;
+  // Do not call DeoptimizeBootImage just yet, the runtime may still be starting up.
 }
 
 void Runtime::DeoptimizeBootImage() {
diff --git a/runtime/runtime.h b/runtime/runtime.h
index 4790c9e..a932718 100644
--- a/runtime/runtime.h
+++ b/runtime/runtime.h
@@ -133,19 +133,6 @@
   static bool Create(const RuntimeOptions& raw_options, bool ignore_unrecognized)
       SHARED_TRYLOCK_FUNCTION(true, Locks::mutator_lock_);
 
-  enum class RuntimeDebugState {
-    // This doesn't support any debug features / method tracing. This is the expected state usually.
-    kNonJavaDebuggable,
-    // This supports method tracing and a restricted set of debug features (for ex: redefinition
-    // isn't supported). We transition to this state when method tracing has started or when the
-    // debugger was attached and transition back to NonDebuggable once the tracing has stopped /
-    // the debugger agent has detached..
-    kJavaDebuggable,
-    // The runtime was started as a debuggable runtime. This allows us to support the extended set
-    // of debug features (for ex: redefinition). We never transition out of this state.
-    kJavaDebuggableAtInit
-  };
-
   bool EnsurePluginLoaded(const char* plugin_name, std::string* error_msg);
   bool EnsurePerfettoPlugin(std::string* error_msg);
 
@@ -819,12 +806,7 @@
   }
 
   bool IsJavaDebuggable() const {
-    return runtime_debug_state_ == RuntimeDebugState::kJavaDebuggable ||
-           runtime_debug_state_ == RuntimeDebugState::kJavaDebuggableAtInit;
-  }
-
-  bool IsJavaDebuggableAtInit() const {
-    return runtime_debug_state_ == RuntimeDebugState::kJavaDebuggableAtInit;
+    return is_java_debuggable_;
   }
 
   void SetProfileableFromShell(bool value) {
@@ -843,7 +825,7 @@
     return is_profileable_;
   }
 
-  void SetRuntimeDebugState(RuntimeDebugState state);
+  void SetJavaDebuggable(bool value);
 
   // Deoptimize the boot image, called for Java debuggable apps.
   void DeoptimizeBootImage() REQUIRES(Locks::mutator_lock_);
@@ -1393,7 +1375,7 @@
   bool non_standard_exits_enabled_;
 
   // Whether Java code needs to be debuggable.
-  RuntimeDebugState runtime_debug_state_;
+  bool is_java_debuggable_;
 
   bool monitor_timeout_enable_;
   uint64_t monitor_timeout_ns_;
diff --git a/runtime/trace.cc b/runtime/trace.cc
index edca549..6b4fb29 100644
--- a/runtime/trace.cc
+++ b/runtime/trace.cc
@@ -431,8 +431,8 @@
         // we know that inlining and other problematic optimizations are disabled. We might just
         // want to use the trampolines anyway since it is faster. It makes the story with disabling
         // jit-gc more complex though.
-        runtime->GetInstrumentation()->EnableMethodTracing(kTracerInstrumentationKey,
-                                                           /*needs_interpreter=*/false);
+        runtime->GetInstrumentation()->EnableMethodTracing(
+            kTracerInstrumentationKey, /*needs_interpreter=*/!runtime->IsJavaDebuggable());
       }
     }
   }
diff --git a/test/2031-zygote-compiled-frame-deopt/native-wait.cc b/test/2031-zygote-compiled-frame-deopt/native-wait.cc
index fb45345..bd1d224 100644
--- a/test/2031-zygote-compiled-frame-deopt/native-wait.cc
+++ b/test/2031-zygote-compiled-frame-deopt/native-wait.cc
@@ -42,7 +42,7 @@
   }
   runtime->SetAsZygoteChild(/*is_system_server=*/false, /*is_zygote=*/false);
   runtime->AddCompilerOption("--debuggable");
-  runtime->SetRuntimeDebugState(Runtime::RuntimeDebugState::kJavaDebuggableAtInit);
+  runtime->SetJavaDebuggable(true);
   {
     // Deoptimize the boot image as it may be non-debuggable.
     ScopedSuspendAll ssa(__FUNCTION__);
diff --git a/test/993-breakpoints-non-debuggable/Android.bp b/test/993-breakpoints-non-debuggable/Android.bp
deleted file mode 100644
index 53a9f28..0000000
--- a/test/993-breakpoints-non-debuggable/Android.bp
+++ /dev/null
@@ -1,40 +0,0 @@
-// Generated by `regen-test-files`. Do not edit manually.
-
-// Build rules for ART run-test `993-breakpoints-non-debuggable`.
-
-package {
-    // See: http://go/android-license-faq
-    // A large-scale-change added 'default_applicable_licenses' to import
-    // all of the 'license_kinds' from "art_license"
-    // to get the below license kinds:
-    //   SPDX-license-identifier-Apache-2.0
-    default_applicable_licenses: ["art_license"],
-}
-
-// Test's Dex code.
-java_test {
-    name: "art-run-test-993-breakpoints-non-debuggable",
-    defaults: ["art-run-test-defaults"],
-    test_config_template: ":art-run-test-target-no-test-suite-tag-template",
-    srcs: ["src/**/*.java"],
-    data: [
-        ":art-run-test-993-breakpoints-non-debuggable-expected-stdout",
-        ":art-run-test-993-breakpoints-non-debuggable-expected-stderr",
-    ],
-}
-
-// Test's expected standard output.
-genrule {
-    name: "art-run-test-993-breakpoints-non-debuggable-expected-stdout",
-    out: ["art-run-test-993-breakpoints-non-debuggable-expected-stdout.txt"],
-    srcs: ["expected-stdout.txt"],
-    cmd: "cp -f $(in) $(out)",
-}
-
-// Test's expected standard error.
-genrule {
-    name: "art-run-test-993-breakpoints-non-debuggable-expected-stderr",
-    out: ["art-run-test-993-breakpoints-non-debuggable-expected-stderr.txt"],
-    srcs: ["expected-stderr.txt"],
-    cmd: "cp -f $(in) $(out)",
-}
diff --git a/test/993-breakpoints-non-debuggable/expected-stderr.txt b/test/993-breakpoints-non-debuggable/expected-stderr.txt
deleted file mode 100644
index e69de29..0000000
--- a/test/993-breakpoints-non-debuggable/expected-stderr.txt
+++ /dev/null
diff --git a/test/993-breakpoints-non-debuggable/expected-stdout.txt b/test/993-breakpoints-non-debuggable/expected-stdout.txt
deleted file mode 100644
index a4bd24b..0000000
--- a/test/993-breakpoints-non-debuggable/expected-stdout.txt
+++ /dev/null
@@ -1,715 +0,0 @@
-JNI_OnLoad called
-Running static invoke
-	Breaking on []
-		Native invoking: public static void art.Test993.breakpoint() args: [this: null]
-		Reflective invoking: public static void art.Test993.breakpoint() args: [this: null]
-		Invoking "Test993::breakpoint"
-	Breaking on [public static void art.Test993.breakpoint() @ 41]
-		Native invoking: public static void art.Test993.breakpoint() args: [this: null]
-			Breakpoint: public static void art.Test993.breakpoint() @ line=41
-		Reflective invoking: public static void art.Test993.breakpoint() args: [this: null]
-			Breakpoint: public static void art.Test993.breakpoint() @ line=41
-		Invoking "Test993::breakpoint"
-			Breakpoint: public static void art.Test993.breakpoint() @ line=41
-Running private static invoke
-	Breaking on []
-		Native invoking: private static void art.Test993.privateBreakpoint() args: [this: null]
-		Invoking "Test993::privateBreakpoint"
-	Breaking on [private static void art.Test993.privateBreakpoint() @ 45]
-		Native invoking: private static void art.Test993.privateBreakpoint() args: [this: null]
-			Breakpoint: private static void art.Test993.privateBreakpoint() @ line=45
-		Invoking "Test993::privateBreakpoint"
-			Breakpoint: private static void art.Test993.privateBreakpoint() @ line=45
-Running interface static invoke
-	Breaking on []
-		Native invoking: public static void art.Test993$Breakable.iBreakpoint() args: [this: null]
-		Reflective invoking: public static void art.Test993$Breakable.iBreakpoint() args: [this: null]
-		Invoking "Breakable::iBreakpoint"
-	Breaking on [public static void art.Test993$Breakable.iBreakpoint() @ 51]
-		Native invoking: public static void art.Test993$Breakable.iBreakpoint() args: [this: null]
-			Breakpoint: public static void art.Test993$Breakable.iBreakpoint() @ line=51
-		Reflective invoking: public static void art.Test993$Breakable.iBreakpoint() args: [this: null]
-			Breakpoint: public static void art.Test993$Breakable.iBreakpoint() @ line=51
-		Invoking "Breakable::iBreakpoint"
-			Breakpoint: public static void art.Test993$Breakable.iBreakpoint() @ line=51
-Running TestClass1 invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1]
-		Invoking "((Breakable)new TestClass1()).breakit()"
-		Invoking "new TestClass1().breakit()"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass1()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass1().breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-Running TestClass1ext invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-		Native invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-		Reflective invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-		Invoking "((Breakable)new TestClass1ext()).breakit()"
-		Invoking "((TestClass1)new TestClass1ext()).breakit()"
-		Invoking "new TestClass1ext().breakit()"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass1ext()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass1)new TestClass1ext()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass1ext().breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-	Breaking on [public void art.Test993$TestClass1ext.breakit() @ 74]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Native invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Reflective invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Invoking "((Breakable)new TestClass1ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Invoking "((TestClass1)new TestClass1ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Invoking "new TestClass1ext().breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass1ext.breakit() @ 74]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass1ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass1)new TestClass1ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass1ext().breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-Running TestClass2 invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-		Invoking "((Breakable)new TestClass2()).breakit()"
-		Invoking "new TestClass2().breakit()"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-		Invoking "((Breakable)new TestClass2()).breakit()"
-		Invoking "new TestClass2().breakit()"
-	Breaking on [public void art.Test993$TestClass2.breakit() @ 83]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2().breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass2.breakit() @ 83]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2().breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-Running TestClass2ext invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-		Invoking "new TestClass2ext().breakit())"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-		Invoking "new TestClass2ext().breakit())"
-	Breaking on [public void art.Test993$TestClass2.breakit() @ 83]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-	Breaking on [public void art.Test993$TestClass2ext.breakit() @ 91]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass2.breakit() @ 83]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass2ext.breakit() @ 91]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-	Breaking on [public void art.Test993$TestClass2.breakit() @ 83, public void art.Test993$TestClass2ext.breakit() @ 91]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass2.breakit() @ 83, public void art.Test993$TestClass2ext.breakit() @ 91]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-Running TestClass3 invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-		Invoking "((Breakable)new TestClass3()).breakit()"
-		Invoking "new TestClass3().breakit())"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3().breakit())"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-	Breaking on [public void art.Test993$TestClass3.breakit() @ 99]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "((Breakable)new TestClass3()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "new TestClass3().breakit())"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass3.breakit() @ 99]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3().breakit())"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-Running TestClass3ext invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-		Invoking "new TestClass3ext().breakit())"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-	Breaking on [public void art.Test993$TestClass3.breakit() @ 99]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-	Breaking on [public void art.Test993$TestClass3ext.breakit() @ 108]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass3.breakit() @ 99]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass3ext.breakit() @ 108]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-	Breaking on [public void art.Test993$TestClass3.breakit() @ 99, public void art.Test993$TestClass3ext.breakit() @ 108]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass3.breakit() @ 99, public void art.Test993$TestClass3ext.breakit() @ 108]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-Running private instance invoke
-	Breaking on []
-		Native invoking: private void art.Test993$TestClass4.privateMethod() args: [this: TestClass4]
-		Invoking "new TestClass4().callPrivateMethod()"
-	Breaking on [private void art.Test993$TestClass4.privateMethod() @ 118]
-		Native invoking: private void art.Test993$TestClass4.privateMethod() args: [this: TestClass4]
-			Breakpoint: private void art.Test993$TestClass4.privateMethod() @ line=118
-		Invoking "new TestClass4().callPrivateMethod()"
-			Breakpoint: private void art.Test993$TestClass4.privateMethod() @ line=118
-Running Vector constructor
-	Breaking on []
-		Native constructor: public java.util.Vector(), type: class java.util.Vector
-			Created: []
-		Reflective constructor: public java.util.Vector()
-			Created: []
-		Constructing: new Vector()
-			Created: []
-	Breaking on [public java.util.Vector() @ <NON-DETERMINISTIC>]
-		Native constructor: public java.util.Vector(), type: class java.util.Vector
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Reflective constructor: public java.util.Vector()
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Constructing: new Vector()
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-Running Stack constructor
-	Breaking on []
-		Native constructor: public java.util.Stack(), type: class java.util.Stack
-			Created: []
-		Reflective constructor: public java.util.Stack()
-			Created: []
-		Constructing: new Stack()
-			Created: []
-	Breaking on [public java.util.Stack() @ <NON-DETERMINISTIC>]
-		Native constructor: public java.util.Stack(), type: class java.util.Stack
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Reflective constructor: public java.util.Stack()
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Constructing: new Stack()
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Created: []
-	Breaking on [public java.util.Vector() @ <NON-DETERMINISTIC>]
-		Native constructor: public java.util.Stack(), type: class java.util.Stack
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Reflective constructor: public java.util.Stack()
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Constructing: new Stack()
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-	Breaking on [public java.util.Stack() @ <NON-DETERMINISTIC>, public java.util.Vector() @ <NON-DETERMINISTIC>]
-		Native constructor: public java.util.Stack(), type: class java.util.Stack
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Reflective constructor: public java.util.Stack()
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Constructing: new Stack()
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-Running bcp static invoke
-	Breaking on []
-		Native invoking: public static java.util.Optional java.util.Optional.empty() args: [this: null]
-		Reflective invoking: public static java.util.Optional java.util.Optional.empty() args: [this: null]
-		Invoking "Optional::empty"
-	Breaking on [public static java.util.Optional java.util.Optional.empty() @ <NON-DETERMINISTIC>]
-		Native invoking: public static java.util.Optional java.util.Optional.empty() args: [this: null]
-			Breakpoint: public static java.util.Optional java.util.Optional.empty() @ line=<NON-DETERMINISTIC>
-		Reflective invoking: public static java.util.Optional java.util.Optional.empty() args: [this: null]
-			Breakpoint: public static java.util.Optional java.util.Optional.empty() @ line=<NON-DETERMINISTIC>
-		Invoking "Optional::empty"
-			Breakpoint: public static java.util.Optional java.util.Optional.empty() @ line=<NON-DETERMINISTIC>
-Running bcp private static invoke
-	Breaking on []
-		Native invoking: private static long java.util.Random.seedUniquifier() args: [this: null]
-		Invoking "Random::seedUniquifier"
-	Breaking on [private static long java.util.Random.seedUniquifier() @ <NON-DETERMINISTIC>]
-		Native invoking: private static long java.util.Random.seedUniquifier() args: [this: null]
-			Breakpoint: private static long java.util.Random.seedUniquifier() @ line=<NON-DETERMINISTIC>
-		Invoking "Random::seedUniquifier"
-			Breakpoint: private static long java.util.Random.seedUniquifier() @ line=<NON-DETERMINISTIC>
-Running bcp private invoke
-	Breaking on []
-		Native invoking: private java.math.BigDecimal java.time.Duration.toBigDecimalSeconds() args: [this: PT336H]
-		Invoking "Duration::toBigDecimalSeconds"
-	Breaking on [private java.math.BigDecimal java.time.Duration.toBigDecimalSeconds() @ <NON-DETERMINISTIC>]
-		Native invoking: private java.math.BigDecimal java.time.Duration.toBigDecimalSeconds() args: [this: PT336H]
-			Breakpoint: private java.math.BigDecimal java.time.Duration.toBigDecimalSeconds() @ line=<NON-DETERMINISTIC>
-		Invoking "Duration::toBigDecimalSeconds"
-			Breakpoint: private java.math.BigDecimal java.time.Duration.toBigDecimalSeconds() @ line=<NON-DETERMINISTIC>
-Running bcp invoke
-	Breaking on []
-		Native invoking: public boolean java.util.Optional.isPresent() args: [this: Optional[test]]
-		Reflective invoking: public boolean java.util.Optional.isPresent() args: [this: Optional[test2]]
-		Invoking "Optional::isPresent"
-	Breaking on [public boolean java.util.Optional.isPresent() @ <NON-DETERMINISTIC>]
-		Native invoking: public boolean java.util.Optional.isPresent() args: [this: Optional[test]]
-			Breakpoint: public boolean java.util.Optional.isPresent() @ line=<NON-DETERMINISTIC>
-		Reflective invoking: public boolean java.util.Optional.isPresent() args: [this: Optional[test2]]
-			Breakpoint: public boolean java.util.Optional.isPresent() @ line=<NON-DETERMINISTIC>
-		Invoking "Optional::isPresent"
-			Breakpoint: public boolean java.util.Optional.isPresent() @ line=<NON-DETERMINISTIC>
-Running TestClass1 constructor
-	Breaking on []
-		Native constructor: public art.Test993$TestClass1(), type: class art.Test993$TestClass1
-			Created: TestClass1
-		Reflective constructor: public art.Test993$TestClass1()
-			Created: TestClass1
-		Constructing: new TestClass1()
-			Created: TestClass1
-	Breaking on [public art.Test993$TestClass1() @ 62]
-		Native constructor: public art.Test993$TestClass1(), type: class art.Test993$TestClass1
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1
-		Reflective constructor: public art.Test993$TestClass1()
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1
-		Constructing: new TestClass1()
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1
-Running TestClass1ext constructor
-	Breaking on []
-		Native constructor: public art.Test993$TestClass1ext(), type: class art.Test993$TestClass1ext
-			Created: TestClass1Ext
-		Reflective constructor: public art.Test993$TestClass1ext()
-			Created: TestClass1Ext
-		Constructing: new TestClass1ext()
-			Created: TestClass1Ext
-	Breaking on [public art.Test993$TestClass1() @ 62]
-		Native constructor: public art.Test993$TestClass1ext(), type: class art.Test993$TestClass1ext
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
-		Reflective constructor: public art.Test993$TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
-		Constructing: new TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
-	Breaking on [public art.Test993$TestClass1ext() @ 70]
-		Native constructor: public art.Test993$TestClass1ext(), type: class art.Test993$TestClass1ext
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Created: TestClass1Ext
-		Reflective constructor: public art.Test993$TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Created: TestClass1Ext
-		Constructing: new TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Created: TestClass1Ext
-	Breaking on [public art.Test993$TestClass1() @ 62, public art.Test993$TestClass1ext() @ 70]
-		Native constructor: public art.Test993$TestClass1ext(), type: class art.Test993$TestClass1ext
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
-		Reflective constructor: public art.Test993$TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
-		Constructing: new TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
diff --git a/test/993-breakpoints-non-debuggable/expected_cts.txt b/test/993-breakpoints-non-debuggable/expected_cts.txt
deleted file mode 100644
index 6c4e881..0000000
--- a/test/993-breakpoints-non-debuggable/expected_cts.txt
+++ /dev/null
@@ -1,696 +0,0 @@
-Running static invoke
-	Breaking on []
-		Native invoking: public static void art.Test993.breakpoint() args: [this: null]
-		Reflective invoking: public static void art.Test993.breakpoint() args: [this: null]
-		Invoking "Test993::breakpoint"
-	Breaking on [public static void art.Test993.breakpoint() @ 41]
-		Native invoking: public static void art.Test993.breakpoint() args: [this: null]
-			Breakpoint: public static void art.Test993.breakpoint() @ line=41
-		Reflective invoking: public static void art.Test993.breakpoint() args: [this: null]
-			Breakpoint: public static void art.Test993.breakpoint() @ line=41
-		Invoking "Test993::breakpoint"
-			Breakpoint: public static void art.Test993.breakpoint() @ line=41
-Running private static invoke
-	Breaking on []
-		Native invoking: private static void art.Test993.privateBreakpoint() args: [this: null]
-		Invoking "Test993::privateBreakpoint"
-	Breaking on [private static void art.Test993.privateBreakpoint() @ 45]
-		Native invoking: private static void art.Test993.privateBreakpoint() args: [this: null]
-			Breakpoint: private static void art.Test993.privateBreakpoint() @ line=45
-		Invoking "Test993::privateBreakpoint"
-			Breakpoint: private static void art.Test993.privateBreakpoint() @ line=45
-Running interface static invoke
-	Breaking on []
-		Native invoking: public static void art.Test993$Breakable.iBreakpoint() args: [this: null]
-		Reflective invoking: public static void art.Test993$Breakable.iBreakpoint() args: [this: null]
-		Invoking "Breakable::iBreakpoint"
-	Breaking on [public static void art.Test993$Breakable.iBreakpoint() @ 51]
-		Native invoking: public static void art.Test993$Breakable.iBreakpoint() args: [this: null]
-			Breakpoint: public static void art.Test993$Breakable.iBreakpoint() @ line=51
-		Reflective invoking: public static void art.Test993$Breakable.iBreakpoint() args: [this: null]
-			Breakpoint: public static void art.Test993$Breakable.iBreakpoint() @ line=51
-		Invoking "Breakable::iBreakpoint"
-			Breakpoint: public static void art.Test993$Breakable.iBreakpoint() @ line=51
-Running TestClass1 invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1]
-		Invoking "((Breakable)new TestClass1()).breakit()"
-		Invoking "new TestClass1().breakit()"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass1()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass1().breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-Running TestClass1ext invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-		Native invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-		Reflective invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-		Invoking "((Breakable)new TestClass1ext()).breakit()"
-		Invoking "((TestClass1)new TestClass1ext()).breakit()"
-		Invoking "new TestClass1ext().breakit()"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass1ext()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass1)new TestClass1ext()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass1ext().breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-	Breaking on [public void art.Test993$TestClass1ext.breakit() @ 74]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Native invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Reflective invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Invoking "((Breakable)new TestClass1ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Invoking "((TestClass1)new TestClass1ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-		Invoking "new TestClass1ext().breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass1ext.breakit() @ 74]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass1ext.breakit() args: [this: TestClass1Ext]
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass1ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass1)new TestClass1ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass1ext().breakit()"
-			Breakpoint: public void art.Test993$TestClass1ext.breakit() @ line=74
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-Running TestClass2 invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-		Invoking "((Breakable)new TestClass2()).breakit()"
-		Invoking "new TestClass2().breakit()"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-		Invoking "((Breakable)new TestClass2()).breakit()"
-		Invoking "new TestClass2().breakit()"
-	Breaking on [public void art.Test993$TestClass2.breakit() @ 83]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2().breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass2.breakit() @ 83]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2().breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-Running TestClass2ext invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-		Invoking "new TestClass2ext().breakit())"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-		Invoking "new TestClass2ext().breakit())"
-	Breaking on [public void art.Test993$TestClass2.breakit() @ 83]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-	Breaking on [public void art.Test993$TestClass2ext.breakit() @ 91]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass2.breakit() @ 83]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass2ext.breakit() @ 91]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-	Breaking on [public void art.Test993$TestClass2.breakit() @ 83, public void art.Test993$TestClass2ext.breakit() @ 91]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass2.breakit() @ 83, public void art.Test993$TestClass2ext.breakit() @ 91]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Native invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Reflective invoking: public void art.Test993$TestClass2ext.breakit() args: [this: TestClass2ext]
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((Breakable)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "((TestClass2)new TestClass2ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-		Invoking "new TestClass2ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass2ext.breakit() @ line=91
-			Breakpoint: public void art.Test993$TestClass2.breakit() @ line=83
-Running TestClass3 invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-		Invoking "((Breakable)new TestClass3()).breakit()"
-		Invoking "new TestClass3().breakit())"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3().breakit())"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-	Breaking on [public void art.Test993$TestClass3.breakit() @ 99]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "((Breakable)new TestClass3()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "new TestClass3().breakit())"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass3.breakit() @ 99]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3().breakit())"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-Running TestClass3ext invokes
-	Breaking on []
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-		Invoking "new TestClass3ext().breakit())"
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-	Breaking on [public void art.Test993$TestClass3.breakit() @ 99]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-	Breaking on [public void art.Test993$TestClass3ext.breakit() @ 108]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass3.breakit() @ 99]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass3ext.breakit() @ 108]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-	Breaking on [public void art.Test993$TestClass3.breakit() @ 99, public void art.Test993$TestClass3ext.breakit() @ 108]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-	Breaking on [public default void art.Test993$Breakable.breakit() @ 55, public void art.Test993$TestClass3.breakit() @ 99, public void art.Test993$TestClass3ext.breakit() @ 108]
-		Native invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Native invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public default void art.Test993$Breakable.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Reflective invoking: public void art.Test993$TestClass3ext.breakit() args: [this: TestClass3ext]
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((Breakable)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "((TestClass3)new TestClass3ext()).breakit()"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-		Invoking "new TestClass3ext().breakit())"
-			Breakpoint: public void art.Test993$TestClass3ext.breakit() @ line=108
-			Breakpoint: public void art.Test993$TestClass3.breakit() @ line=99
-			Breakpoint: public default void art.Test993$Breakable.breakit() @ line=55
-Running private instance invoke
-	Breaking on []
-		Native invoking: private void art.Test993$TestClass4.privateMethod() args: [this: TestClass4]
-		Invoking "new TestClass4().callPrivateMethod()"
-	Breaking on [private void art.Test993$TestClass4.privateMethod() @ 118]
-		Native invoking: private void art.Test993$TestClass4.privateMethod() args: [this: TestClass4]
-			Breakpoint: private void art.Test993$TestClass4.privateMethod() @ line=118
-		Invoking "new TestClass4().callPrivateMethod()"
-			Breakpoint: private void art.Test993$TestClass4.privateMethod() @ line=118
-Running Vector constructor
-	Breaking on []
-		Native constructor: public java.util.Vector(), type: class java.util.Vector
-			Created: []
-		Reflective constructor: public java.util.Vector()
-			Created: []
-		Constructing: new Vector()
-			Created: []
-	Breaking on [public java.util.Vector() @ <NON-DETERMINISTIC>]
-		Native constructor: public java.util.Vector(), type: class java.util.Vector
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Reflective constructor: public java.util.Vector()
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Constructing: new Vector()
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-Running Stack constructor
-	Breaking on []
-		Native constructor: public java.util.Stack(), type: class java.util.Stack
-			Created: []
-		Reflective constructor: public java.util.Stack()
-			Created: []
-		Constructing: new Stack()
-			Created: []
-	Breaking on [public java.util.Stack() @ <NON-DETERMINISTIC>]
-		Native constructor: public java.util.Stack(), type: class java.util.Stack
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Reflective constructor: public java.util.Stack()
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Constructing: new Stack()
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Created: []
-	Breaking on [public java.util.Vector() @ <NON-DETERMINISTIC>]
-		Native constructor: public java.util.Stack(), type: class java.util.Stack
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Reflective constructor: public java.util.Stack()
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Constructing: new Stack()
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-	Breaking on [public java.util.Stack() @ <NON-DETERMINISTIC>, public java.util.Vector() @ <NON-DETERMINISTIC>]
-		Native constructor: public java.util.Stack(), type: class java.util.Stack
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Reflective constructor: public java.util.Stack()
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-		Constructing: new Stack()
-			Breakpoint: public java.util.Stack() @ line=<NON-DETERMINISTIC>
-			Breakpoint: public java.util.Vector() @ line=<NON-DETERMINISTIC>
-			Created: []
-Running bcp static invoke
-	Breaking on []
-		Native invoking: public static java.util.Optional java.util.Optional.empty() args: [this: null]
-		Reflective invoking: public static java.util.Optional java.util.Optional.empty() args: [this: null]
-		Invoking "Optional::empty"
-	Breaking on [public static java.util.Optional java.util.Optional.empty() @ <NON-DETERMINISTIC>]
-		Native invoking: public static java.util.Optional java.util.Optional.empty() args: [this: null]
-			Breakpoint: public static java.util.Optional java.util.Optional.empty() @ line=<NON-DETERMINISTIC>
-		Reflective invoking: public static java.util.Optional java.util.Optional.empty() args: [this: null]
-			Breakpoint: public static java.util.Optional java.util.Optional.empty() @ line=<NON-DETERMINISTIC>
-		Invoking "Optional::empty"
-			Breakpoint: public static java.util.Optional java.util.Optional.empty() @ line=<NON-DETERMINISTIC>
-Running bcp invoke
-	Breaking on []
-		Native invoking: public boolean java.util.Optional.isPresent() args: [this: Optional[test]]
-		Reflective invoking: public boolean java.util.Optional.isPresent() args: [this: Optional[test2]]
-		Invoking "Optional::isPresent"
-	Breaking on [public boolean java.util.Optional.isPresent() @ <NON-DETERMINISTIC>]
-		Native invoking: public boolean java.util.Optional.isPresent() args: [this: Optional[test]]
-			Breakpoint: public boolean java.util.Optional.isPresent() @ line=<NON-DETERMINISTIC>
-		Reflective invoking: public boolean java.util.Optional.isPresent() args: [this: Optional[test2]]
-			Breakpoint: public boolean java.util.Optional.isPresent() @ line=<NON-DETERMINISTIC>
-		Invoking "Optional::isPresent"
-			Breakpoint: public boolean java.util.Optional.isPresent() @ line=<NON-DETERMINISTIC>
-Running TestClass1 constructor
-	Breaking on []
-		Native constructor: public art.Test993$TestClass1(), type: class art.Test993$TestClass1
-			Created: TestClass1
-		Reflective constructor: public art.Test993$TestClass1()
-			Created: TestClass1
-		Constructing: new TestClass1()
-			Created: TestClass1
-	Breaking on [public art.Test993$TestClass1() @ 62]
-		Native constructor: public art.Test993$TestClass1(), type: class art.Test993$TestClass1
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1
-		Reflective constructor: public art.Test993$TestClass1()
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1
-		Constructing: new TestClass1()
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1
-Running TestClass1ext constructor
-	Breaking on []
-		Native constructor: public art.Test993$TestClass1ext(), type: class art.Test993$TestClass1ext
-			Created: TestClass1Ext
-		Reflective constructor: public art.Test993$TestClass1ext()
-			Created: TestClass1Ext
-		Constructing: new TestClass1ext()
-			Created: TestClass1Ext
-	Breaking on [public art.Test993$TestClass1() @ 62]
-		Native constructor: public art.Test993$TestClass1ext(), type: class art.Test993$TestClass1ext
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
-		Reflective constructor: public art.Test993$TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
-		Constructing: new TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
-	Breaking on [public art.Test993$TestClass1ext() @ 70]
-		Native constructor: public art.Test993$TestClass1ext(), type: class art.Test993$TestClass1ext
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Created: TestClass1Ext
-		Reflective constructor: public art.Test993$TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Created: TestClass1Ext
-		Constructing: new TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Created: TestClass1Ext
-	Breaking on [public art.Test993$TestClass1() @ 62, public art.Test993$TestClass1ext() @ 70]
-		Native constructor: public art.Test993$TestClass1ext(), type: class art.Test993$TestClass1ext
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
-		Reflective constructor: public art.Test993$TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
-		Constructing: new TestClass1ext()
-			Breakpoint: public art.Test993$TestClass1ext() @ line=70
-			Breakpoint: public art.Test993$TestClass1() @ line=62
-			Created: TestClass1Ext
diff --git a/test/993-breakpoints-non-debuggable/info.txt b/test/993-breakpoints-non-debuggable/info.txt
deleted file mode 100644
index b5eb546..0000000
--- a/test/993-breakpoints-non-debuggable/info.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Test basic JVMTI breakpoint functionality.
-
-This test places a breakpoint on the first instruction of a number of functions
-that are entered in every way possible for the given class of method.
-
-It also tests that breakpoints don't interfere with each other by having
-multiple breakpoints be set at once.
diff --git a/test/993-breakpoints-non-debuggable/native_attach_agent.cc b/test/993-breakpoints-non-debuggable/native_attach_agent.cc
deleted file mode 100644
index 71d30eb..0000000
--- a/test/993-breakpoints-non-debuggable/native_attach_agent.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <sstream>
-
-#include "jni.h"
-#include "runtime.h"
-
-namespace art {
-namespace Test993BreakpointsNonDebuggable {
-
-extern "C" JNIEXPORT void JNICALL Java_art_Test993AttachAgent_setupJvmti(JNIEnv* env, jclass) {
-  Runtime* runtime = Runtime::Current();
-  std::ostringstream oss;
-  oss << (kIsDebugBuild ? "libtiagentd.so" : "libtiagent.so") << "=993-non-debuggable,art";
-  LOG(INFO) << "agent " << oss.str();
-  runtime->AttachAgent(env, oss.str(), nullptr);
-}
-
-}  // namespace Test993BreakpointsNonDebuggable
-}  // namespace art
diff --git a/test/993-breakpoints-non-debuggable/onload.cc b/test/993-breakpoints-non-debuggable/onload.cc
deleted file mode 100644
index dbbcadc..0000000
--- a/test/993-breakpoints-non-debuggable/onload.cc
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "jvmti.h"
-#include "jvmti_helper.h"
-#include "test_env.h"
-
-namespace art {
-namespace Test993BreakpointsNonDebuggable {
-
-static constexpr jint kArtTiVersion = JVMTI_VERSION_1_2 | 0x40000000;
-
-static const jvmtiCapabilities limited_caps = {
-    .can_tag_objects = 1,
-    .can_generate_field_modification_events = 1,
-    .can_generate_field_access_events = 1,
-    .can_get_bytecodes = 1,
-    .can_get_synthetic_attribute = 1,
-    .can_get_owned_monitor_info = 0,
-    .can_get_current_contended_monitor = 1,
-    .can_get_monitor_info = 1,
-    .can_pop_frame = 0,
-    .can_redefine_classes = 0,
-    .can_signal_thread = 1,
-    .can_get_source_file_name = 1,
-    .can_get_line_numbers = 1,
-    .can_get_source_debug_extension = 1,
-    .can_access_local_variables = 0,
-    .can_maintain_original_method_order = 1,
-    .can_generate_single_step_events = 1,
-    .can_generate_exception_events = 0,
-    .can_generate_frame_pop_events = 0,
-    .can_generate_breakpoint_events = 1,
-    .can_suspend = 1,
-    .can_redefine_any_class = 0,
-    .can_get_current_thread_cpu_time = 0,
-    .can_get_thread_cpu_time = 0,
-    .can_generate_method_entry_events = 1,
-    .can_generate_method_exit_events = 1,
-    .can_generate_all_class_hook_events = 0,
-    .can_generate_compiled_method_load_events = 0,
-    .can_generate_monitor_events = 0,
-    .can_generate_vm_object_alloc_events = 1,
-    .can_generate_native_method_bind_events = 1,
-    .can_generate_garbage_collection_events = 1,
-    .can_generate_object_free_events = 1,
-    .can_force_early_return = 0,
-    .can_get_owned_monitor_stack_depth_info = 0,
-    .can_get_constant_pool = 0,
-    .can_set_native_method_prefix = 0,
-    .can_retransform_classes = 0,
-    .can_retransform_any_class = 0,
-    .can_generate_resource_exhaustion_heap_events = 0,
-    .can_generate_resource_exhaustion_threads_events = 0,
-};
-
-jint OnLoad(JavaVM* vm, char* options ATTRIBUTE_UNUSED, void* reserved ATTRIBUTE_UNUSED) {
-  if (vm->GetEnv(reinterpret_cast<void**>(&jvmti_env), kArtTiVersion) != 0) {
-    printf("Unable to get jvmti env!\n");
-    return 1;
-  }
-
-  CheckJvmtiError(jvmti_env, jvmti_env->AddCapabilities(&limited_caps));
-  return 0;
-}
-
-}  // namespace Test993BreakpointsNonDebuggable
-}  // namespace art
diff --git a/test/993-breakpoints-non-debuggable/onload.h b/test/993-breakpoints-non-debuggable/onload.h
deleted file mode 100644
index 99ce0d2b..0000000
--- a/test/993-breakpoints-non-debuggable/onload.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ART_TEST_993_BREAKPOINTS_NON_DEBUGGABLE_ONLOAD_H_
-#define ART_TEST_993_BREAKPOINTS_NON_DEBUGGABLE_ONLOAD_H_
-
-#include "jni.h"
-
-namespace art {
-namespace Test993BreakpointsNonDebuggable {
-
-jint OnLoad(JavaVM* vm, char* options, void* reserved);
-
-}  // namespace Test993BreakpointsNonDebuggable
-}  // namespace art
-
-#endif  // ART_TEST_993_BREAKPOINTS_NON_DEBUGGABLE_ONLOAD_H_
diff --git a/test/993-breakpoints-non-debuggable/src/Main.java b/test/993-breakpoints-non-debuggable/src/Main.java
deleted file mode 100644
index 32fca46..0000000
--- a/test/993-breakpoints-non-debuggable/src/Main.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-public class Main {
-    public static void main(String[] args) throws Exception {
-        System.loadLibrary(args[0]);
-        art.Test993AttachAgent.loadAgent();
-        art.Test993.run(true);
-    }
-}
diff --git a/test/993-breakpoints-non-debuggable/src/art/Breakpoint.java b/test/993-breakpoints-non-debuggable/src/art/Breakpoint.java
deleted file mode 120000
index 3673916..0000000
--- a/test/993-breakpoints-non-debuggable/src/art/Breakpoint.java
+++ /dev/null
@@ -1 +0,0 @@
-../../../jvmti-common/Breakpoint.java
\ No newline at end of file
diff --git a/test/993-breakpoints-non-debuggable/src/art/Test993.java b/test/993-breakpoints-non-debuggable/src/art/Test993.java
deleted file mode 120000
index 7466288..0000000
--- a/test/993-breakpoints-non-debuggable/src/art/Test993.java
+++ /dev/null
@@ -1 +0,0 @@
-../../../993-breakpoints/src/art/Test993.java
\ No newline at end of file
diff --git a/test/993-breakpoints-non-debuggable/src/art/Test993AttachAgent.java b/test/993-breakpoints-non-debuggable/src/art/Test993AttachAgent.java
deleted file mode 100644
index ac82c84..0000000
--- a/test/993-breakpoints-non-debuggable/src/art/Test993AttachAgent.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package art;
-
-public class Test993AttachAgent {
-    public static native void setupJvmti();
-
-    public static void loadAgent() throws Exception {
-      setupJvmti();
-    }
-}
diff --git a/test/Android.bp b/test/Android.bp
index f68a498..c059458 100644
--- a/test/Android.bp
+++ b/test/Android.bp
@@ -684,7 +684,6 @@
         "991-field-trace-2/field_trace.cc",
         "992-source-data/source_file.cc",
         "993-breakpoints/breakpoints.cc",
-        "993-breakpoints-non-debuggable/onload.cc",
         "996-breakpoint-obsolete/obsolete_breakpoints.cc",
         "1900-track-alloc/alloc.cc",
         "1901-get-bytecodes/bytecodes.cc",
@@ -751,7 +750,6 @@
         "936-search-onload/search_onload.cc",
         "980-redefine-object/redef_object.cc",
         "983-source-transform-verify/source_transform_art.cc",
-        "993-breakpoints-non-debuggable/native_attach_agent.cc",
         // "1952-pop-frame-jit/pop_frame.cc",
         "1959-redefine-object-instrument/fake_redef_object.cc",
         "1960-obsolete-jit-multithread-native/native_say_hi.cc",
@@ -948,7 +946,6 @@
         "800-smali/jni.cc",
         "817-hiddenapi/test_native.cc",
         "909-attach-agent/disallow_debugging.cc",
-        "993-breakpoints-non-debuggable/native_attach_agent.cc",
         "1001-app-image-regions/app_image_regions.cc",
         "1002-notify-startup/startup_interface.cc",
         "1947-breakpoint-redefine-deopt/check_deopt.cc",
@@ -1053,7 +1050,6 @@
         "992-source-data/src/art/Test992.java",
         "992-source-data/src/art/Target2.java",
         "993-breakpoints/src/art/Test993.java",
-        "993-breakpoints-non-debuggable/src/art/Test993AttachAgent.java",
         "994-breakpoint-line/src/art/Test994.java",
         "995-breakpoints-throw/src/art/Test995.java",
         "996-breakpoint-obsolete/src/art/Test996.java",
@@ -1202,7 +1198,6 @@
         "992-source-data/expected-stdout.txt",
         // Need to avoid using hidden-apis
         "993-breakpoints/expected_cts.txt",
-        "993-breakpoints-non-debuggable/expected_cts.txt",
         "994-breakpoint-line/expected-stdout.txt",
         "995-breakpoints-throw/expected-stdout.txt",
         "996-breakpoint-obsolete/expected-stdout.txt",
diff --git a/test/knownfailures.json b/test/knownfailures.json
index 0ea8387..984f3fc 100644
--- a/test/knownfailures.json
+++ b/test/knownfailures.json
@@ -1073,7 +1073,6 @@
           "988-method-trace",
           "989-method-trace-throw",
           "993-breakpoints",
-          "993-breakpoints-non-debuggable",
           "1002-notify-startup",
           "1003-metadata-section-strings",
           "1336-short-finalizer-timeout",
diff --git a/test/ti-agent/common_load.cc b/test/ti-agent/common_load.cc
index ff8b3a8..cc83ad3 100644
--- a/test/ti-agent/common_load.cc
+++ b/test/ti-agent/common_load.cc
@@ -29,7 +29,6 @@
 #include "909-attach-agent/attach.h"
 #include "936-search-onload/search_onload.h"
 #include "1919-vminit-thread-start-timing/vminit.h"
-#include "993-breakpoints-non-debuggable/onload.h"
 
 namespace art {
 
@@ -83,7 +82,6 @@
   { "939-hello-transformation-bcp", common_redefine::OnLoad, nullptr },
   { "941-recursive-obsolete-jit", common_redefine::OnLoad, nullptr },
   { "943-private-recursive-jit", common_redefine::OnLoad, nullptr },
-  { "993-non-debuggable", nullptr, Test993BreakpointsNonDebuggable::OnLoad },
   { "1919-vminit-thread-start-timing", Test1919VMInitThreadStart::OnLoad, nullptr },
   { "2031-zygote-compiled-frame-deopt", nullptr, MinimalOnLoad },
   { "2039-load-transform-larger", common_retransform::OnLoad, nullptr },
diff --git a/test/utils/regen-test-files b/test/utils/regen-test-files
index 5d900e8..b2f2f16 100755
--- a/test/utils/regen-test-files
+++ b/test/utils/regen-test-files
@@ -205,8 +205,6 @@
   "832-cha-recursive",
   # 837-deopt: Dependency on `libarttest`.
   "837-deopt",
-  # 993-breakpoints-non-debuggable: This test needs native code.
-  "993-breakpoints-non-debuggable",
 ])
 
 known_failing_on_hwasan_tests = frozenset([