Start implementing jdb "locals".

This lets us show the names and types of the locals, but all the values
will show up as 0/null. We're going to have to walk the whole stack and
take callee-save frames into account to do that right.

Change-Id: Ic6e115513b6e65ae7ed4b7274e70bc514e83190a
diff --git a/src/jdwp/jdwp_main.cc b/src/jdwp/jdwp_main.cc
index 3bc0d41..28ea303 100644
--- a/src/jdwp/jdwp_main.cc
+++ b/src/jdwp/jdwp_main.cc
@@ -457,6 +457,30 @@
   return os;
 }
 
+std::ostream& operator<<(std::ostream& os, const JdwpTag& value) {
+  switch (value) {
+  case JT_ARRAY: os << "JT_ARRAY"; break;
+  case JT_BYTE: os << "JT_BYTE"; break;
+  case JT_CHAR: os << "JT_CHAR"; break;
+  case JT_OBJECT: os << "JT_OBJECT"; break;
+  case JT_FLOAT: os << "JT_FLOAT"; break;
+  case JT_DOUBLE: os << "JT_DOUBLE"; break;
+  case JT_INT: os << "JT_INT"; break;
+  case JT_LONG: os << "JT_LONG"; break;
+  case JT_SHORT: os << "JT_SHORT"; break;
+  case JT_VOID: os << "JT_VOID"; break;
+  case JT_BOOLEAN: os << "JT_BOOLEAN"; break;
+  case JT_STRING: os << "JT_STRING"; break;
+  case JT_THREAD: os << "JT_THREAD"; break;
+  case JT_THREAD_GROUP: os << "JT_THREAD_GROUP"; break;
+  case JT_CLASS_LOADER: os << "JT_CLASS_LOADER"; break;
+  case JT_CLASS_OBJECT: os << "JT_CLASS_OBJECT"; break;
+  default:
+    os << "JdwpTag[" << static_cast<int32_t>(value) << "]";
+  }
+  return os;
+}
+
 }  // namespace JDWP
 
 }  // namespace art