Version 2.18.0-214.0.dev

Merge commit 'fe8dd70d4751a0184f9b399a1ec188407c775d65' into 'dev'
diff --git a/pkg/dds/lib/src/dap/adapters/dart.dart b/pkg/dds/lib/src/dap/adapters/dart.dart
index bf7cf96..b028eb1 100644
--- a/pkg/dds/lib/src/dap/adapters/dart.dart
+++ b/pkg/dds/lib/src/dap/adapters/dart.dart
@@ -580,15 +580,8 @@
     final vmService = await _vmServiceConnectUri(uri.toString());
     logger?.call('Connected to debugger at $uri!');
 
-    // Send a custom event with the VM Service URI as the editor might want to
-    // know about this (for example so it can connect an embedded DevTools to
-    // this app).
-    sendEvent(
-      RawEventBody({
-        'vmServiceUri': uri.toString(),
-      }),
-      eventType: 'dart.debuggerUris',
-    );
+    // Send debugger URI to the client.
+    sendDebuggerUris(uri);
 
     this.vmService = vmService;
 
@@ -631,6 +624,18 @@
     _debuggerInitializedCompleter.complete();
   }
 
+  void sendDebuggerUris(Uri uri) {
+    // Send a custom event with the VM Service URI as the editor might want to
+    // know about this (for example so it can connect an embedded DevTools to
+    // this app).
+    sendEvent(
+      RawEventBody({
+        'vmServiceUri': uri.toString(),
+      }),
+      eventType: 'dart.debuggerUris',
+    );
+  }
+
   /// Process any existing isolates that may have been created before the
   /// streams above were set up.
   Future<void> _configureExistingIsolates(
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 84694a6..d20cf54 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -1739,6 +1739,13 @@
   // how the vm_tag (kEmbedderTagId) can be set, these tags need to
   // move to the OSThread structure.
   set_user_tag(UserTags::kDefaultUserTag);
+
+  if (group()->obfuscate()) {
+    OS::PrintErr(
+        "Warning: This VM has been configured to obfuscate symbol information "
+        "which violates the Dart standard.\n"
+        "         See dartbug.com/30524 for more information.\n");
+  }
 }
 
 #undef REUSABLE_HANDLE_SCOPE_INIT
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 8814320..47633fe 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -25878,6 +25878,12 @@
         isolate_instructions_image.instructions_relocated_address();
     auto const vm_relocated_address =
         vm_instructions_image.instructions_relocated_address();
+    // The Dart standard requires the output of StackTrace.toString to include
+    // all pending activations with precise source locations (i.e., to expand
+    // inlined frames and provide line and column numbers).
+    buffer.Printf(
+        "Warning: This VM has been configured to produce stack traces "
+        "that violate the Dart standard.\n");
     // This prologue imitates Android's debuggerd to make it possible to paste
     // the stack trace into ndk-stack.
     buffer.Printf(
diff --git a/tools/VERSION b/tools/VERSION
index 1e379b9..eef9402 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 213
+PRERELEASE 214
 PRERELEASE_PATCH 0
\ No newline at end of file