Files
sdk/pkg/dds
Danny Tuppeny 6482495f01 [dds/dap] Don't handle isolate startup until isolate is in PauseStart state
While investigating the flaky test at https://github.com/dart-lang/sdk/issues/60187#issuecomment-3431336127 I found that we had two paths into `handleThreadStartup` - one which explicitly sent a "pause-on-entry" event, and one that did not. The method sets a flag so it only ever runs once.

This means depending on which instance of `handleThreadStartup` occurs, the client may or may not get the pause-on-entry event.

The case where it would is where the isolate already had a pause-start event when we found it. The case where it would not, is if the isolate did not have a pause event (for example it was None because the isolate was just being created).

I can't come up with a good explanation for why we would try to pre-emptively run startup for an isolate we just discovered with no pauseEvent, so I have removed this branch on the assumption that we would always then see a `PauseStart` event for the isolate and then handled it through the same code path (and therefore, always sent the `pause-on-entry` event prior to calling readyToResume).

Fixes https://github.com/dart-lang/sdk/issues/60187

Change-Id: I213e9865480942b074d4d8470703377ea7ddb519
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/457040
Reviewed-by: Helin Shiah <helinx@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2025-10-23 11:21:58 -07:00
..
2024-07-03 21:02:46 +00:00

pub package package publisher

A package used to spawn the Dart Developer Service (DDS), which is used to communicate with a Dart VM Service instance and provide extended functionality to the core VM Service Protocol.

Functionality

Existing VM Service clients can issue both HTTP, websocket, and SSE requests to a running DDS instance as if it were an instance of the VM Service itself. If a request corresponds to an RPC defined in the VM Service Protocol, DDS will forward the request and return the response from the VM Service. Requests corresponding to an RPC defined in the DDS Protocol will be handled directly by the DDS instance.

SSE Support

For certain web clients it may be preferable or required to communicate with DDS using server-sent events (SSE). DDS has an SSE handler listening for requests on /$debugHandler.

SSE and package:vm_service example

import 'package:sse/sse.dart';
import 'package:vm_service/vm_service.dart';

void main() {
  // Establish connection with DDS using SSE.
  final ddsChannel = SseClient('${ddsUri}\$debugHandler');

  // Wait for ddsChannel to be established
  await ddsChannel.onOpen.first;

  // Initialize VmService using the sink and stream from ddsChannel.
  final vmService = VmService(
    ddsChannel.stream,
    (e) => ddsChannel.sink.add(e),
  );

  // You're ready to query DDS and the VM service!
  print(await vmService.getVersion());
}