Cannot debug serverless application in Visual Studio Code

Viewed 9892

I have tried to debug serverless application developed using serverless framework in VS code. I have followed this article.

But when I trying to debug the code I'm getting an error from VS code as below.

Cannot launch program 'g:\Projects\Serverless1\node_modules.bin\sls'; setting the 'outDir or outFiles' attribute might help.

sls command file already exists in the folder and following are the launch.json file settings

"version": "0.2.0",
"configurations": [

    {
        "type": "node",
        "request": "launch",
        "protocol": "inspector",
        "name": "run hello function",
        "program": "${workspaceRoot}\\node_modules\\.bin\\sls",
        "args": [
            "invoke",
            "local",
            "-f",
            "hello",
            "--data",
            "{}"
        ]

    }
]

Please help me to fix this issue.

4 Answers

None of the solutions worked for me so here is my modification as a resource. Also, multiple coworkers were able to attack just by flipping auto-attach to on and using the invoke local keywords.

Below is a snippet featuring the launch.json that eventually worked for me. /w comments for clarity where my function is named Processor.

--function or -f The name of the function in your service that you want to invoke locally.

--path or -p The path to a json file holding input data to be passed to the invoked function as the event. This path is relative to the root directory of the service.

--stage or -s The stage in your service you want to invoke your function in.

  • "serverless": "^1.30.3"
  • "serverless-plugin-typescript": "^1.1.5",
  • node: 8.10.0
  • npm: 5.6.0

    {
      "version": "0.2.0",
      "configurations": [
          {
              "type": "node",
              "request": "launch",
              "name": "Debug Lambda",
              "program": "${workspaceFolder}/node_modules/.bin/sls",
              "args": [
                  "invoke",
                  "local",
                  "-f",
                  "Processor",
                  "-p",
                  "./events/S3toLambda.json",
                  "-s",
                  "local"
              ],
              "autoAttachChildProcesses": true
          }
      ]
    }
    

Update for 2020:

Do what the other guides state and setup your project with a launch.json file.

The problem I had was that the supposed file "program": "${workspaceRoot}/node_modules/.bin/sls" threw an error.

I changed it to "${workspaceRoot}/node_modules/serverless/bin/serverless" and it worked. Here's the full file:

.vscode/launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Serverless debug",
            "program": "${workspaceRoot}/node_modules/serverless/bin/serverless",
            "args": [
                "invoke",
                "local",
                "-f",
                "hello",
                "--data",
                "{}"
            ]
        }
    ]
}

Be aware that the argument hello is the name of the function I want to debug. I think the intended use case must be that you change that file name for whatever function you want to invoke. Maybe someone could create a VSCode plugin to do this?

Related