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
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?
To get debugging to work with TypeScript I needed to add outFiles set to the folder where my compiled code goes.
"outFiles": [
    "${workspaceRoot}/dist/**/*.js"
]
I haven't tried to debug straight JS but I would assume it's something like this.
"outFiles": [
    "${workspaceRoot}/**/*.js"
]
I attempted to follow the same article, and experienced the same error.  Adding outFiles didn't help, although it did change my error message to:
Cannot launch program 'd:\<path>\node_modules\.bin\sls' because corresponding JavaScript cannot be found.
I can't explain why VSCode has a problem with the executable in node_modules/.bin, but if I point at node_modules/serverless/bin instead, things work as expected:
"program": "${workspaceFolder}\\node_modules\\serverless\\bin\\serverless",
Here is my full working configuration, where my test event JSON exists in sample-event.json in the project root:
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Debug Lambda",
            "program": "${workspaceFolder}/node_modules/serverless/bin/serverless",
            "args": [
                "invoke",
                "local",
                "-f",
                "<function-name>",
                "--data",
                "{}" // You can use this argument to pass data to the function to help with the debug
            ]
        }
    ]
}
Using Serverless ^1.26.1, Node 8.9.4 LTS, VSCode 1.20.1
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.
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
      }
  ]
}