emacs-lsp / lsp-dart

lsp-mode :heart: dart
https://emacs-lsp.github.io/lsp-dart
GNU General Public License v3.0
201 stars 25 forks source link

Debug dart project can not trigger breakpoints #138

Open xhcoding opened 2 years ago

xhcoding commented 2 years ago

run dap-debug command and select Dart :: Debug ,the program does not stop at the breakpoint

set dap-print-io to t , server did not send the stopped event. Everything is normal with vscode

dap-print-io ``` Sending: { "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-us" }, "type": "request", "seq": 1 } Received: { "seq": 1, "type": "response", "request_seq": 1, "command": "initialize", "success": true, "body": { "supportsConfigurationDoneRequest": true, "supportsEvaluateForHovers": true, "supportsDelayedStackTraceLoading": true, "supportsConditionalBreakpoints": true, "supportsLogPoints": true, "supportsTerminateRequest": true, "supportsRestartFrame": true, "supportsClipboardContext": true, "exceptionBreakpointFilters": [ { "filter": "All", "label": "All Exceptions", "default": null }, { "filter": "Unhandled", "label": "Uncaught Exceptions", "default": true } ] } } Sending: { "command": "launch", "arguments": { "name": "Dart :: Debug", "type": "dart", "request": "launch", "dartSdkPath": "d:/Applications/Scoop/apps/dart/current/", "maxLogLineLength": 2000, "cwd": "d:/Code/Dart/hello_world/", "vmAdditionalArgs": [], "vmServicePort": 0, "debugExternalLibraries": null, "debugSdkLibraries": null, "evaluateGettersInDebugViews": true, "evaluateToStringInDebugViews": true, "flutterSdkPath": "d:/", "flutterTrackWidgetCreation": true, "useFlutterStructuredErrors": true, "useWriteServiceInfo": true, "debuggerHandlesPathsEverywhereForBreakpoints": true, "output-filter-function": "lsp-dart-dap--output-filter-function", "program": "d:/Code/Dart/hello_world/bin/main.dart" }, "type": "request", "seq": 2 } Received: { "seq": 2, "type": "event", "event": "dart.progressStart", "body": { "progressID": "launch", "message": "Launching…" } } Received: { "seq": 3, "type": "response", "request_seq": 2, "command": "launch", "success": true } Received: { "seq": 4, "type": "event", "event": "dart.log", "body": { "message": "Starting to poll for file C:\\Users\\xhcoding\\AppData\\Local\\Temp\\dart-vm-service-bed3.json", "severity": 0, "category": 10 } } Received: { "seq": 5, "type": "event", "event": "dart.log", "body": { "message": "Successfully read JSON from C:\\Users\\xhcoding\\AppData\\Local\\Temp\\dart-vm-service-bed3.json which indicates URI http://127.0.0.1:64382/kCAV2Nlx5Vg=/", "severity": 0, "category": 10 } } Received: { "seq": 6, "type": "event", "event": "dart.log", "body": { "message": "Stopping polling for file C:\\Users\\xhcoding\\AppData\\Local\\Temp\\dart-vm-service-bed3.json", "severity": 0, "category": 10 } } Received: { "seq": 7, "type": "event", "event": "dart.debuggerUris", "body": { "observatoryUri": "http://127.0.0.1:64382/kCAV2Nlx5Vg=/", "vmServiceUri": "http://127.0.0.1:64382/kCAV2Nlx5Vg=/" } } Received: { "seq": 8, "type": "event", "event": "output", "body": { "category": "console", "output": "Connecting to VM Service at http://127.0.0.1:64382/kCAV2Nlx5Vg=/\n" } } Received: { "seq": 9, "type": "event", "event": "dart.progressEnd", "body": { "progressID": "launch" } } Received: { "seq": 10, "type": "event", "event": "initialized" } Sending: { "command": "setBreakpoints", "arguments": { "source": { "name": "main.dart", "path": "d:\\Code\\Dart\\hello_world\\bin\\main.dart" }, "breakpoints": [ { "line": 2 } ], "sourceModified": false, "lines": [ 2 ] }, "type": "request", "seq": 3 } Received: { "seq": 11, "type": "response", "request_seq": 3, "command": "setBreakpoints", "success": true, "body": { "breakpoints": [ { "verified": true } ] } } Sending: { "command": "setExceptionBreakpoints", "arguments": { "filters": [ "Unhandled" ] }, "type": "request", "seq": 4 } Received: { "seq": 12, "type": "response", "request_seq": 4, "command": "setExceptionBreakpoints", "success": true } Sending: { "command": "configurationDone", "type": "request", "seq": 5 } Received: { "seq": 13, "type": "response", "request_seq": 5, "command": "configurationDone", "success": true } Received: { "seq": 14, "type": "event", "event": "thread", "body": { "reason": "started", "threadId": 0 } } Sending: { "command": "threads", "type": "request", "seq": 6 } Received: { "seq": 15, "type": "response", "request_seq": 6, "command": "threads", "success": true, "body": { "threads": [ { "id": 0, "name": "main" } ] } } Received: { "seq": 16, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.getHttpEnableTimelineLogging", "isolateId": "isolates/877492264347811" } } Received: { "seq": 17, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.setHttpEnableTimelineLogging", "isolateId": "isolates/877492264347811" } } Received: { "seq": 18, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.httpEnableTimelineLogging", "isolateId": "isolates/877492264347811" } } Received: { "seq": 19, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.getSocketProfile", "isolateId": "isolates/877492264347811" } } Received: { "seq": 20, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.startSocketProfiling", "isolateId": "isolates/877492264347811" } } Received: { "seq": 21, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.pauseSocketProfiling", "isolateId": "isolates/877492264347811" } } Received: { "seq": 22, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.socketProfilingEnabled", "isolateId": "isolates/877492264347811" } } Received: { "seq": 23, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.clearSocketProfile", "isolateId": "isolates/877492264347811" } } Received: { "seq": 24, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.getVersion", "isolateId": "isolates/877492264347811" } } Received: { "seq": 25, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.getHttpProfile", "isolateId": "isolates/877492264347811" } } Received: { "seq": 26, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.getHttpProfileRequest", "isolateId": "isolates/877492264347811" } } Received: { "seq": 27, "type": "event", "event": "dart.serviceExtensionAdded", "body": { "extensionRPC": "ext.dart.io.clearHttpProfile", "isolateId": "isolates/877492264347811" } } Received: { "seq": 28, "type": "event", "event": "output", "body": { "category": "stdout", "output": "Hello world!\n" } } Received: { "seq": 29, "type": "event", "event": "thread", "body": { "reason": "exited", "threadId": 0 } } Sending: { "command": "threads", "type": "request", "seq": 7 } Received: { "seq": 30, "type": "event", "event": "output", "body": { "category": "console", "output": "Exited\n" } } Received: { "seq": 31, "type": "event", "event": "terminated" } Debug session process exited with status: killed ```

To Reproduce

  1. dart create hello_world
  2. open bin/main.dart with emacs , add breakpoint and run dap-debug

Expected behavior It can be debugged normally

Screenshots

企业微信截图_16426624866450

Version Include here the result of: M-x lsp-dart-version

[LSP Dart] 1.21.0 at 2022.01.20 @ Emacs 29.0.50
[Dart SDK] Dart SDK version: 2.15.1 (stable) (Tue Dec 14 13:32:21 2021 +0100) on "windows_x64"

[Flutter SDK] d:/
[Flutter project] false
[Project entrypoint] d:/Code/Dart/hello_world/bin/main.dart
xhcoding commented 2 years ago

Everything is ok on Ubuntu , maybe dap-mode does not work well on Windows

ericdallo commented 2 years ago

yeah, have no idea, maybe @yyoncho knows if it could be related with Windows?

xhcoding commented 2 years ago

After analyzing vscode and Dart-Code communication data, I found that after changing d: to D: , DAP mode can work normally.

not work:

Sending: 
{
  "command": "launch",
  "arguments": {
    "name": "Dart :: Debug",
    "type": "dart",
    "request": "launch",
    "dartSdkPath": "d:/Applications/Scoop/apps/dart/current/",
    "maxLogLineLength": 2000,
    "cwd": "d:/Code/Dart/hello_world/",
    "vmAdditionalArgs": [],
    "vmServicePort": 0,
    "debugExternalLibraries": null,
    "debugSdkLibraries": null,
    "evaluateGettersInDebugViews": true,
    "evaluateToStringInDebugViews": true,
    "flutterSdkPath": "d:/",
    "flutterTrackWidgetCreation": true,
    "useFlutterStructuredErrors": true,
    "useWriteServiceInfo": true,
    "debuggerHandlesPathsEverywhereForBreakpoints": true,
    "output-filter-function": "lsp-dart-dap--output-filter-function",
    "program": "d:/Code/Dart/hello_world/bin/main.dart"
  },
  "type": "request",
  "seq": 2
}

work:

Sending: 
{
  "command": "launch",
  "arguments": {
    "name": "Dart :: Debug",
    "type": "dart",
    "request": "launch",
    "dartSdkPath": "D:/Applications/Scoop/apps/dart/current/",
    "maxLogLineLength": 2000,
    "cwd": "D:/Code/Dart/hello_world/",
    "vmAdditionalArgs": [],
    "vmServicePort": 0,
    "debugExternalLibraries": null,
    "debugSdkLibraries": null,
    "evaluateGettersInDebugViews": true,
    "evaluateToStringInDebugViews": true,
    "flutterSdkPath": "D:/",
    "flutterTrackWidgetCreation": true,
    "useFlutterStructuredErrors": true,
    "useWriteServiceInfo": true,
    "debuggerHandlesPathsEverywhereForBreakpoints": true,
    "output-filter-function": "lsp-dart-dap--output-filter-function",
    "program": "D:/Code/Dart/hello_world/bin/main.dart"
  },
  "type": "request",
  "seq": 2
}

I believe this is Dart-Code's bug, I will open a issue to Dart-Code

xhcoding commented 2 years ago

I reopen this issue, because finally we have to solve this problem on the client side. Look Dart-Code/Dart-Code#3796

ericdallo commented 2 years ago

@xhcoding If I understood correctly, we should always send the cwd disk label for windows as upper case? is that right?

xhcoding commented 2 years ago

@ericdallo Yes, your are right.

ericdallo commented 2 years ago

Thanks, feel free to give a try, the code is on lsp-dart-dap.el, otherwise I can take a look later this week