Skip to content

dart debug session slow to start. #60252

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
bsutton opened this issue Mar 5, 2025 · 50 comments
Open

dart debug session slow to start. #60252

bsutton opened this issue Mar 5, 2025 · 50 comments
Assignees
Labels
area-vm Use area-vm for VM related issues, including code coverage, and the AOT and JIT backends. P2 A bug or feature request we're likely to work on triaged Issue has been triaged by sub team

Comments

@bsutton
Copy link

bsutton commented Mar 5, 2025

I've recently upgraded to dart 3.7.0 (I have a separate flutter install).

Going back to a shelf web server project I tried to start it in debug mode in vs code.

The problem is that the debug launch times now takes 2min+ as opposed to less than 10 seconds previously.
I should note that the app does eventually launch and run to completion.

I thought this might related to my project so I created a brand new dart project with:

dart create slow_debug

Opened that project with dart code and see the same slow start times.

I have now upgraded to dart 3.7.1 but I'm see the same slow start times.

If I run the command directly from (a non vscode) terminal I see the same results.

.../3.7.1/dart-sdk/bin/dart --no-serve-devtools --enable-vm-service=0 -DSILENT_VM_SERVICE=true --write-service-info=file:///tmp/dart-vm-serviceJANFKU/vm.json --pause_isolates_on_exit --pause_isolates_on_start --enable-asserts slow_debug/bin/slow_debug.dart

I've now installed dart 3.6.0 and the problem goes away (i.e. fast debug start times are back).

I've rolled back and forth (between versions) a couple of times and can reproduce the results.

I'm running dart code 3.106.0

I'm running ubuntu 24.10 (I've only upgraded in the last week).
I've restarted my system.

dart info

dart info

If providing this information as part of reporting a bug, please review the information
below to ensure it only contains things you're comfortable posting publicly.

#### General info

- Dart 3.7.0 (stable) (Wed Feb 5 04:53:58 2025 -0800) on "linux_x64"
- on linux / Linux 6.11.0-18-generic #18-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb  7 22:34:25 UTC 2025
- locale is en_AU.UTF-8

#### Project info

- sdk constraint: '^3.7.0'
- dependencies: 
- dev_dependencies: lints, test

#### Process info

| Memory |   CPU | Elapsed time | Command line                                                                               |
| -----: | ----: | -----------: | ------------------------------------------------------------------------------------------ |
| 139 MB |  0.6% |        02:21 | dart --no-serve-devtools --enable-vm-service=0 -DSILENT_VM_SERVICE=true --write-service-info=file:<path>/vm.json --pause_isolates_on_exit --pause_isolates_on_start --enable-asserts <path>/slow_debug.dart |
|  41 MB | 99.9% |        02:21 | dart --no-serve-devtools --enable-vm-service=0 -DSILENT_VM_SERVICE=true --write-service-info=file:<path>/vm.json --pause_isolates_on_exit --pause_isolates_on_start --enable-asserts <path>/slow_debug.dart |
|  56 MB |  0.1% |        02:21 | dart debug_adapter                                                                         |
| 349 MB |  3.3% |        02:25 | dart language-server --protocol=lsp --client-id=VS-Code --client-version=3.106.0 --instrumentation-log-file=<path>/dart.analyzerInstrumentationLogFile |
|  68 MB |  0.2% |        02:25 | dart tooling-daemon --machine                                                              |

@bsutton bsutton added the area-vm Use area-vm for VM related issues, including code coverage, and the AOT and JIT backends. label Mar 5, 2025
@bsutton
Copy link
Author

bsutton commented Mar 5, 2025

its perhaps worth noting that I'm not seeing the same issue when debugging flutter (on the same machine) using the dart vm that comes with flutter.

@bsutton
Copy link
Author

bsutton commented Mar 5, 2025

running (as opposed to debugging) my shelf server works fine from within vscode.

@mraleph
Copy link
Member

mraleph commented Mar 5, 2025

cc @derekxu16 @a-siva

@derekxu16
Copy link
Member

FYI as well, @DanTup

@derekxu16
Copy link
Member

One first thing to note is that the command contains --pause_isolates_on_start, so no progress will be made if it's run in a terminal unless you manually attach DevTools to the VM started by that command.

The VSCode slowness is unexpected though, so I'll continue looking into that.

@DanTup
Copy link
Collaborator

DanTup commented Mar 5, 2025

If I run the command directly from (a non vscode) terminal I see the same results.

Do you mean you see it take a few minutes - or is it possible it never completes. When running at the terminal with --pause_isolates_on_exit and/or --pause_isolates_on_start the isolates will be paused, so unless you attach a debugger and unpause them, I would expect it to be paused forever (and therefore, this could be unrelated to the original issue).

Is it possible you could capture a log file using the Dart: Capture Debugging Logs command from VS Code (using the brand new sample project)? Run the command before starting the debug session, then wait for the app to load and exit, and then click Cancel to stop logging and open the log.

Edit: I don't have easy access to Ubuntu, but I've not been able to reproduce similar on Windows

Edit2: Actually, I have WSL Ubuntu, but I tried there with 3.7.1 but also could not repro.

@derekxu16
Copy link
Member

I also could not reproduce this on Debian with dart 3.7.1.

@a-siva a-siva added the needs-info We need additional information from the issue author (auto-closed after 14 days if no response) label Mar 5, 2025
@bsutton
Copy link
Author

bsutton commented Mar 12, 2025

sorry for the late reply, github wasn't sending me notifications for some reason.

Do you mean you see it take a few minutes - or is it possible it never completes.

it does start after a few minutes.

When running at the terminal with --pause_isolates_on_exit and/or --pause_isolates_on_start the isolates will be paused, so unless you attach a debugger and unpause them, I would expect it to be paused forever (and therefore, this could be unrelated to the original issue).

so ignore the terminal startup issue.

Here is a capture using the brand new sample project.

!! ⚠️ PLEASE REVIEW THIS LOG FOR SENSITIVE INFORMATION BEFORE SHARING ⚠️ !!
Dart Code extension: 3.106.0
Flutter extension: 3.106.0 (not activated)

App: Visual Studio Code
App Host: desktop
Version: linux 1.97.2

Workspace type: Dart (LSP)
Workspace name: slow_debug

Dart (3.7.1): /home/bsutton/.dswitch/channels/stable/versions/3.7.1/dart-sdk
Flutter (3.29.0): /home/bsutton/apps/flutter (No device)


Logging Categories:
    General, AnalyzerTiming, CommandProcesses, DartTest, DartToolingDaemon, DAP, VmService, DevTools, FlutterDaemon, FlutterRun, FlutterTest, WebDaemon

Wed Mar 12 2025 [13:44:05 GMT+1100 (Australian Eastern Daylight Time)] Log file started
[13:44:13] [General] [Info] Starting debug session...
[13:44:13] [General] [Info]     workspace: /home/bsutton/git/slow_debug
[13:44:13] [General] [Info]     program  : /home/bsutton/git/slow_debug/bin/slow_debug.dart
[13:44:13] [General] [Info] Setting cwd based on likely entry point: /home/bsutton/git/slow_debug
[13:44:13] [General] [Info] Using workspace as cwd: /home/bsutton/git/slow_debug
[13:44:13] [General] [Info] Program is 'bin', 'tool', '.dart_tool' so will use Dart debugger
[13:44:13] [General] [Info] Detected launch project as Dart
[13:44:13] [General] [Info] Using Dart debug adapter for this session
[13:44:13] [General] [Info] Checking for errors before launching
[13:44:13] [General] [Info] Debug session starting...
    {
        "name": "Dart ",
        "noDebug": false,
        "request": "launch",
        "type": "dart",
        "program": "/home/bsutton/git/slow_debug/bin/slow_debug.dart",
        "dartCodeDebugSessionID": "session-42b99",
        "projectRootPath": "/home/bsutton/git/slow_debug",
        "cwd": "/home/bsutton/git/slow_debug",
        "toolEnv": {
            "FLUTTER_HOST": "VSCode",
            "PUB_ENVIRONMENT": "vscode.dart-code"
        },
        "sendLogsToClient": true,
        "sendCustomProgressEvents": true,
        "allowAnsiColorOutput": true,
        "additionalProjectPaths": [
            "/home/bsutton/git/slow_debug"
        ],
        "args": [],
        "vmAdditionalArgs": [],
        "toolArgs": [
            "--enable-asserts"
        ],
        "vmServicePort": 0,
        "dartSdkPath": "/home/bsutton/.dswitch/channels/stable/versions/3.7.1/dart-sdk",
        "maxLogLineLength": 2000,
        "debugSdkLibraries": true,
        "debugExternalPackageLibraries": true,
        "showDartDeveloperLogs": true,
        "evaluateGettersInDebugViews": true,
        "showGettersInDebugViews": true,
        "evaluateToStringInDebugViews": true,
        "console": "terminal",
        "debuggerType": 0
    }
[13:44:13] [General] [Info] Using dart debugger for Dart
[13:44:13] [General] [Info] SDK DAP setting is true, set by sdkDaps experiment
[13:44:13] [General] [Info] Running SDK DAP Dart VM in undefined: /home/bsutton/.dswitch/channels/stable/versions/3.7.1/dart-sdk/bin/dart debug_adapter and options {"env":{"FLUTTER_HOST":"VSCode","PUB_ENVIRONMENT":"vscode.dart-code"}}
[13:44:13] [DAP] [Info] Starting debug session 98997c67-7c61-4a4d-b651-16b1b4b228ee
[13:44:13] [DAP] [Info] ==> {"command":"initialize","arguments":{"clientID":"vscode","clientName":"Visual Studio Code","adapterID":"dart","pathFormat":"path","linesStartAt1":true,"columnsStartAt1":true,"supportsVariableType":true,"supportsVariablePaging":true,"supportsRunInTerminalRequest":true,"locale":"en","supportsProgressReporting":true,"supportsInvalidatedEvent":true,"supportsMemoryReferences":true,"supportsArgsCanBeInterpretedByShell":true,"supportsMemoryEvent":true,"supportsStartDebuggingRequest":true,"supportsANSIStyling":true,"supportsDartUris":true},"type":"request","seq":1}
[13:44:13] [DAP] [Info] <== {"seq":1,"type":"response","body":{"exceptionBreakpointFilters":[{"default":false,"filter":"All","label":"All Exceptions"},{"default":true,"filter":"Unhandled","label":"Uncaught Exceptions"}],"supportsANSIStyling":true,"supportsClipboardContext":true,"supportsConditionalBreakpoints":true,"supportsConfigurationDoneRequest":true,"supportsDelayedStackTraceLoading":true,"supportsEvaluateForHovers":true,"supportsLogPoints":true,"supportsRestartFrame":true,"supportsRestartRequest":false,"supportsTerminateRequest":true,"supportsValueFormattingOptions":true},"command":"initialize","request_seq":1,"success":true}
[13:44:13] [DAP] [Info] <== {"seq":2,"type":"event","body":{},"event":"initialized"}
[13:44:13] [DAP] [Info] ==> {"command":"launch","arguments":{"name":"Dart ","noDebug":false,"request":"launch","type":"dart","program":"/home/bsutton/git/slow_debug/bin/slow_debug.dart","dartCodeDebugSessionID":"session-42b99","projectRootPath":"/home/bsutton/git/slow_debug","cwd":"/home/bsutton/git/slow_debug","toolEnv":{"FLUTTER_HOST":"VSCode","PUB_ENVIRONMENT":"vscode.dart-code"},"sendLogsToClient":true,"sendCustomProgressEvents":true,"allowAnsiColorOutput":true,"additionalProjectPaths":["/home/bsutton/git/slow_debug"],"args":[],"vmAdditionalArgs":[],"toolArgs":["--enable-asserts"],"vmServicePort":0,"dartSdkPath":"/home/bsutton/.dswitch/channels/stable/versions/3.7.1/dart-sdk","maxLogLineLength":2000,"debugSdkLibraries":true,"debugExternalPackageLibraries":true,"showDartDeveloperLogs":true,"evaluateGettersInDebugViews":true,"showGettersInDebugViews":true,"evaluateToStringInDebugViews":true,"console":"terminal","debuggerType":0,"__sessionId":"98997c67-7c61-4a4d-b651-16b1b4b228ee"},"type":"request","seq":2}
[13:44:13] [DAP] [Info] ==> {"command":"setExceptionBreakpoints","arguments":{"filters":["Unhandled"]},"type":"request","seq":3}
[13:44:13] [DAP] [Info] <== {"seq":3,"type":"response","body":{},"command":"setExceptionBreakpoints","request_seq":3,"success":true}
[13:44:13] [DAP] [Info] ==> {"command":"configurationDone","type":"request","seq":4}
[13:44:13] [DAP] [Info] <== {"seq":4,"type":"response","command":"configurationDone","request_seq":4,"success":true}
[13:44:13] [DAP] [Info] <== {"seq":5,"type":"event","body":{"message":"Starting…","progressId":"launch_1","title":"Debugger"},"event":"dart.progressStart"}
[13:44:13] [DAP] [Info] <== {"seq":6,"type":"response","command":"launch","request_seq":2,"success":true}
[13:44:13] [DAP] [Info] <== {"seq":7,"type":"request","arguments":{"args":["/home/bsutton/.dswitch/channels/stable/versions/3.7.1/dart-sdk/bin/dart","--no-serve-devtools","--enable-vm-service=0","-DSILENT_VM_SERVICE=true","--write-service-info=file:///tmp/dart-vm-serviceTGEKOO/vm.json","--pause_isolates_on_exit","--pause_isolates_on_start","--enable-asserts","/home/bsutton/git/slow_debug/bin/slow_debug.dart"],"cwd":"/home/bsutton/git/slow_debug","kind":"integrated","title":"Dart "},"command":"runInTerminal"}
[13:44:13] [DAP] [Info] ==> {"command":"threads","type":"request","seq":5}
[13:44:13] [General] [Info] Did not find session 98997c67-7c61-4a4d-b651-16b1b4b228ee to handle dart.progressStart. There were 0 sessions:
[13:44:13] [General] [Info] Event will be queued and processed when the session start event fires
[13:44:13] [DAP] [Info] <== {"seq":8,"type":"response","body":{"threads":[]},"command":"threads","request_seq":5,"success":true}
[13:44:13] [DartToolingDaemon] [Info] ==> {"jsonrpc":"2.0","method":"postEvent","params":{"eventData":{"debugSession":{"debuggerType":"Dart","id":"98997c67-7c61-4a4d-b651-16b1b4b228ee","name":"Dart ","projectRootPath":"/home/bsutton/git/slow_debug"}},"eventKind":"debugSessionStarted","streamId":"Editor"}}
[13:44:13] [General] [Info] Processing delayed event dart.progressStart for session 98997c67-7c61-4a4d-b651-16b1b4b228ee
[13:44:13] [DAP] [Info] ==> {"type":"response","seq":6,"command":"runInTerminal","request_seq":7,"success":true,"body":{"shellProcessId":754654}}
[13:44:18] [General] [Info] Returning cached results for project search
[13:44:18] [General] [Info] Returning cached results for project search
[13:47:03] [DAP] [Info] <== {"seq":9,"type":"event","body":{"message":"Connecting…","progressId":"launch_1"},"event":"dart.progressUpdate"}
[13:47:03] [DAP] [Info] <== {"seq":10,"type":"event","body":{"output":"Connecting to VM Service at ws://127.0.0.1:36641/vlUa5d_fFN0=/ws\n"},"event":"output"}
[13:47:03] [DAP] [Info] <== {"seq":11,"type":"event","body":{"output":"Connected to the VM Service.\n"},"event":"output"}
[13:47:03] [DAP] [Info] <== {"seq":12,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"getSupportedProtocols\",\"params\":{}}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"0","method":"getSupportedProtocols","params":{}}
[13:47:03] [DAP] [Info] <== {"seq":13,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"ProtocolList\",\"protocols\":[{\"protocolName\":\"VM Service\",\"major\":4,\"minor\":16},{\"protocolName\":\"DDS\",\"major\":2,\"minor\":0}]},\"id\":\"0\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":14,"type":"event","body":{"vmServiceUri":"ws://127.0.0.1:36641/vlUa5d_fFN0=/ws"},"event":"dart.debuggerUris"}
[13:47:03] [DAP] [Info] <== {"seq":15,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"streamListen\",\"params\":{\"streamId\":\"Isolate\"}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":16,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"2\",\"method\":\"streamListen\",\"params\":{\"streamId\":\"Debug\"}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":17,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"3\",\"method\":\"streamListen\",\"params\":{\"streamId\":\"Logging\"}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":18,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"4\",\"method\":\"streamListen\",\"params\":{\"streamId\":\"Extension\"}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":19,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"5\",\"method\":\"streamListen\",\"params\":{\"streamId\":\"Service\"}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":20,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"6\",\"method\":\"streamListen\",\"params\":{\"streamId\":\"ToolEvent\"}}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"ProtocolList","protocols":[{"protocolName":"VM Service","major":4,"minor":16},{"protocolName":"DDS","major":2,"minor":0}]},"id":"0"}
[13:47:03] [DartToolingDaemon] [Info] ==> {"jsonrpc":"2.0","method":"postEvent","params":{"eventData":{"debugSession":{"debuggerType":"Dart","id":"98997c67-7c61-4a4d-b651-16b1b4b228ee","name":"Dart ","projectRootPath":"/home/bsutton/git/slow_debug","vmServiceUri":"ws://127.0.0.1:36641/vlUa5d_fFN0=/ws"}},"eventKind":"debugSessionChanged","streamId":"Editor"}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"1","method":"streamListen","params":{"streamId":"Isolate"}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"2","method":"streamListen","params":{"streamId":"Debug"}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"3","method":"streamListen","params":{"streamId":"Logging"}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"4","method":"streamListen","params":{"streamId":"Extension"}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"5","method":"streamListen","params":{"streamId":"Service"}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"6","method":"streamListen","params":{"streamId":"ToolEvent"}}
[13:47:03] [DAP] [Info] <== {"seq":21,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"5\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":22,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"6\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":23,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"1\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":24,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"2\"}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"5"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"6"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"1"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"2"}
[13:47:03] [DAP] [Info] <== {"seq":25,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"3\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":26,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"4\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":27,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"7\",\"method\":\"getVM\",\"params\":{}}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"3"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"4"}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"7","method":"getVM","params":{}}
[13:47:03] [DAP] [Info] <== {"seq":28,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"VM\",\"name\":\"vm\",\"architectureBits\":64,\"hostCPU\":\"AMD Ryzen 7 3700X 8-Core Process\",\"operatingSystem\":\"linux\",\"targetCPU\":\"x64\",\"version\":\"3.7.1 (stable) (Tue Feb 25 13:45:31 2025 -0800) on \\\"linux_x64\\\"\",\"_features\":\"release no-code_comments no-dwarf_stack_traces_mode no-dedup_instructions no-tsan no-msan asserts use_field_guards use_osr no-branch_coverage coverage x64 linux no-compressed-pointers\",\"_profilerMode\":\"Dart\",\"pid\":754944,\"startTime\":1741747453626,\"_embedder\":\"Dart VM\",\"_maxRSS\":189767680,\"_currentRSS\":151048192,\"isolates\":[{\"type\":\"@Isolate\",\"id\":\"isolates/4133602364202663\",\"name\":\"main\",\"number\":\"4133602364202663\",\"isSystemIsolate\":false,\"isolateGroupId\":\"isolateGroups/4808976720720526\"}],\"systemIsolates\":[{\"type\":\"@Isolate\",\"id\":\"isolates/973730525348571\",\"name\":\"vm-service\",\"number\":\"973730525348571\",\"isSystemIsolate\":true,\"isolateGroupId\":\"isolateGroups/8377378074675735\"},{\"type\":\"@Isolate\",\"id\":\"isolates/3670856493236135\",\"name\":\"kernel-service\",\"number\":\"3670856493236135\",\"isSystemIsolate\":true,\"isolateGroupId\":\"isolateGroups/6441934690819230\"}],\"isolateGroups\":[{\"type\":\"@IsolateGroup\",\"id\":\"isolateGroups/4808976720720526\",\"name\":\"bin/slow_debug.dart\",\"number\":\"4808976720720526\",\"isSystemIsolateGroup\":false}],\"systemIsolateGroups\":[{\"type\":\"@IsolateGroup\",\"id\":\"isolateGroups/8377378074675735\",\"name\":\"vm-service\",\"number\":\"8377378074675735\",\"isSystemIsolateGroup\":true},{\"type\":\"@IsolateGroup\",\"id\":\"isolateGroups/6441934690819230\",\"name\":\"kernel-service\",\"number\":\"6441934690819230\",\"isSystemIsolateGroup\":true}],\"_currentMemory\":104026112},\"id\":\"7\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":29,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"8\",\"method\":\"requirePermissionToResume\",\"params\":{\"onPauseStart\":true,\"onPauseReload\":false,\"onPauseExit\":true}}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"VM","name":"vm","architectureBits":64,"hostCPU":"AMD Ryzen 7 3700X 8-Core Process","operatingSystem":"linux","targetCPU":"x64","version":"3.7.1 (stable) (Tue Feb 25 13:45:31 2025 -0800) on \"linux_x64\"","_features":"release no-code_comments no-dwarf_stack_traces_mode no-dedup_instructions no-tsan no-msan asserts use_field_guards use_osr no-branch_coverage coverage x64 linux no-compressed-pointers","_profilerMode":"Dart","pid":754944,"startTime":1741747453626,"_embedder":"Dart VM","_maxRSS":189767680,"_currentRSS":151048192,"isolates":[{"type":"@Isolate","id":"isolates/4133602364202663","name":"main","number":"4133602364202663","isSystemIsolate":false,"isolateGroupId":"isolateGroups/4808976720720526"}],"systemIsolates":[{"type":"@Isolate","id":"isolates/973730525348571","name":"vm-service","number":"973730525348571","isSystemIsolate":true,"isolateGroupId":"isolateGroups/8377378074675735"},{"type":"@Isolate","id":"isolates/3670856493236135","name":"kernel-service","number":"3670856493236135","isSystemIsolate":true,"isolateGroupId":"isolateGroups/6441934690819230"}],"isolateGroups":[{"type":"@IsolateGroup","id":"isolateGroups/4808976720720526","name":"bin/slow_debug.dart","number":"4808976720720526","isSystemIsolateGroup":false}],"systemIsolateGroups":[{"type":"@IsolateGroup","id":"isolateGroups/8377378074675735","name":"vm-service","number":"8377378074675735","isSystemIsolateGroup":true},{"type":"@IsolateGroup","id":"isolateGroups/6441934690819230","name":"kernel-service","number":"6441934690819230","isSystemIsolateGroup":true}],"_currentMemory":104026112},"id":"7"}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"8","method":"requirePermissionToResume","params":{"onPauseStart":true,"onPauseReload":false,"onPauseExit":true}}
[13:47:03] [DAP] [Info] <== {"seq":30,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"8\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":31,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"9\",\"method\":\"getDartDevelopmentServiceVersion\",\"params\":{}}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"8"}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"9","method":"getDartDevelopmentServiceVersion","params":{}}
[13:47:03] [DAP] [Info] <== {"seq":32,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Version\",\"major\":2,\"minor\":0},\"id\":\"9\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":33,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"10\",\"method\":\"requireUserPermissionToResume\",\"params\":{\"onPauseStart\":false,\"onPauseExit\":false}}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Version","major":2,"minor":0},"id":"9"}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"10","method":"requireUserPermissionToResume","params":{"onPauseStart":false,"onPauseExit":false}}
[13:47:03] [DAP] [Info] <== {"seq":34,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"10\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":35,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"11\",\"method\":\"getIsolate\",\"params\":{\"isolateId\":\"isolates/4133602364202663\"}}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"10"}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"11","method":"getIsolate","params":{"isolateId":"isolates/4133602364202663"}}
[13:47:03] [DAP] [Info] <== {"seq":36,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Isolate\",\"id\":\"isolates/4133602364202663\",\"name\":\"main\",\"number\":\"4133602364202663\",\"isSystemIsolate\":false,\"isolateGroupId\":\"isolateGroups/4808976720720526\",\"_originNumber\":\"4133602364202663\",\"startTime\":1741747454068,\"_heaps\":{\"new\":{\"type\":\"HeapSpace\",\"name\":\"new\",\"vmName\":\"Scavenger\",\"collections\":0,\"avgCollectionPeriodMillis\":0.0,\"used\":92416,\"capacity\":524288,\"external\":0,\"time\":0.0},\"old\":{\"type\":\"HeapSpace\",\"name\":\"old\",\"vmName\":\"PageSpace\",\"collections\":0,\"used\":5122576,\"capacity\":6074368,\"external\":0,\"time\":0.0,\"avgCollectionPeriodMillis\":0.0}},\"isolateFlags\":[{\"name\":\"is_system_isolate\",\"valueAsString\":\"false\"},{\"name\":\"is_service_isolate\",\"valueAsString\":\"false\"},{\"name\":\"is_kernel_isolate\",\"valueAsString\":\"false\"}],\"runnable\":true,\"livePorts\":1,\"pauseOnExit\":true,\"_isReloading\":false,\"pauseEvent\":{\"type\":\"Event\",\"kind\":\"PauseStart\",\"isolateGroup\":{\"type\":\"@IsolateGroup\",\"id\":\"isolateGroups/4808976720720526\",\"name\":\"bin/slow_debug.dart\",\"number\":\"4808976720720526\",\"isSystemIsolateGroup\":false},\"isolate\":{\"type\":\"@Isolate\",\"id\":\"isolates/4133602364202663\",\"name\":\"main\",\"number\":\"4133602364202663\",\"isSystemIsolate\":false,\"isolateGroupId\":\"isolateGroups/4808976720720526\"},\"timestamp\":1741747454300},\"rootLib\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@20242564\",\"name\":\"\",\"uri\":\"file:///home/bsutton/git/slow_debug/bin/slow_debug.dart\"},\"libraries\":[{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@0150898\",\"name\":\"dart.core\",\"uri\":\"dart:core\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@1026248\",\"name\":\"dart.isolate\",\"uri\":\"dart:isolate\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@2408521\",\"name\":\"dart.mirrors\",\"uri\":\"dart:mirrors\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@3099033\",\"name\":\"dart._compact_hash\",\"uri\":\"dart:_compact_hash\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@4220832\",\"name\":\"dart.collection\",\"uri\":\"dart:collection\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@5048458\",\"name\":\"dart.async\",\"uri\":\"dart:async\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@6383715\",\"name\":\"dart.developer\",\"uri\":\"dart:developer\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@7320332\",\"name\":\"nativewrappers\",\"uri\":\"dart:nativewrappers\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@8027147\",\"name\":\"dart.typed_data\",\"uri\":\"dart:typed_data\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@9050071\",\"name\":\"dart.ffi\",\"uri\":\"dart:ffi\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@10040228\",\"name\":\"dart._internal\",\"uri\":\"dart:_internal\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@11003594\",\"name\":\"dart.convert\",\"uri\":\"dart:convert\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@12383281\",\"name\":\"dart.math\",\"uri\":\"dart:math\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@13168694\",\"name\":\"dart._vmservice\",\"uri\":\"dart:_vmservice\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@14398151\",\"name\":\"dart.concurrent\",\"uri\":\"dart:concurrent\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@15069316\",\"name\":\"dart.io\",\"uri\":\"dart:io\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@16205832\",\"name\":\"vmservice_io\",\"uri\":\"dart:vmservice_io\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@17225868\",\"name\":\"builtin\",\"uri\":\"dart:_builtin\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@18463476\",\"name\":\"dart._http\",\"uri\":\"dart:_http\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@19180024\",\"name\":\"dart.cli\",\"uri\":\"dart:cli\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@20242564\",\"name\":\"\",\"uri\":\"file:///home/bsutton/git/slow_debug/bin/slow_debug.dart\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@21469207\",\"name\":\"\",\"uri\":\"package:slow_debug/slow_debug.dart\"}],\"breakpoints\":[],\"exceptionPauseMode\":\"None\",\"_debuggerSettings\":{\"_exceptions\":\"none\"},\"extensionRPCs\":[\"ext.dart.io.httpEnableTimelineLogging\",\"ext.dart.io.getSocketProfile\",\"ext.dart.io.socketProfilingEnabled\",\"ext.dart.io.clearSocketProfile\",\"ext.dart.io.getVersion\",\"ext.dart.io.getHttpProfile\",\"ext.dart.io.getHttpProfileRequest\",\"ext.dart.io.clearHttpProfile\"],\"isolate_group\":{\"type\":\"@IsolateGroup\",\"id\":\"isolateGroups/4808976720720526\",\"name\":\"bin/slow_debug.dart\",\"number\":\"4808976720720526\",\"isSystemIsolateGroup\":false}},\"id\":\"11\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":37,"type":"event","body":{"reason":"started","threadId":1},"event":"thread"}
[13:47:03] [DAP] [Info] <== {"seq":38,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"12\",\"method\":\"getIsolate\",\"params\":{\"isolateId\":\"isolates/4133602364202663\"}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":39,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"13\",\"method\":\"setIsolatePauseMode\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"exceptionPauseMode\":\"Unhandled\"}}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Isolate","id":"isolates/4133602364202663","name":"main","number":"4133602364202663","isSystemIsolate":false,"isolateGroupId":"isolateGroups/4808976720720526","_originNumber":"4133602364202663","startTime":1741747454068,"_heaps":{"new":{"type":"HeapSpace","name":"new","vmName":"Scavenger","collections":0,"avgCollectionPeriodMillis":0.0,"used":92416,"capacity":524288,"external":0,"time":0.0},"old":{"type":"HeapSpace","name":"old","vmName":"PageSpace","collections":0,"used":5122576,"capacity":6074368,"external":0,"time":0.0,"avgCollectionPeriodMillis":0.0}},"isolateFlags":[{"name":"is_system_isolate","valueAsString":"false"},{"name":"is_service_isolate","valueAsString":"false"},{"name":"is_kernel_isolate","valueAsString":"false"}],"runnable":true,"livePorts":1,"pauseOnExit":true,"_isReloading":false,"pauseEvent":{"type":"Event","kind":"PauseStart","isolateGroup":{"type":"@IsolateGroup","id":"isolateGroups/4808976720720526","name":"bin/slow_debug.dart","number":"4808976720720526","isSystemIsolateGroup":false},"isolate":{"type":"@Isolate","id":"isolates/4133602364202663","name":"main","number":"4133602364202663","isSystemIsolate":false,"isolateGroupId":"isolateGroups/4808976720720526"},"timestamp":1741747454300},"rootLib":{"type":"@Library","fixedId":true,"id":"libraries/@20242564","name":"","uri":"file:///home/bsutton/git/slow_debug/bin/slow_debug.dart"},"libraries":[{"type":"@Library","fixedId":true,"id":"libraries/@0150898","name":"dart.core","uri":"dart:core"},{"type":"@Library","fixedId":true,"id":"libraries/@1026248","name":"dart.isolate","uri":"dart:isolate"},{"type":"@Library","fixedId":true,"id":"libraries/@2408521","name":"dart.mirrors","uri":"dart:mirrors"},{"type":"@Library","fixedId":true,"id":"libraries/@3099033","name":"dart._compact_hash","uri":"dart:_compact_hash"},{"type":"@Library","fixedId":true,"id":"libraries/@4220832","name":"dart.collection","uri":"dart:collection"},{"type":"@Library","fixedId":true,"id":"libraries/@5048458","name":"dart.async","uri":"dart:async"},{"type":"@Library","fixedId":true,"id":"libraries/@6383715","name":"dart.developer","uri":"dart:developer"},{"type":"@Library","fixedId":true,"id":"libraries/@7320332","name":"nativewrappers","uri":"dart:nativewrappers"},{"type":"@Library","fixedId":true,"id":"libraries/@8027147","name":"dart.typed_data","uri":"dart:typed_data"},{"type":"@Library","fixedId":true,"id":"libraries/@9050071","name":"dart.ffi","uri":"dart:ffi"},{"type":"@Library","fixedId":true,"id":"libraries/@10040228","name":"dart._internal","uri":"dart:_internal"},{"type":"@Library","fixedId":true,"id":"libraries/@11003594","name":"dart.convert","uri":"dart:convert"},{"type":"@Library","fixedId":true,"id":"libraries/@12383281","name":"dart.math","uri":"dart:math"},{"type":"@Library","fixedId":true,"id":"libraries/@13168694","name":"dart._vmservice","uri":"dart:_vmservice"},{"type":"@Library","fixedId":true,"id":"libraries/@14398151","name":"dart.concurrent","uri":"dart:concurrent"},{"type":"@Library","fixedId":true,"id":"libraries/@15069316","name":"dart.io","uri":"dart:io"},{"type":"@Library","fixedId":true,"id":"libraries/@16205832","name":"vmservice_io","uri":"dart:vmservice_io"},{"type":"@Library","fixedId":true,"id":"libraries/@17225868","name":"builtin","uri":"dart:_builtin"},{"type":"@Library","fixedId":true,"id":"libraries/@18463476","name":"dart._http","uri":"dart:_http"},{"type":"@Library","fixedId":true,"id":"libraries/@19180024","name":"dart.cli","uri":"dart:cli"},{"type":"@Library","fixedId":true,"id":"libraries/@20242564","name":"","uri":"file:///home/bsutton/git/slow_debug/bin/slow_debug.dart"},{"type":"@Library","fixedId":true,"id":"libraries/@21469207","name":"","uri":"package:slow_debug/slow_debug.dart"}],"breakpoints":[],"exceptionPauseMode":"None","_debuggerSettings":{"_exceptions":"none"},"extensionRPCs":["ext.dart.io.httpEnableTimelineLogging","ext.dart.io.getSocketProfile","ext.dart.io.socketProfilingEnabled","ext.dart.io.clearSocketProfile","ext.dart.io.getVersion","ext.dart.io.getHttpProfile","ext.dart.io.getHttpProfileRequest","ext.dart.io.clearHttpProfile"],"isolate_group":{"type":"@IsolateGroup","id":"isolateGroups/4808976720720526","name":"bin/slow_debug.dart","number":"4808976720720526","isSystemIsolateGroup":false}},"id":"11"}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"12","method":"getIsolate","params":{"isolateId":"isolates/4133602364202663"}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"13","method":"setIsolatePauseMode","params":{"isolateId":"isolates/4133602364202663","exceptionPauseMode":"Unhandled"}}
[13:47:03] [DAP] [Info] <== {"seq":40,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Isolate\",\"id\":\"isolates/4133602364202663\",\"name\":\"main\",\"number\":\"4133602364202663\",\"isSystemIsolate\":false,\"isolateGroupId\":\"isolateGroups/4808976720720526\",\"_originNumber\":\"4133602364202663\",\"startTime\":1741747454069,\"_heaps\":{\"new\":{\"type\":\"HeapSpace\",\"name\":\"new\",\"vmName\":\"Scavenger\",\"collections\":0,\"avgCollectionPeriodMillis\":0.0,\"used\":93072,\"capacity\":524288,\"external\":0,\"time\":0.0},\"old\":{\"type\":\"HeapSpace\",\"name\":\"old\",\"vmName\":\"PageSpace\",\"collections\":0,\"used\":5122768,\"capacity\":6074368,\"external\":0,\"time\":0.0,\"avgCollectionPeriodMillis\":0.0}},\"isolateFlags\":[{\"name\":\"is_system_isolate\",\"valueAsString\":\"false\"},{\"name\":\"is_service_isolate\",\"valueAsString\":\"false\"},{\"name\":\"is_kernel_isolate\",\"valueAsString\":\"false\"}],\"runnable\":true,\"livePorts\":1,\"pauseOnExit\":true,\"_isReloading\":false,\"pauseEvent\":{\"type\":\"Event\",\"kind\":\"PauseStart\",\"isolateGroup\":{\"type\":\"@IsolateGroup\",\"id\":\"isolateGroups/4808976720720526\",\"name\":\"bin/slow_debug.dart\",\"number\":\"4808976720720526\",\"isSystemIsolateGroup\":false},\"isolate\":{\"type\":\"@Isolate\",\"id\":\"isolates/4133602364202663\",\"name\":\"main\",\"number\":\"4133602364202663\",\"isSystemIsolate\":false,\"isolateGroupId\":\"isolateGroups/4808976720720526\"},\"timestamp\":1741747454300},\"rootLib\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@20242564\",\"name\":\"\",\"uri\":\"file:///home/bsutton/git/slow_debug/bin/slow_debug.dart\"},\"libraries\":[{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@0150898\",\"name\":\"dart.core\",\"uri\":\"dart:core\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@1026248\",\"name\":\"dart.isolate\",\"uri\":\"dart:isolate\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@2408521\",\"name\":\"dart.mirrors\",\"uri\":\"dart:mirrors\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@3099033\",\"name\":\"dart._compact_hash\",\"uri\":\"dart:_compact_hash\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@4220832\",\"name\":\"dart.collection\",\"uri\":\"dart:collection\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@5048458\",\"name\":\"dart.async\",\"uri\":\"dart:async\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@6383715\",\"name\":\"dart.developer\",\"uri\":\"dart:developer\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@7320332\",\"name\":\"nativewrappers\",\"uri\":\"dart:nativewrappers\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@8027147\",\"name\":\"dart.typed_data\",\"uri\":\"dart:typed_data\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@9050071\",\"name\":\"dart.ffi\",\"uri\":\"dart:ffi\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@10040228\",\"name\":\"dart._internal\",\"uri\":\"dart:_internal\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@11003594\",\"name\":\"dart.convert\",\"uri\":\"dart:convert\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@12383281\",\"name\":\"dart.math\",\"uri\":\"dart:math\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@13168694\",\"name\":\"dart._vmservice\",\"uri\":\"dart:_vmservice\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@14398151\",\"name\":\"dart.concurrent\",\"uri\":\"dart:concurrent\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@15069316\",\"name\":\"dart.io\",\"uri\":\"dart:io\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@16205832\",\"name\":\"vmservice_io\",\"uri\":\"dart:vmservice_io\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@17225868\",\"name\":\"builtin\",\"uri\":\"dart:_builtin\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@18463476\",\"name\":\"dart._http\",\"uri\":\"dart:_http\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@19180024\",\"name\":\"dart.cli\",\"uri\":\"dart:cli\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@20242564\",\"name\":\"\",\"uri\":\"file:///home/bsutton/git/slow_debug/bin/slow_debug.dart\"},{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"libraries/@21469207\",\"name\":\"\",\"uri\":\"package:slow_debug/slow_debug.dart\"}],\"breakpoints\":[],\"exceptionPauseMode\":\"None\",\"_debuggerSettings\":{\"_exceptions\":\"none\"},\"extensionRPCs\":[\"ext.dart.io.httpEnableTimelineLogging\",\"ext.dart.io.getSocketProfile\",\"ext.dart.io.socketProfilingEnabled\",\"ext.dart.io.clearSocketProfile\",\"ext.dart.io.getVersion\",\"ext.dart.io.getHttpProfile\",\"ext.dart.io.getHttpProfileRequest\",\"ext.dart.io.clearHttpProfile\"],\"isolate_group\":{\"type\":\"@IsolateGroup\",\"id\":\"isolateGroups/4808976720720526\",\"name\":\"bin/slow_debug.dart\",\"number\":\"4808976720720526\",\"isSystemIsolateGroup\":false}},\"id\":\"12\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":41,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"14\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@0150898\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":42,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"15\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@1026248\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":43,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"16\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@2408521\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Isolate","id":"isolates/4133602364202663","name":"main","number":"4133602364202663","isSystemIsolate":false,"isolateGroupId":"isolateGroups/4808976720720526","_originNumber":"4133602364202663","startTime":1741747454069,"_heaps":{"new":{"type":"HeapSpace","name":"new","vmName":"Scavenger","collections":0,"avgCollectionPeriodMillis":0.0,"used":93072,"capacity":524288,"external":0,"time":0.0},"old":{"type":"HeapSpace","name":"old","vmName":"PageSpace","collections":0,"used":5122768,"capacity":6074368,"external":0,"time":0.0,"avgCollectionPeriodMillis":0.0}},"isolateFlags":[{"name":"is_system_isolate","valueAsString":"false"},{"name":"is_service_isolate","valueAsString":"false"},{"name":"is_kernel_isolate","valueAsString":"false"}],"runnable":true,"livePorts":1,"pauseOnExit":true,"_isReloading":false,"pauseEvent":{"type":"Event","kind":"PauseStart","isolateGroup":{"type":"@IsolateGroup","id":"isolateGroups/4808976720720526","name":"bin/slow_debug.dart","number":"4808976720720526","isSystemIsolateGroup":false},"isolate":{"type":"@Isolate","id":"isolates/4133602364202663","name":"main","number":"4133602364202663","isSystemIsolate":false,"isolateGroupId":"isolateGroups/4808976720720526"},"timestamp":1741747454300},"rootLib":{"type":"@Library","fixedId":true,"id":"libraries/@20242564","name":"","uri":"file:///home/bsutton/git/slow_debug/bin/slow_debug.dart"},"libraries":[{"type":"@Library","fixedId":true,"id":"libraries/@0150898","name":"dart.core","uri":"dart:core"},{"type":"@Library","fixedId":true,"id":"libraries/@1026248","name":"dart.isolate","uri":"dart:isolate"},{"type":"@Library","fixedId":true,"id":"libraries/@2408521","name":"dart.mirrors","uri":"dart:mirrors"},{"type":"@Library","fixedId":true,"id":"libraries/@3099033","name":"dart._compact_hash","uri":"dart:_compact_hash"},{"type":"@Library","fixedId":true,"id":"libraries/@4220832","name":"dart.collection","uri":"dart:collection"},{"type":"@Library","fixedId":true,"id":"libraries/@5048458","name":"dart.async","uri":"dart:async"},{"type":"@Library","fixedId":true,"id":"libraries/@6383715","name":"dart.developer","uri":"dart:developer"},{"type":"@Library","fixedId":true,"id":"libraries/@7320332","name":"nativewrappers","uri":"dart:nativewrappers"},{"type":"@Library","fixedId":true,"id":"libraries/@8027147","name":"dart.typed_data","uri":"dart:typed_data"},{"type":"@Library","fixedId":true,"id":"libraries/@9050071","name":"dart.ffi","uri":"dart:ffi"},{"type":"@Library","fixedId":true,"id":"libraries/@10040228","name":"dart._internal","uri":"dart:_internal"},{"type":"@Library","fixedId":true,"id":"libraries/@11003594","name":"dart.convert","uri":"dart:convert"},{"type":"@Library","fixedId":true,"id":"libraries/@12383281","name":"dart.math","uri":"dart:math"},{"type":"@Library","fixedId":true,"id":"libraries/@13168694","name":"dart._vmservice","uri":"dart:_vmservice"},{"type":"@Library","fixedId":true,"id":"libraries/@14398151","name":"dart.concurrent","uri":"dart:concurrent"},{"type":"@Library","fixedId":true,"id":"libraries/@15069316","name":"dart.io","uri":"dart:io"},{"type":"@Library","fixedId":true,"id":"libraries/@16205832","name":"vmservice_io","uri":"dart:vmservice_io"},{"type":"@Library","fixedId":true,"id":"libraries/@17225868","name":"builtin","uri":"dart:_builtin"},{"type":"@Library","fixedId":true,"id":"libraries/@18463476","name":"dart._http","uri":"dart:_http"},{"type":"@Library","fixedId":true,"id":"libraries/@19180024","name":"dart.cli","uri":"dart:cli"},{"type":"@Library","fixedId":true,"id":"libraries/@20242564","name":"","uri":"file:///home/bsutton/git/slow_debug/bin/slow_debug.dart"},{"type":"@Library","fixedId":true,"id":"libraries/@21469207","name":"","uri":"package:slow_debug/slow_debug.dart"}],"breakpoints":[],"exceptionPauseMode":"None","_debuggerSettings":{"_exceptions":"none"},"extensionRPCs":["ext.dart.io.httpEnableTimelineLogging","ext.dart.io.getSocketProfile","ext.dart.io.socketProfilingEnabled","ext.dart.io.clearSocketProfile","ext.dart.io.getVersion","ext.dart.io.getHttpProfile","ext.dart.io.getHttpProfileRequest","ext.dart.io.clearHttpProfile"],"isolate_group":{"type":"@IsolateGroup","id":"isolateGroups/4808976720720526","name":"bin/slow_debug.dart","number":"4808976720720526","isSystemIsolateGroup":false}},"id":"12"}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"14","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@0150898","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"15","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@1026248","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"16","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@2408521","isDebuggable":true}}
[13:47:03] [DAP] [Info] <== {"seq":44,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"17\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@3099033\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":45,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"18\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@4220832\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":46,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"19\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@5048458\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":47,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"20\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@6383715\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":48,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"21\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@7320332\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":49,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"22\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@8027147\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":50,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"23\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@9050071\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":51,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"24\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@10040228\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":52,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"25\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@11003594\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":53,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"26\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@12383281\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":54,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"27\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@13168694\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":55,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"28\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@14398151\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":56,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"29\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@15069316\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":57,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"30\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@16205832\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":58,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"31\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@17225868\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":59,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"32\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@18463476\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":60,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"33\",\"method\":\"setLibraryDebuggable\",\"params\":{\"isolateId\":\"isolates/4133602364202663\",\"libraryId\":\"libraries/@19180024\",\"isDebuggable\":true}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":61,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"method\":\"streamNotify\",\"params\":{\"streamId\":\"Debug\",\"event\":{\"type\":\"Event\",\"kind\":\"_DebuggerSettingsUpdate\",\"isolateGroup\":{\"type\":\"@IsolateGroup\",\"id\":\"isolateGroups/4808976720720526\",\"name\":\"bin/slow_debug.dart\",\"number\":\"4808976720720526\",\"isSystemIsolateGroup\":false},\"isolate\":{\"type\":\"@Isolate\",\"id\":\"isolates/4133602364202663\",\"name\":\"main\",\"number\":\"4133602364202663\",\"isSystemIsolate\":false,\"isolateGroupId\":\"isolateGroups/4808976720720526\"},\"timestamp\":1741747623319}}}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"17","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@3099033","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"18","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@4220832","isDebuggable":true}}
[13:47:03] [DAP] [Info] <== {"seq":62,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"13\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":63,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"14\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":64,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"15\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":65,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"16\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":66,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"17\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":67,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"18\"}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"19","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@5048458","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"20","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@6383715","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"21","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@7320332","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"22","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@8027147","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"23","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@9050071","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"24","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@10040228","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"25","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@11003594","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"26","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@12383281","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"27","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@13168694","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"28","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@14398151","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"29","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@15069316","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"30","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@16205832","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"31","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@17225868","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"32","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@18463476","isDebuggable":true}}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"33","method":"setLibraryDebuggable","params":{"isolateId":"isolates/4133602364202663","libraryId":"libraries/@19180024","isDebuggable":true}}
[13:47:03] [DAP] [Info] <== {"seq":68,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"19\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":69,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"20\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":70,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"21\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":71,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"22\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":72,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"23\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":73,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"24\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":74,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"25\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":75,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"26\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":76,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"27\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":77,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"28\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":78,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"29\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":79,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"30\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":80,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"31\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":81,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"32\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":82,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"33\"}"},"event":"dart.log"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","method":"streamNotify","params":{"streamId":"Debug","event":{"type":"Event","kind":"_DebuggerSettingsUpdate","isolateGroup":{"type":"@IsolateGroup","id":"isolateGroups/4808976720720526","name":"bin/slow_debug.dart","number":"4808976720720526","isSystemIsolateGroup":false},"isolate":{"type":"@Isolate","id":"isolates/4133602364202663","name":"main","number":"4133602364202663","isSystemIsolate":false,"isolateGroupId":"isolateGroups/4808976720720526"},"timestamp":1741747623319}}}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"13"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"14"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"15"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"16"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"17"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"18"}
[13:47:03] [DAP] [Info] <== {"seq":83,"type":"event","body":{"allThreadsStopped":false,"reason":"entry","threadId":1},"event":"stopped"}
[13:47:03] [DAP] [Info] <== {"seq":84,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"34\",\"method\":\"readyToResume\",\"params\":{\"isolateId\":\"isolates/4133602364202663\"}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":85,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"method\":\"streamNotify\",\"params\":{\"streamId\":\"Debug\",\"event\":{\"type\":\"Event\",\"kind\":\"Resume\",\"isolateGroup\":{\"type\":\"@IsolateGroup\",\"id\":\"isolateGroups/4808976720720526\",\"name\":\"bin/slow_debug.dart\",\"number\":\"4808976720720526\",\"isSystemIsolateGroup\":false},\"isolate\":{\"type\":\"@Isolate\",\"id\":\"isolates/4133602364202663\",\"name\":\"main\",\"number\":\"4133602364202663\",\"isSystemIsolate\":false,\"isolateGroupId\":\"isolateGroups/4808976720720526\"},\"timestamp\":1741747623340}}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":86,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"34\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":87,"type":"event","body":{"progressId":"launch_1"},"event":"dart.progressEnd"}
[13:47:03] [DAP] [Info] <== {"seq":88,"type":"event","body":{"allThreadsContinued":false,"threadId":1},"event":"continued"}
[13:47:03] [DAP] [Info] <== {"seq":89,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"method\":\"streamNotify\",\"params\":{\"streamId\":\"Debug\",\"event\":{\"type\":\"Event\",\"kind\":\"PauseExit\",\"isolateGroup\":{\"type\":\"@IsolateGroup\",\"id\":\"isolateGroups/4808976720720526\",\"name\":\"bin/slow_debug.dart\",\"number\":\"4808976720720526\",\"isSystemIsolateGroup\":false},\"isolate\":{\"type\":\"@Isolate\",\"id\":\"isolates/4133602364202663\",\"name\":\"main\",\"number\":\"4133602364202663\",\"isSystemIsolate\":false,\"isolateGroupId\":\"isolateGroups/4808976720720526\"},\"timestamp\":1741747623342}}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":90,"type":"event","body":{"allThreadsStopped":false,"reason":"exit","threadId":1},"event":"stopped"}
[13:47:03] [DAP] [Info] <== {"seq":91,"type":"event","body":{"message":"==> [VM] {\"jsonrpc\":\"2.0\",\"id\":\"35\",\"method\":\"readyToResume\",\"params\":{\"isolateId\":\"isolates/4133602364202663\"}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":92,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"result\":{\"type\":\"Success\"},\"id\":\"35\"}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":93,"type":"event","body":{"message":"<== [VM] {\"jsonrpc\":\"2.0\",\"method\":\"streamNotify\",\"params\":{\"streamId\":\"Isolate\",\"event\":{\"type\":\"Event\",\"kind\":\"IsolateExit\",\"isolateGroup\":{\"type\":\"@IsolateGroup\",\"id\":\"isolateGroups/4808976720720526\",\"name\":\"bin/slow_debug.dart\",\"number\":\"4808976720720526\",\"isSystemIsolateGroup\":false},\"isolate\":{\"type\":\"@Isolate\",\"id\":\"isolates/4133602364202663\",\"name\":\"main\",\"number\":\"4133602364202663\",\"isSystemIsolate\":false,\"isolateGroupId\":\"isolateGroups/4808976720720526\"},\"timestamp\":1741747623345}}}"},"event":"dart.log"}
[13:47:03] [DAP] [Info] <== {"seq":94,"type":"event","body":{"reason":"exited","threadId":1},"event":"thread"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"19"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"20"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"21"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"22"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"23"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"24"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"25"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"26"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"27"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"28"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"29"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"30"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"31"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"32"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"33"}
[13:47:03] [DAP] [Info] ==> {"command":"threads","type":"request","seq":7}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"34","method":"readyToResume","params":{"isolateId":"isolates/4133602364202663"}}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","method":"streamNotify","params":{"streamId":"Debug","event":{"type":"Event","kind":"Resume","isolateGroup":{"type":"@IsolateGroup","id":"isolateGroups/4808976720720526","name":"bin/slow_debug.dart","number":"4808976720720526","isSystemIsolateGroup":false},"isolate":{"type":"@Isolate","id":"isolates/4133602364202663","name":"main","number":"4133602364202663","isSystemIsolate":false,"isolateGroupId":"isolateGroups/4808976720720526"},"timestamp":1741747623340}}}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"34"}
[13:47:03] [DAP] [Info] <== {"seq":95,"type":"response","body":{"threads":[]},"command":"threads","request_seq":7,"success":true}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","method":"streamNotify","params":{"streamId":"Debug","event":{"type":"Event","kind":"PauseExit","isolateGroup":{"type":"@IsolateGroup","id":"isolateGroups/4808976720720526","name":"bin/slow_debug.dart","number":"4808976720720526","isSystemIsolateGroup":false},"isolate":{"type":"@Isolate","id":"isolates/4133602364202663","name":"main","number":"4133602364202663","isSystemIsolate":false,"isolateGroupId":"isolateGroups/4808976720720526"},"timestamp":1741747623342}}}
[13:47:03] [DAP] [Info] ==> {"command":"threads","type":"request","seq":8}
[13:47:03] [VmService] [Info] [Dart ] ==> [VM] {"jsonrpc":"2.0","id":"35","method":"readyToResume","params":{"isolateId":"isolates/4133602364202663"}}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","result":{"type":"Success"},"id":"35"}
[13:47:03] [VmService] [Info] [Dart ] <== [VM] {"jsonrpc":"2.0","method":"streamNotify","params":{"streamId":"Isolate","event":{"type":"Event","kind":"IsolateExit","isolateGroup":{"type":"@IsolateGroup","id":"isolateGroups/4808976720720526","name":"bin/slow_debug.dart","number":"4808976720720526","isSystemIsolateGroup":false},"isolate":{"type":"@Isolate","id":"isolates/4133602364202663","name":"main","number":"4133602364202663","isSystemIsolate":false,"isolateGroupId":"isolateGroups/4808976720720526"},"timestamp":1741747623345}}}
[13:47:03] [DAP] [Info] <== {"seq":96,"type":"response","body":{"threads":[]},"command":"threads","request_seq":8,"success":true}
[13:47:03] [DAP] [Info] <== {"seq":97,"type":"event","body":{"output":"\nExited.\n"},"event":"output"}
[13:47:03] [DAP] [Info] <== {"seq":98,"type":"event","body":{},"event":"terminated"}
[13:47:03] [DAP] [Info] ==> {"command":"disconnect","arguments":{"restart":false},"type":"request","seq":9}
[13:47:03] [DAP] [Info] <== {"seq":99,"type":"response","command":"disconnect","request_seq":9,"success":true}
[13:47:03] [DAP] [Info] Stopping debug session 98997c67-7c61-4a4d-b651-16b1b4b228ee
[13:47:03] [DAP] [Info] Debug session 98997c67-7c61-4a4d-b651-16b1b4b228ee exit: code: undefined, signal: undefined
[13:47:03] [DAP] [Info] Debug session 98997c67-7c61-4a4d-b651-16b1b4b228ee errored: {}
[13:47:03] [DartToolingDaemon] [Info] ==> {"jsonrpc":"2.0","method":"postEvent","params":{"eventData":{"debugSessionId":"98997c67-7c61-4a4d-b651-16b1b4b228ee"},"eventKind":"debugSessionStopped","streamId":"Editor"}}
[13:47:10] [General] [Info] Returning cached results for project search
Wed Mar 12 2025 [13:47:12 GMT+1100 (Australian Eastern Daylight Time)] Log file ended




@bsutton bsutton closed this as completed Mar 12, 2025
@bsutton
Copy link
Author

bsutton commented Mar 12, 2025

and I accidently closed the issue :<

@FMorschel
Copy link
Contributor

I think you should be able to reopen it since you, the author, closed it 🤔

If you can't, someone from the team will be able to do that for you.

@bsutton bsutton reopened this Mar 12, 2025
@bsutton
Copy link
Author

bsutton commented Mar 12, 2025

I've reopened - just needed to refresh the page.

@bsutton
Copy link
Author

bsutton commented Mar 12, 2025

Just a couple of additional notes.

If I (attempt to) start one debug session the call stack window in vs code shows 'running' but no process name.

If I start a second debug session, it also doesn't connect but then both of the processes show up in the 'call stack' window.

Image

The call stack window will let me stop them or restart them but no pause them.

@github-actions github-actions bot removed the needs-info We need additional information from the issue author (auto-closed after 14 days if no response) label Mar 12, 2025
@DanTup
Copy link
Collaborator

DanTup commented Mar 12, 2025

@bsutton it seems that there's a long pause (around 170s?) in the log where we ask VS Code to run the process in the terminal. If you remove "console": "terminal", from your launch config (and ensure you can see some output prior to it trying to read from stdin), does the delay still occur?

Do you see any delay if you create a new terminal manually inside VS Code? (for example both of these probably trigger your terminal startup scripts to run - although I think you'd probably have noticed if those scripts added 170s).

@a-siva a-siva added the needs-info We need additional information from the issue author (auto-closed after 14 days if no response) label Mar 12, 2025
@bsutton
Copy link
Author

bsutton commented Mar 12, 2025

For the testing I didn't have a launch.json I was just running from the 'run | debug' menu in slow_debug.dart.

and ensure you can see some output prior to it trying to read from stdin

not certain what you are asking here.

Each of the below runs uses the same vs-code terminal (bash) instance so has the output from the last run.
I create new terminals in vscode all the time (bash). They open without pause (essentially instantly) - I've just re-tested this.

I've just tried creating a launch.json with:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "slow_debug",
            "request": "launch",
            "type": "dart",
            "console": "terminal"
        }
    ]
}

This is slow to start.

So as requested I've removed the 'console":"terminal"

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "slow_debug",
            "request": "launch",
            "type": "dart",
        }
    ]
}

This is also slow to launch.

I then tried using the debugConsole explicitly:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "slow_debug",
            "request": "launch",
            "type": "dart",
            "console": "debugConsole"
        }
    ]
}

I waited about five minutes and this launch simply didn't complete.

I've attached the debug logs from when using 'debugConsole' (log.debugconsole.txt).

Flipping back to 3.6.0 and the launch runs/completes immediately.

As a comparison I've included the debug logs from a 3.6.0 launch.

log.debugconsole.3.6.txt

log.debugconsole.txt

@bsutton
Copy link
Author

bsutton commented Mar 12, 2025

here is a recording showing switching between dart 3.6 and 3.7.

Screencast.From.2025-03-13.08-28-57.webm

@bsutton
Copy link
Author

bsutton commented Mar 12, 2025

FYI: i've just tried dart 3.7.2 with the same slow to start results.

@a-siva a-siva removed the needs-info We need additional information from the issue author (auto-closed after 14 days if no response) label Mar 12, 2025
@bsutton
Copy link
Author

bsutton commented Mar 13, 2025

So I'm not positive it is specific to dart 3.7.

I have another project ( money2 as published on pub.dev) that exhibits the same issue whether I run it with 3.6 or 3.7.

On the smaller project 'slow_debug' we have been testing on moving between 3.6 and 3.7 gives very predictable results (works on 3.6 fails on 3.7).

@DanTup
Copy link
Collaborator

DanTup commented Mar 13, 2025

and ensure you can see some output prior to it trying to read from stdin

not certain what you are asking here.

Sorry, I wasn't very clear. I wanted you to run without using the terminal (eg. in the debug console) however since the usual reason to run in the terminal is because you read from stdin and this would just block when using the Debug Console, I wanted to be sure we could measure the time taken for the app to start (without the app blocking on stdin interfering).

In any case, the log you provided for running in the debug console provided what I was after, which is a single DAP log that doesn't delegate spawning the process to VS Code (to eliminate that from the possible issues).

In your new log, I see the delay here:

[08:08:45] [DAP] [Info] <== {"seq":5,"type":"event","body":{"message":"Starting…","progressId":"launch_1","title":"Debugger"},"event":"dart.progressStart"}
[08:11:33] [DAP] [Info] <== {"seq":8,"type":"event","body":{"message":"Connecting…","progressId":"launch_1"},"event":"dart.progressUpdate"}

The code that emits these two messages is here:

final progress = startProgressNotification(
"launch",
"Debugger",
message: "Starting…",
);
vmServiceInfoFile = generateVmServiceInfoFile();
unawaited(
waitForVmServiceInfoFile(logger, vmServiceInfoFile).then((uri) async {
progress.update(message: "Connecting…");
await connectDebugger(uri);
progress.end();
}),
);

The gap between them is the time waiting for the file passed to --write-service-info to be appear on disk. This means the delay could be in starting the process, or in us getting the file watch event.

I will try to extract the relevant code here into something you can run as a standalone script (that spawns the process with the same flags and watches for that file to appear) to see if it can be reproduced without VS Code and DAP in the way, which might help narrow it down.

@DanTup
Copy link
Collaborator

DanTup commented Mar 13, 2025

@bsutton I've extracted what I think are the relevant parts of the debug adapter to try and reproduce this outside of VS Code/DAP:

https://gist.github.com/DanTup/9a6461192fb96ae4c4c9f800ce36a23e

If you update the program variable on line 6 (and cwd/args on 7 and 8 if required) and run this script, it should do the same thing as the debug adapter does - which is spawn the VM and wait for the service-info file to appear. It will print timings for each step:

Image

You'll need to run this script using the VM version you want to test with (or change Platform.resolvedExecutable to a path of the VM to test with if you want to run the script using another).

Assuming the issue reproduces with this, try removing the --pause_isolates_on_ flags on line 41+42 to see if that changes anything.

@bsutton
Copy link
Author

bsutton commented Mar 15, 2025 via email

@bsutton
Copy link
Author

bsutton commented Mar 15, 2025 via email

@bsutton
Copy link
Author

bsutton commented Mar 15, 2025

just for a comparison point, I also tried directly launching ' dart slow_debug.dart' from the adaptor and the call exited normally.

 Future<void> launchAndRespond() async {
    File? vmServiceInfoFile;

    Settings().setVerbose(enabled: true);

    final executable = normalizePath(Platform.resolvedExecutable);

    printTime('Spaning slow_debug directly $cwd');
    await launchAsProcess(executable, ['bin/slow_debug.dart'],
        workingDirectory: cwd);

    return;
dart bin/adaptor.dart 
[         0] Spawning slow_debug directly /home/bsutton/git/slow_debug
[         3] Spawning /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart with [bin/slow_debug.dart] in /home/bsutton/git/slow_debug
[        62] wait for exit
[       228] stdout: Hello world: 42!

[       255] Process exited (0)
[       255] exited launch

@bsutton bsutton closed this as completed Mar 15, 2025
@DanTup
Copy link
Collaborator

DanTup commented Mar 17, 2025

So If i run the code from a terminal started outside of vs code, it starts
immediately:

If I start the code within a vs-code terminal it hangs on the spawn

This is probably the thing I'm most interested in. Assuming these are the same SDKs being used here, what is the difference here? You're using the terminal so there's no DAP or anything involved.

Does it hang indefinitely, or is it just slow? Are you using the same kind of terminal inside/outside VS Code? (on Windows at least, we can choose between CMD, PowerShell, etc.).

If it's just slow, can you use a file explorer or something to see when the service info file actually exists on disk? (if it appears immediately, then perhaps this is a watcher issue, and if not, a VM issue).

removing the pause isoaltes improves the results. We see that the program
now runs (hello world is printed immediately) but then hangs waiting for
the exit code.

This makes sense, but probably isn't a good test alone. The program will immediately start running and terminate but it's not clear whether the service info file is being written to disk quickly in this case.

just for a comparison point, I also tried directly launching ' dart slow_debug.dart' from the adaptor and the call exited normally.

Looking at your code, this makes sense - since it's being spawned without writing (or waiting for) the service info file.

@DanTup
Copy link
Collaborator

DanTup commented Mar 17, 2025

@bsutton I've slightly updated my test script here:

https://gist.github.com/DanTup/9a6461192fb96ae4c4c9f800ce36a23e

It should print a little more information now. Could you test this in both external and VS Code terminal and capture the output (I expect the behaviour is the same, it will work outside of VS Code and fail inside). Then could you try uncommenting the 1s pause on line 46 and see whether that changes the behaviour (besides it taking 1s extra)?

@a-siva a-siva added the needs-info We need additional information from the issue author (auto-closed after 14 days if no response) label Mar 18, 2025
@bsutton
Copy link
Author

bsutton commented Mar 26, 2025

results from the unadulterated version:

run from a vs-code terminal.

dart ./test_dap.dart 
[         0] Progress: Starting…
[        23] Attempting to read File: '/tmp/dart-vm-serviceUSVJZV/vm.json'
[        25] Ignoring error parsing vm-service-info file: PathNotFoundException: Cannot open file, path = '/tmp/dart-vm-serviceUSVJZV/vm.json' (OS Error: No such file or directory, errno = 2)
[        29] Spawning /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart with [--no-serve-devtools, --enable-vm-service=0, -DSILENT_VM_SERVICE=true, --write-service-info=file:///tmp/dart-vm-serviceUSVJZV/vm.json, --pause_isolates_on_exit, --pause_isolates_on_start, /home/bsutton/git/slow_debug/bin/hello.dart] in null
[    165826] watch event: 1 / /tmp/dart-vm-serviceUSVJZV/vm.json
[    165826] Trying to read service info file (watch event: 1)
[    165826] Attempting to read File: '/tmp/dart-vm-serviceUSVJZV/vm.json'
[    165832] Successfully decoded file
[    165832] Parsed http://127.0.0.1:46435/mJtyeJN4M5M=/ from the file
[    165832] Got debugger URI!
[    165834] Progress: Fake connecting debugger…
[    165834] Terminating process
[    165859] Process exited (-15)

run from a bash terminal

dart ./test_dap.dart
[         0] Progress: Starting…
[        19] Attempting to read File: '/tmp/dart-vm-serviceKEIOQQ/vm.json'
[        21] Ignoring error parsing vm-service-info file: PathNotFoundException: Cannot open file, path = '/tmp/dart-vm-serviceKEIOQQ/vm.json' (OS Error: No such file or directory, errno = 2)
[        23] Spawning /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart with [--no-serve-devtools, --enable-vm-service=0, -DSILENT_VM_SERVICE=true, --write-service-info=file:///tmp/dart-vm-serviceKEIOQQ/vm.json, --pause_isolates_on_exit, --pause_isolates_on_start, /home/bsutton/git/slow_debug/bin/hello.dart] in null
[       394] watch event: 1 / /tmp/dart-vm-serviceKEIOQQ/vm.json
[       394] Trying to read service info file (watch event: 1)
[       394] Attempting to read File: '/tmp/dart-vm-serviceKEIOQQ/vm.json'
[       399] Successfully decoded file
[       399] Parsed http://127.0.0.1:38391/nqr9x7dRwsA=/ from the file
[       399] Got debugger URI!
[       402] Progress: Fake connecting debugger…
[       402] Terminating process
[       418] Process exited (-15)

The 1 second delay made no difference.

dart ./test_dap.dart 
[         0] Progress: Starting…
[        19] Attempting to read File: '/tmp/dart-vm-serviceKQYVQC/vm.json'
[        20] Ignoring error parsing vm-service-info file: PathNotFoundException: Cannot open file, path = '/tmp/dart-vm-serviceKQYVQC/vm.json' (OS Error: No such file or directory, errno = 2)
[      1026] Spawning /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart with [--no-serve-devtools, --enable-vm-service=0, -DSILENT_VM_SERVICE=true, --write-service-info=file:///tmp/dart-vm-serviceKQYVQC/vm.json, --pause_isolates_on_exit, --pause_isolates_on_start, /home/bsutton/git/slow_debug/bin/hello.dart] in null
[    164144] watch event: 1 / /tmp/dart-vm-serviceKQYVQC/vm.json
[    164144] Trying to read service info file (watch event: 1)
[    164144] Attempting to read File: '/tmp/dart-vm-serviceKQYVQC/vm.json'
[    164148] Successfully decoded file
[    164149] Parsed http://127.0.0.1:37729/VsWOe0sHkiQ=/ from the file
[    164149] Got debugger URI!
[    164151] Progress: Fake connecting debugger…
[    164151] Terminating process
[    164173] Process exited (-15)

@DanTup
Copy link
Collaborator

DanTup commented Mar 26, 2025

@bsutton thanks! The one second delay was to ensure the file system watcher had plenty of time to be initialized before we spawned the process. In this case, we set up the watcher, wait one second, spawn the program, and then wait for the watcher event showing that the VM wrote that file. In this case, it still seems like there is a 160s delay between spawning the VM and the watcher event:

[        20] Ignoring error parsing vm-service-info file: PathNotFoundException: Cannot open file, path = '/tmp/dart-vm-serviceKQYVQC/vm.json' (OS Error: No such file or directory, errno = 2)
[      1026] Spawning /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart with [--no-serve-devtools, --enable-vm-service=0, -DSILENT_VM_SERVICE=true, --write-service-info=file:///tmp/dart-vm-serviceKQYVQC/vm.json, --pause_isolates_on_exit, --pause_isolates_on_start, /home/bsutton/git/slow_debug/bin/hello.dart] in null
[    164144] watch event: 1 / /tmp/dart-vm-serviceKQYVQC/vm.json

This leads me to the question of whether the file exists on disk during those 160s and the watcher event is delayed (or being processed slowly by Dart), or whether the file does not exist on disk (in which case the issue is in the program we are spawning).

Is it possible you could re-run your last test, and during that 160s delay, check whether the filename that is printed in the output ("Attempting to read file...") actually appears to exist on your disk, or whether it only appears after the 160s? This will help narrow down whether the issue is in the spawned VM side, or the "debug adapter" side. Thanks!

@a-siva a-siva added the triaged Issue has been triaged by sub team label Mar 26, 2025
@bsutton
Copy link
Author

bsutton commented Mar 26, 2025

as requested I checked for the files existings during the 160 s wait and NO the file does not exist.

dart ./test_dap.dart 
[         0] Progress: Starting…
[        21] Attempting to read File: '/tmp/dart-vm-serviceAMRAYA/vm.json'
[        22] Ignoring error parsing vm-service-info file: PathNotFoundException: Cannot open file, path = '/tmp/dart-vm-serviceAMRAYA/vm.json' (OS Error: No such file or directory, errno = 2)
[      1029] Spawning /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart with [--no-serve-devtools, --enable-vm-service=0, -DSILENT_VM_SERVICE=true, --write-service-info=file:///tmp/dart-vm-serviceAMRAYA/vm.json, --pause_isolates_on_exit, --pause_isolates_on_start, /home/bsutton/git/slow_debug/bin/hello.dart] in null
ls /tmp/dart-vm-serviceAMRAYA/vm.json
ls: cannot access '/tmp/dart-vm-serviceAMRAYA/vm.json': No such file or directory

@bsutton
Copy link
Author

bsutton commented Mar 26, 2025

I've just an additional test and the directory however does exist, just not the file.

@bsutton
Copy link
Author

bsutton commented Mar 26, 2025

[        21] Attempting to read File: '/tmp/dart-vm-serviceOFXKTX/vm.json'
[        23] Ignoring error parsing vm-service-info file: PathNotFoundException: Cannot open file, path = '/tmp/dart-vm-serviceOFXKTX/vm.json' (OS Error: No such file or directory, errno = 2)
[      1029] Spawning /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart with [--no-serve-devtools, --enable-vm-service=0, -DSILENT_VM_SERVICE=true, --write-service-info=file:///tmp/dart-vm-serviceOFXKTX/vm.json, --pause_isolates_on_exit, --pause_isolates_on_start, /home/bsutton/git/slow_debug/bin/hello.dart] in null

ls -la /tmp/dart-vm-serviceOFXKTX/
total 0
drwxr-xr-x   2 bsutton shared   40 Mar 27 08:01 .
drwxrwxrwt 157 root    root   3940 Mar 27 08:01 ..

@bsutton
Copy link
Author

bsutton commented Mar 26, 2025

I don't know if this helps, but if I delete the watched directory during the 160 second wait I see an additional watch event reported:

 0] Progress: Starting…
[        23] Attempting to read File: '/tmp/dart-vm-serviceETQIBS/vm.json'
[        25] Ignoring error parsing vm-service-info file: PathNotFoundException: Cannot open file, path = '/tmp/dart-vm-serviceETQIBS/vm.json' (OS Error: No such file or directory, errno = 2)
[      1033] Spawning /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart with [--no-serve-devtools, --enable-vm-service=0, -DSILENT_VM_SERVICE=true, --write-service-info=file:///tmp/dart-vm-serviceETQIBS/vm.json, --pause_isolates_on_exit, --pause_isolates_on_start, /home/bsutton/git/slow_debug/bin/hello.dart] in null
[      7697] watch event: 4 / /tmp/dart-vm-serviceETQIBS

The watch event 4: occurs immediately after I delete the directory.

@github-actions github-actions bot removed the needs-info We need additional information from the issue author (auto-closed after 14 days if no response) label Mar 27, 2025
@DanTup
Copy link
Collaborator

DanTup commented Mar 27, 2025

@bsutton thanks for testing!

Based on this:

as requested I checked for the files existings during the 160 s wait and NO the file does not exist.

It seems that the problem is probably with the spawned program. For some reason, when spawned from within VS Code, it's taking a very long time to write that file. It would be useful to try and eliminate the Dart script that's spawning the VM to see if the issue persists (I suspect it will).

Could you try running that script directly (inside a VS Code window) using exactly the same command:

/home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart --no-serve-devtools --enable-vm-service=0 -DSILENT_VM_SERVICE=true --write-service-info=file:///tmp/my-vm-service-info.json, --pause_isolates_on_exit --pause_isolates_on_start /home/bsutton/git/slow_debug/bin/hello.dart

And see if the file /tmp/my-vm-service-info.json still take ~160s to show up?

Note: The script itself will appear to just hang, because of the pauses, but you can just terminate it afterwards. All we're interested in knowing here is whether the service info file is being written immediately, or after the same delay.

@bsutton
Copy link
Author

bsutton commented Mar 29, 2025

Not certain how useful this is but its a list of open files whilst I wait for the json file to be created:

COMMAND       PID    USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
dart:hell 2640387 bsutton  cwd       DIR               0,48        4  2022988 /home/bsutton/git/slow_debug/bin
dart:hell 2640387 bsutton  rtd       DIR               0,28       30       34 /
dart:hell 2640387 bsutton  txt       REG               0,48 41315272  8831280 /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart
dart:hell 2640387 bsutton  mem       REG               0,48 51686112  8831382 /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/snapshots/kernel-service.dart.snapshot
dart:hell 2640387 bsutton  mem       REG               0,48  1126673  8836946 /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart.sym
dart:hell 2640387 bsutton  mem       REG               0,28  2182752   146808 /usr/lib/x86_64-linux-gnu/libc.so.6
dart:hell 2640387 bsutton  mem       REG               0,28   964976   143594 /usr/lib/x86_64-linux-gnu/libm.so.6
dart:hell 2640387 bsutton  mem       REG               0,28    14488   146840 /usr/lib/x86_64-linux-gnu/libpthread.so.0
dart:hell 2640387 bsutton  mem       REG               0,28    14488   143590 /usr/lib/x86_64-linux-gnu/libdl.so.2
dart:hell 2640387 bsutton  mem       REG               0,28    18664   560496 /usr/lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2
dart:hell 2640387 bsutton  mem       REG               0,28   244816   146802 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
dart:hell 2640387 bsutton    0u      CHR             136,10      0t0       13 /dev/pts/10
dart:hell 2640387 bsutton    1u      CHR             136,10      0t0       13 /dev/pts/10
dart:hell 2640387 bsutton    2u      CHR             136,10      0t0       13 /dev/pts/10
dart:hell 2640387 bsutton    3r     FIFO               0,15      0t0 20762464 pipe
dart:hell 2640387 bsutton    4w     FIFO               0,15      0t0 20762464 pipe
dart:hell 2640387 bsutton    5u  a_inode               0,16        0       65 [eventpoll:3,6,7,9]
dart:hell 2640387 bsutton    6u  a_inode               0,16        0       65 [timerfd]
dart:hell 2640387 bsutton    7r     FIFO               0,15      0t0 20788062 pipe
dart:hell 2640387 bsutton    8w     FIFO               0,15      0t0 20788062 pipe
dart:hell 2640387 bsutton    9u     IPv4           20615951      0t0      TCP localhost:42459 (LISTEN)
dart:hell 2640387 bsutton   10r     FIFO               0,15      0t0 20792463 pipe
dart:hell 2640387 bsutton   12r     FIFO               0,15      0t0 20792464 pipe
dart:hell 2640387 bsutton   13w     FIFO               0,15      0t0 20792464 pipe
dart:hell 2640387 bsutton   14r     FIFO               0,15      0t0 20792465 pipe
dart:hell 2640387 bsutton   15w     FIFO               0,15      0t0 20792465 pipe
dart:hell 2640387 bsutton   16r     FIFO               0,15      0t0 20792466 pipe
dart:hell 2640387 bsutton   17w     FIFO               0,15      0t0 20792466 pipe
dart:hell 2640387 bsutton   23u      CHR                5,2      0t0       90 /dev/ptmx
dart:hell 2640387 bsutton   33u     unix 0xffff992e93c71800      0t0 16624299 type=STREAM (CONNECTED)
dart:hell 2640387 bsutton   39w      REG               0,48      487  2557398 /home/bsutton/.config/Code/logs/20250326T184802/ptyhost.log
dart:hell 2640387 bsutton   40u      CHR                5,2      0t0       90 /dev/ptmx
dart:hell 2640387 bsutton   41u      CHR                5,2      0t0       90 /dev/ptmx
dart:hell 2640387 bsutton   42u      CHR                5,2      0t0       90 /dev/ptmx
dart:hell 2640387 bsutton   43u     unix 0xffff992dedc2b800      0t0 20680111 type=STREAM (CONNECTED)
dart:hell 2640387 bsutton  103r      REG               7,70   693457    11181 /snap/code/187/usr/share/code/v8_context_snapshot.bin
=======

@bsutton
Copy link
Author

bsutton commented Mar 29, 2025

and the contents of ptyhost.log

cat /home/bsutton/.config/Code/logs/20250326T184802/ptyhost.log
2025-03-26 18:57:36.653 [info] Revived process, old id 5141a8d6c0c4f604ae02767e5968b653-1 -> new id 8
2025-03-26 18:57:36.783 [info] Expanding terminal instance, old id 5141a8d6c0c4f604ae02767e5968b653-1 -> new id 8
2025-03-26 18:57:37.095 [warning] Persistent process "8": Process had no disconnect runners but was an orphan
2025-03-26 18:57:37.095 [info] Persistent process reconnection "8"
2025-03-26 18:57:37.191 [info] Persistent process "8": Replaying 3544 chars and 1 size events

@bsutton
Copy link
Author

bsutton commented Mar 29, 2025

so interesting observation..

If I run the command with sudo from the vs-code terminal the my-vm-service-info.json file is created immediately.

without sudo it doesn't appear to ever create the json file (I waited 15min).

So I tried running with strace.

When running without sudo

[pid 2646063] 12:16:57 newfstatat(AT_FDCWD, "/.dart_tool/native_assets.yaml", 0x730337dfcb60, 0) = -1 ENOENT (No such file or directory)
[pid 2646063] 12:16:57 newfstatat(AT_FDCWD, "/.dart_tool/native_assets.yaml", 0x730337dfcad0, 0) = -1 ENOENT (No such file or directory)
strace: Process 2646076 attached
[pid 2646076] 12:16:57 +++ exited with 0 +++
[pid 2646063] 12:16:57 getcwd("/home/bsutton/git/slow_debug/bin", 4096) = 33
strace: Process 2646077 attached
[pid 2646077] 12:16:57 +++ exited with 0 +++
strace: Process 2646078 attached
[pid 2646042] 12:17:01 +++ exited with 0 +++
[pid 2646043] 12:17:01 +++ exited with 0 +++
[pid 2646050] 12:17:02 +++ exited with 0 +++
[pid 2646041] 12:17:03 +++ exited with 0 +++
[pid 2646038] 12:17:03 +++ exited with 0 +++
strace: Process 2646601 attached
[pid 2646601] 12:17:58 openat(AT_FDCWD, "/dev/urandom", O_RDONLY|O_CLOEXEC) = 11
strace: Process 2646602 attached
[pid 2646602] 12:17:58 openat(AT_FDCWD, "/dev/urandom", O_RDONLY|O_CLOEXEC) = 11
[pid 2646078] 12:18:03 +++ exited with 0 +++
[pid 2646601] 12:18:03 +++ exited with 0 +++
[pid 2646602] 12:18:03 +++ exited with 0 +++
[pid 2646063] 12:19:04 +++ exited with 0 +++

@bsutton
Copy link
Author

bsutton commented Mar 29, 2025

strace output of both runs.

no-sudo.txt
sudo.txt

@mraleph
Copy link
Member

mraleph commented Mar 31, 2025

@bsutton could you produce full traces without -e filter?

@bsutton
Copy link
Author

bsutton commented Mar 31, 2025

@mraleph
Traces as requested. One using sudo and one not.

sudo strace -f -t -o sudo.strace   /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart --no-serve-devtools --enable-vm-service=0 -DSILENT_VM_SERVICE=true --write-service-info=file:///tmp/my-vm-service-info-sudo.json --pause_isolates_on_exit --pause_isolates_on_start /home/bsutton/git/slow_debug/bin/hello.dart

sudo.zip

strace -f -t -o nosudo.strace   /home/bsutton/.dswitch/channels/stable/versions/3.7.2/dart-sdk/bin/dart --no-serve-devtools --enable-vm-service=0 -DSILENT_VM_SERVICE=true --write-service-info=file:///tmp/my-vm-service-info-sudo.json --pause_isolates_on_exit --pause_isolates_on_start /home/bsutton/git/slow_debug/bin/hello.dart

nosudo.zip

@mraleph
Copy link
Member

mraleph commented Apr 1, 2025

Thanks @bsutton - that explains the hang. You seem to have a very high limit set for RLIMIT_NOFILE (1073741816) which causes issue with this code in the process spawning logic. It just sits there closing descriptors until the end of the world. You can work-around this by lowering file descriptor limit to something smaller.

When you run under root RLIMIT_NOFILE is at 1024 so this code succeeds just fine.

The code in question tries to fight what is arguably a POSIX design issue: file descriptors are inherited on fork and remain open across execve unless FD_CLOEXEC is set on them - which can cause file descriptor leaks.

I think we should rewrite this code to check whats in /proc/$pid/fd/* (/dev/fd/* on Mac OS X) instead of just looking at RLIMIT_NOFILE. Assigning to @brianquinlan as dart:io owner.

@bsutton
Copy link
Author

bsutton commented Apr 1, 2025

Thanks for the effort on this one, particularly since it seems somewhat peculiar to my system.

I've actually just been doing a deep dive and can't actually find where the default limits have been changed (.bashrc, .profile, logind.conf, systemd.conf, limits.conf).

It may be worth noting for other readers that vs-code changes the soft limit to be equal to the hard limit when it launches.

https://stackoverflow.com/questions/72542581/maximum-file-descriptors-used-by-visual-code

In a vs-code terminal I get:

 ulimit -Hn
1073741816
ulimit -Sn
1073741816

outside of vs-code

ulimit -Hn
1073741816
ulimit -Sn
1024

I'm about to add a reduced hard limit to logind.conf (from gnome sessions) and systemd.conf for services.

Will report back after I reboot.

I should note that this is a system which is probably 6 years old and has been through multiple OS upgrades (without a re-install).

@bsutton
Copy link
Author

bsutton commented Apr 2, 2025

so for the record the changes to systemd.conf and logind.conf made no difference.

What did work is that I created a file /etc/security/limits.d/custom.conf with:

cat /etc/security/limits.d/custom.conf 

* hard nofile 30000
* soft nofile 4000

I now have a working debugger.

Once again, thanks for all of the assistance.

@NikolaySohryakov
Copy link

NikolaySohryakov commented Apr 26, 2025

UPD: the nofile thing worked for me as well.

Hi there. So is there any workaround? Looks like I'm facing exactly the same issue but there is another thing I can add: this issue also happens when I run tests with --coverage OR --debug options. For me it takes around 140 seconds for the service file to appear.

Constantly reproducible on both of my PCs with Ubuntu 25.04:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.29.3, on Ubuntu 25.04 6.14.0-15-generic, locale en_US.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 35.0.1)
[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[✓] Linux toolchain - develop for Linux desktop
[✓] Android Studio (version 2024.3)
[✓] VS Code (version 1.99.3)
[✓] Connected device (1 available)
[✓] Network resources

I've tried switching to older versions of flutter/dart - no luck even with a year-old releases.
I've also tried to run Ubuntu 24.04 under distrobox - same behaviour.

@mraleph
Copy link
Member

mraleph commented Apr 28, 2025

So is there any workaround?

The work-around right now is to reduce the fd limit to something smaller.

cc @a-siva for visibility.

@a-siva a-siva added the P2 A bug or feature request we're likely to work on label May 2, 2025
@a-siva
Copy link
Contributor

a-siva commented May 2, 2025

I think we should rewrite this code to check whats in /proc/$pid/fd/* (/dev/fd/* on Mac OS X) instead of just looking at RLIMIT_NOFILE. Assigning to @brianquinlan as dart:io owner.

@mraleph there is a counter proposal from @rmacnak-google that maybe we delete this entire 'for loop of closing file descriptors' as files opened by 'dart:io' always have FD_CLOEXEC set which would take care of closing these files. There could be situations
in other custom embedders that have opened files without these options or some ffi code which creates files using native APIs directly, in these cases the embedder or native ffi code would be responsible for ensuring sanity, what do you think of that?

@mraleph
Copy link
Member

mraleph commented May 2, 2025

Yes, that's an option, though there is a catch here. FD_CLOEXEC leaves a window between fd being created and fd being marked as CLOEXEC. If you perform fork-exec in this window descriptor is going to leak. You would need to use O_CLOEXEC instead when doing open(...) which avoids this pitfall - this means rewriting/fixing a bunch of dart:io code.

I do think that force closing fds is overall safer. Especially if third party native code is considered. That's what other languages tend to do (I checked at least JVM and Python).

It seems on Linux there is https://man7.org/linux/man-pages/man2/close_range.2.html which might mean that a simpler implementation is possible which does not require meddling with /proc/$pid/fd/*.

@a-siva
Copy link
Contributor

a-siva commented May 2, 2025

Yes, that's an option, though there is a catch here. FD_CLOEXEC leaves a window between fd being created and fd being marked as CLOEXEC. If you perform fork-exec in this window descriptor is going to leak. You would need to use O_CLOEXEC instead when doing open(...) which avoids this pitfall - this means rewriting/fixing a bunch of dart:io code.

The current implementation of File::Open in file_linux.cc and file_macos.cc and Socket::Create already seem to set this flag.
The close_range call that you pointed to also seems like an easy thing to add here let me try it (I think macos does not have that
call implemented).

@mraleph
Copy link
Member

mraleph commented May 2, 2025

The current implementation of File::Open in file_linux.cc and file_macos.cc and Socket::Create already seem to set this flag.

FWIW we still have a bunch of places where we call FDUtils::SetCloseOnExec rather than set O_CLOEXEC / SOCK_CLOEXEC so we would have to audit all of them and understand if any of these file descriptors can leak and rewrite some of them...

copybara-service bot pushed a commit that referenced this issue May 5, 2025
TEST=ci
Bug: #60252
Change-Id: Ide6d156d8a7c569984d4fa702dc32ac08f9ee9e1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/426580
Reviewed-by: Brian Quinlan <[email protected]>
Reviewed-by: Siva Annamalai <[email protected]>
Commit-Queue: Ryan Macnak <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-vm Use area-vm for VM related issues, including code coverage, and the AOT and JIT backends. P2 A bug or feature request we're likely to work on triaged Issue has been triaged by sub team
Projects
None yet
Development

No branches or pull requests

8 participants