To debug JavaScript or TypeScript files, you can use the VSCode JS Debug DAP server.
Let’s debug the following test.js file:
const s = "foo";
console.log(s);-
Download the
js-debug-dap-v*.tar.gzasset from the VSCode JS Debug releases.
For example, download js-debug-dap-v1.96.0.tar.gz, which is the latest version at the time of writing. -
Extract the archive into any folder (e.g.,
/home/path/to/dap). The extracted folder should contain the DAP server at/js-debug/src/dapDebugServer.js. -
Create a DAP Run/Debug configuration:
-
In the
Servertab, click oncreate a new server: -
It opens a new dialog to create DAP server, select
VSCode JS Debugtemplate:
-
After clicking on
OKbutton, it will select the new server and pre-fill configurations:
This will automatically populate:
- the server
name - the
commandwhich starts the DAP server which should look like this:
node <<insert base directory>>/js-debug/src/dapDebugServer.js ${port} 127.0.0.1
Replace <<insert base directory>> with the directory (e.g., /home/path/to/dap) where you extracted the DAP server. For example:
node /home/path/to/dap/js-debug/src/dapDebugServer.js ${port} 127.0.0.1
The ${port} argument will be replaced with a free port when the run configuration starts.
- the
Connect to the server by waitingoption is set toLog pattern before processingwith:
Debug server listening at
This means the DAP (Debug Adapter Protocol) client will connect to the DAP server when this trace appears in the console:
node /home/path/to/dap/js-debug-dap-v1.96.0/js-debug/src/dapDebugServer.js 56425 127.0.0.1
Debug server listening at 127.0.0.1:56425
- Enable DAP server traces
If you wish to show DAP request/response traces when you will debug:
you need to select Trace with verbose.
To allows settings breakpoints to JavaScript, TypeScript, etc files, you need configure mappings in the Mappings tab.
As you have selected VSCode JS Debug server, it will automatically populate the file mappings like this:
- Fill in the
Configurationtab:
- the
working directory(usually the project's root directory) - the path to the
test.jsfile.
- Select
LaunchasDebug mode. - The DAP parameters of the launch should look like this:
{
"type": "pwa-node",
"name": "Launch JavaScript file",
"request": "launch",
"program": "${file}",
"cwd": "${workspaceFolder}"
}When the run configuration starts:
${workspaceFolder}will be replaced with the working directory you specified.${file}will be replaced with the full path totest.js.
After applying the run configuration, you should set a breakpoint to files which matches file mappings.
Set a breakpoint in the test.js file:
You can start the run configuration in either Run or Debug mode. Once started, you should see DAP traces in the console:
You will also see Threads and Variables:
Let’s debugging the following test.ts file:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
console.log(greeter.greet())Create a tsconfig.json file like this:
{
"compilerOptions": {
"target": "ES6",
"module": "CommonJS",
"outDir": "out",
"sourceMap": true
}
}Execute tsc command to generate source maps in the out folder:
test.jstest.js.map
Select the Launch TypeScript file configuration:
which will update the DAP parameters like this:
{
"type": "pwa-node",
"name": "Launch TypeScript file",
"request": "launch",
"program": "${file}",
"cwd": "${workspaceFolder}",
"outFiles": [
"${workspaceFolder}/**/*.(m|c|)js",
"!**/node_modules/**"
],
"sourceMaps": true,
"__workspaceFolder": "${workspaceFolder}"
}Update the path with the test.ts file.
TypeScript debugging should be available:
If you need language support for TypeScript/JavaScript (completion, validation, etc.), you can configure the TypeScript Language Server.














