diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
index 358b884..3ee1721 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/utils.dart
@@ -37,6 +37,8 @@
 final Function(Object) getOwnPropertySymbols =
     JS('', 'Object.getOwnPropertySymbols');
 
+final Function(Object) getPrototypeOf = JS('', 'Object.getPrototypeOf');
+
 /// This error indicates a strong mode specific failure, other than a type
 /// assertion failure (TypeError) or CastError.
 void throwTypeError(String message) {
diff --git a/pkg/dev_compiler/tool/input_sdk/private/debugger.dart b/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
index 492291a..86592dc 100644
--- a/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
+++ b/pkg/dev_compiler/tool/input_sdk/private/debugger.dart
@@ -106,7 +106,7 @@
 
     if (!walkPrototypeChain) break;
 
-    sig = safeGetProperty(sig, '__proto__');
+    sig = dart.getPrototypeOf(sig);
   }
 }
 
@@ -462,6 +462,7 @@
       IterableSpanFormatter(),
       MapEntryFormatter(),
       StackTraceFormatter(),
+      ErrorAndExceptionFormatter(),
       FunctionFormatter(),
       HeritageClauseFormatter(),
       LibraryModuleFormatter(),
@@ -802,7 +803,7 @@
   accept(object, config) => object is IterableSpan;
 
   String preview(object) {
-    return '[${object.start}...${object.end-1}]';
+    return '[${object.start}...${object.end - 1}]';
   }
 
   bool hasChildren(object) => true;
@@ -810,6 +811,45 @@
   List<NameValuePair> children(object) => object.children();
 }
 
+/// Formatter for Dart Errors and Exceptions.
+class ErrorAndExceptionFormatter extends ObjectFormatter {
+  static final RegExp _pattern = RegExp(r'\d+\:\d+');
+
+  accept(object, config) => object is Error || object is Exception;
+
+  bool hasChildren(object) => true;
+
+  String preview(object) {
+    var trace = dart.stackTrace(object);
+    // TODO(vsm): Pull our stack mapping logic here.  We should aim to
+    // provide the first meaningful stack frame.
+    var line = '$trace'.split('\n').firstWhere(
+        (l) =>
+            l.contains(_pattern) &&
+            !l.contains('dart:sdk') &&
+            !l.contains('dart_sdk'),
+        orElse: () => null);
+    return line != null ? '${object} at ${line}' : '${object}';
+  }
+
+  List<NameValuePair> children(object) {
+    var trace = dart.stackTrace(object);
+    var entries = LinkedHashSet<NameValuePair>();
+    entries.add(NameValuePair(name: 'stackTrace', value: trace));
+    addInstanceMembers(object, entries);
+    addMetadataChildren(object, entries);
+    return entries.toList();
+  }
+
+  // Add an ObjectFormatter view underneath.
+  void addInstanceMembers(object, Set<NameValuePair> ret) {
+    ret.add(NameValuePair(
+        name: "[[instance members]]",
+        value: object,
+        config: JsonMLConfig.asObject));
+  }
+}
+
 class StackTraceFormatter implements Formatter {
   accept(object, config) => object is StackTrace;
 
