diff options
Diffstat (limited to 'runtime/debug_print.cc')
| -rw-r--r-- | runtime/debug_print.cc | 72 |
1 files changed, 7 insertions, 65 deletions
diff --git a/runtime/debug_print.cc b/runtime/debug_print.cc index cde4d868cb..fd9e050a7d 100644 --- a/runtime/debug_print.cc +++ b/runtime/debug_print.cc @@ -29,7 +29,7 @@ #include "runtime.h" #include "scoped_thread_state_change-inl.h" #include "thread-current-inl.h" -#include "well_known_classes.h" +#include "well_known_classes-inl.h" namespace art { @@ -63,12 +63,10 @@ std::string DescribeSpace(ObjPtr<mirror::Class> klass) { std::string DescribeLoaders(ObjPtr<mirror::ClassLoader> loader, const char* class_descriptor) { std::ostringstream oss; uint32_t hash = ComputeModifiedUtf8Hash(class_descriptor); - ObjPtr<mirror::Class> path_class_loader = - WellKnownClasses::ToClass(WellKnownClasses::dalvik_system_PathClassLoader); - ObjPtr<mirror::Class> dex_class_loader = - WellKnownClasses::ToClass(WellKnownClasses::dalvik_system_DexClassLoader); + ObjPtr<mirror::Class> path_class_loader = WellKnownClasses::dalvik_system_PathClassLoader.Get(); + ObjPtr<mirror::Class> dex_class_loader = WellKnownClasses::dalvik_system_DexClassLoader.Get(); ObjPtr<mirror::Class> delegate_last_class_loader = - WellKnownClasses::ToClass(WellKnownClasses::dalvik_system_DelegateLastClassLoader); + WellKnownClasses::dalvik_system_DelegateLastClassLoader.Get(); // Print the class loader chain. bool found_class = false; @@ -97,13 +95,13 @@ std::string DescribeLoaders(ObjPtr<mirror::ClassLoader> loader, const char* clas loader->GetClass() == dex_class_loader || loader->GetClass() == delegate_last_class_loader) { oss << "("; - ScopedObjectAccessUnchecked soa(Thread::Current()); - StackHandleScope<1> hs(soa.Self()); + Thread* self = Thread::Current(); + StackHandleScope<1> hs(self); Handle<mirror::ClassLoader> handle(hs.NewHandle(loader)); const char* path_separator = ""; const DexFile* base_dex_file = nullptr; VisitClassLoaderDexFiles( - soa, + self, handle, [&](const DexFile* dex_file) { oss << path_separator; @@ -129,60 +127,4 @@ std::string DescribeLoaders(ObjPtr<mirror::ClassLoader> loader, const char* clas return oss.str(); } -void DumpB77342775DebugData(ObjPtr<mirror::Class> target_class, ObjPtr<mirror::Class> src_class) { - std::string target_descriptor_storage; - const char* target_descriptor = target_class->GetDescriptor(&target_descriptor_storage); - const char kCheckedPrefix[] = "Lorg/apache/http/"; - // Avoid spam for other packages. (That spam would break some ART run-tests for example.) - if (strncmp(target_descriptor, kCheckedPrefix, sizeof(kCheckedPrefix) - 1) != 0) { - return; - } - auto matcher = [target_descriptor, target_class](ObjPtr<mirror::Class> klass) - REQUIRES_SHARED(Locks::mutator_lock_) { - if (klass->DescriptorEquals(target_descriptor)) { - LOG(ERROR) << " descriptor match in " - << DescribeLoaders(klass->GetClassLoader(), target_descriptor) - << " match? " << std::boolalpha << (klass == target_class); - } - }; - - std::string source_descriptor_storage; - const char* source_descriptor = src_class->GetDescriptor(&source_descriptor_storage); - - LOG(ERROR) << "Maybe bug 77342775, looking for " << target_descriptor - << " " << target_class.Ptr() << "[" << DescribeSpace(target_class) << "]" - << " defined in " << target_class->GetDexFile().GetLocation() - << "/" << static_cast<const void*>(&target_class->GetDexFile()) - << "\n with loader: " << DescribeLoaders(target_class->GetClassLoader(), target_descriptor); - if (target_class->IsInterface()) { - ObjPtr<mirror::IfTable> iftable = src_class->GetIfTable(); - CHECK(iftable != nullptr); - size_t ifcount = iftable->Count(); - LOG(ERROR) << " in interface table for " << source_descriptor - << " " << src_class.Ptr() << "[" << DescribeSpace(src_class) << "]" - << " defined in " << src_class->GetDexFile().GetLocation() - << "/" << static_cast<const void*>(&src_class->GetDexFile()) - << " ifcount=" << ifcount - << "\n with loader " << DescribeLoaders(src_class->GetClassLoader(), source_descriptor); - for (size_t i = 0; i != ifcount; ++i) { - ObjPtr<mirror::Class> iface = iftable->GetInterface(i); - CHECK(iface != nullptr); - LOG(ERROR) << " iface #" << i << ": " << iface->PrettyDescriptor(); - matcher(iface); - } - } else { - LOG(ERROR) << " in superclass chain for " << source_descriptor - << " " << src_class.Ptr() << "[" << DescribeSpace(src_class) << "]" - << " defined in " << src_class->GetDexFile().GetLocation() - << "/" << static_cast<const void*>(&src_class->GetDexFile()) - << "\n with loader " << DescribeLoaders(src_class->GetClassLoader(), source_descriptor); - for (ObjPtr<mirror::Class> klass = src_class; - klass != nullptr; - klass = klass->GetSuperClass()) { - LOG(ERROR) << " - " << klass->PrettyDescriptor(); - matcher(klass); - } - } -} - } // namespace art |