Improve logging for missed fields

Pretty print fields that are not assigned to an offset.

Bug: 168097035
Test: make

Change-Id: Ia389165d5a560cf69f396dbef7e98972b1da5e90
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index c181c22..bf32f3e 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -8552,8 +8552,14 @@
   ShuffleForward<4>(&current_field, &field_offset, &grouped_and_sorted_fields, &gaps);
   ShuffleForward<2>(&current_field, &field_offset, &grouped_and_sorted_fields, &gaps);
   ShuffleForward<1>(&current_field, &field_offset, &grouped_and_sorted_fields, &gaps);
-  CHECK(grouped_and_sorted_fields.empty()) << "Missed " << grouped_and_sorted_fields.size() <<
-      " fields.";
+  if (!grouped_and_sorted_fields.empty()) {
+    std::ostringstream oss;
+    oss << "Missed " << grouped_and_sorted_fields.size() << " fields ";
+    for (ArtField* field : grouped_and_sorted_fields) {
+      oss << field->PrettyField() << " ";
+    }
+    LOG(FATAL) << oss.str();
+  }
   self->EndAssertNoThreadSuspension(old_no_suspend_cause);
 
   // We lie to the GC about the java.lang.ref.Reference.referent field, so it doesn't scan it.