microsoft / java-debug

The debug server implementation for Java. It conforms to the debug protocol of Visual Studio Code (DAP, Debugger Adapter Protocol).
Other
336 stars 154 forks source link

SetBreakpointsRequestHandler fails when supplied path is using forward slashes #318

Open LeKirby opened 4 years ago

LeKirby commented 4 years ago

Description When a DAP (debug adapter protocol) client sends a setBreakpoints request with a path that contains forward slashes the breakpoint is not set. The server also (wrongfully?) reports back that the command was executed successfully.

Observed behavior The code runs without halting at the breakpoint.

Expected behavior The program should halt at the breakpoint and send a breakpoint event to the DAP client.

Logging with forward slashes (Not working)

Sending: 
{
  "command": "setBreakpoints",
  "arguments": {
    "source": {
      "name": "Hello.java",
      "path": "c:/project/src/main/java/Hello.java"
    },
    "breakpoints": [
      {
        "line": 6
      }
    ],
    "sourceModified": false,
    "lines": [
      6
    ]
  },
  "type": "request",
  "seq": 3
}

Received:
{
  "type": "response",
  "seq": 4,
  "body": {
    "breakpoints": [
      {
        "message": "",
        "line": 6,
        "verified": null,
        "id": 1
      }
    ]
  },
  "command": "setBreakpoints",
  "request_seq": 3,
  "success": true
}

Logging with backward slashes (Working)

Sending: 
{
  "command": "setBreakpoints",
  "arguments": {
    "source": {
      "name": "Hello.java",
      "path": "c:\project\src\main\java\Hello.java"
    },
    "breakpoints": [
      {
        "line": 6
      }
    ],
    "sourceModified": false,
    "lines": [
      6
    ]
  },
  "type": "request",
  "seq": 3
}

Received:
{
  "type": "response",
  "seq": 4,
  "body": {
    "breakpoints": [
      {
        "message": "",
        "line": 6,
        "verified": true,
        "id": 1
      }
    ]
  },
  "command": "setBreakpoints",
  "request_seq": 3,
  "success": true
}

Suggestion I think the "offending" code is here This line behaves differently depending if forward or backward slashes have been used. Maybe replace all forward slashes with backward slashes if we are on windows. Could be implemented before/after the drive letter fix.

System Windows 10 DAP Client: emacs with lsp-mode/dap-mode DAP Server: jdtls (Eclipse language server)

akaroml commented 4 years ago

@testforstephen please take a look.

testforstephen commented 4 years ago

Need find a better approach to detect whether the source path string represents a real file path or uri.