microsoft / microsoft/vscode-js-debug

Unbound breakpoints in Node Typescript app launched with `tsx`

Open
#2,228 0 comments 0 reactions 1 assignee View on GitHub

@connor4312 is already working on this.

Since May 24, 2025.

bug
Dominant language
TypeScript
Stars
2k
Forks
373
Avg merge
1d 9m
Merged PRs (30d)
6

Description

Describe the bug
All my breakpoints become unbound as soon as I run the app with debugger attached:
launch.json:

 {
      "trace": true,
      "type": "node-terminal",
      "request": "launch",
      "name": "main-app-server:run",
      "command": "pnpm tsx watch --inspect src/main.ts",
      "localRoot": "${workspaceFolder}/services/main-app/server",
      "cwd": "${workspaceFolder}/services/main-app/server",
      "presentation": {
          "reveal": "always",
          "panel": "new"
      }
  }

The app runs fine, and until some point in near past the debugger worked fine too. There were a few upgrades since the last time it worked (upgraded Node version to 20, upgraded fastify and other core packages) so I can't pinpoint the exact change that broke it.

I don't believe that tsx produces any sourcemaps, so I'd expect to load the code from source, which I see happening; going to Debug Diagnostics -> What scripts and sourcemaps are loaded contains the list of all my source files. But each one of them has this, absolutePath verified?: ❌ Disk verification failed (does not exist or different content), while having very correct paths in url and absolutePath. Interesting thing is, that it happens only to my code; all sources loaded from node_modules show up as ✅ Verified on disk.

I've sent you the full log to email; but from what I've seen it's parsing the script and creating the source from url with no visible errors; what is strange though, as that in Debugger.scriptParsed log it says

"startLine":0,
"startColumn":0,
"endLine":1,
"endColumn":0,

for al the files,. This is the full row:

{"tag":"cdp.receive","timestamp":1748113976261,"metadata":{"connectionId":7,"message":{"method":"Debugger.scriptParsed","params":{"scriptId":"964","url":"file:///Users/ivantoropishkin/development/great-app/services/core/server/src/api/entities/user/user.repo.ts","startLine":0,"startColumn":0,"endLine":1,"endColumn":0,"executionContextId":1,"hash":"65c70ea2fff6d0aaba3c47d2da52e9c3bb490aef9900e65e05ef82983b369555","executionContextAuxData":{"isDefault":true},"isLiveEdit":false,"sourceMapURL":"","hasSourceURL":false,"isModule":true,"length":1164,"stackTrace":{"callFrames":[{"functionName":"_instantiate","scriptId":"194","url":"node:internal/modules/esm/module_job","lineNumber":133,"columnNumber":20}]},"scriptLanguage":"JavaScript","embedderName":"file:///Users/ivantoropishkin/development/great-app/services/core/server/src/api/entities/user/user.repo.ts"}}},"level":0}

Maybe it's irrelevant, but it's the only thing that caught the eye.

It's a very strange issue, and I have no clue on where to start digging it :(

To Reproduce
Steps to reproduce the behavior:

  1. Create a monorepo setup with pnpm, Node 20LTS and tsx
  2. Create the launch configuration like above
  3. Run it
  4. Observe the ❌ Disk verification failed errors and all the endpoints unbound

Log File

emailed to to connor@xbox.com

VS Code Version:
Version: 1.100.2 (Universal)
Commit: 848b80aeb52026648a8ff9f7c45a9b0a80641e2e
Date: 2025-05-14T21:47:40.416Z
Electron: 34.5.1
ElectronBuildId: 11369351
Chromium: 132.0.6834.210
Node.js: 20.19.0
V8: 13.2.152.41-electron.0
OS: Darwin arm64 24.5.0

Additional context
macos 15.5
Node 20LTS
Typescript 5.8.2
tsx 3.14
pnpm monorepo

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.