Implement JDWP InvokeMethod and breakpoints on exception throwing.

Change-Id: I1142bee843104f0850fd7270752104d5d73a44f0
diff --git a/src/jdwp/jdwp_main.cc b/src/jdwp/jdwp_main.cc
index 07ffc52..98490e2 100644
--- a/src/jdwp/jdwp_main.cc
+++ b/src/jdwp/jdwp_main.cc
@@ -451,9 +451,9 @@
 }
 
 std::ostream& operator<<(std::ostream& os, const JdwpLocation& rhs) {
-  // TODO: do we really want the Class* and Method* as pointers?
-  os << rhs.typeTag << " " << (void*) rhs.classId << " " << (void*) rhs.methodId << " " << rhs.idx
-     << " (" << Dbg::GetClassDescriptor(rhs.classId) << "." << Dbg::GetMethodName(rhs.classId, rhs.methodId) << ")";
+  os << "JdwpLocation["
+     << Dbg::GetClassDescriptor(rhs.classId) << "." << Dbg::GetMethodName(rhs.classId, rhs.methodId)
+     << "@" << rhs.idx << " " << rhs.typeTag << "]";
   return os;
 }
 
@@ -481,6 +481,17 @@
   return os;
 }
 
+std::ostream& operator<<(std::ostream& os, const JdwpTypeTag& value) {
+  switch (value) {
+  case TT_CLASS: os << "TT_CLASS"; break;
+  case TT_INTERFACE: os << "TT_INTERFACE"; break;
+  case TT_ARRAY: os << "TT_ARRAY"; break;
+  default:
+    os << "JdwpTypeTag[" << static_cast<int32_t>(value) << "]";
+  }
+  return os;
+}
+
 }  // namespace JDWP
 
 }  // namespace art