Improve logging for GetResolvedMethod's failing to get an inlined_method
We were logging the wrong thing by using method->GetDexFile() rathter than dex_cache->GetDexFile(). We can take this opportunity and update the logging as a whole for this particular case.
Test: ART tests
Bug: 206513969, 154012332
Change-Id: I048035cc86d3df629bc9cc375057e8782acc92b3
diff --git a/runtime/entrypoints/entrypoint_utils-inl.h b/runtime/entrypoints/entrypoint_utils-inl.h
index 87185c6..3333b5f 100644
--- a/runtime/entrypoints/entrypoint_utils-inl.h
+++ b/runtime/entrypoints/entrypoint_utils-inl.h
@@ -102,8 +102,18 @@
if (UNLIKELY(inlined_method == nullptr)) {
LOG(FATAL) << "Could not find an inlined method from an .oat file: "
- << method->GetDexFile()->PrettyMethod(method_index) << " . "
- << "This must be due to duplicate classes or playing wrongly with class loaders";
+ << dex_cache->GetDexFile()->PrettyMethod(method_index) << " ("
+ << dex_cache->GetDexFile()->GetLocation() << "/"
+ << static_cast<const void*>(dex_cache->GetDexFile()) << ") in "
+ << method->PrettyMethod() << " (" << method->GetDexFile()->GetLocation() << "/"
+ << static_cast<const void*>(method->GetDexFile())
+ << "). The outermost method in the chain is: " << outer_method->PrettyMethod()
+ << " (" << outer_method->GetDexFile()->GetLocation() << "/"
+ << static_cast<const void*>(outer_method->GetDexFile())
+ << "). MethodInfo: method_index=" << std::dec << method_index
+ << ", is_in_bootclasspath=" << std::boolalpha
+ << (method_info.GetDexFileIndexKind() == MethodInfo::kKindBCP)
+ << ", dex_file_index=" << std::dec << method_info.GetDexFileIndex() << ".";
UNREACHABLE();
}
DCHECK(!inlined_method->IsRuntimeMethod());