M1 Mac (Apple Silicon): AWS SAM Golang lambda debugging does not work
- Dominant language
- TypeScript
- Stars
- 2k
- Forks
- 807
- Avg merge
- 10h 12m
- Merged PRs (30d)
- 7
Description
**Desktop (please complete the following information):**
- OS: macOS BigSur 11.5.2 (M1)
- VS Code version: 1.16
- AWS Toolkit extension version: 1.29.0
- AWS SAM cli version: 1.31.0
- Go version: 1.16.8 (also tried this with the latest 1.17.1, but has the same issue)
- vscode-go version: 0.27.2
### How to get my AWS SAM initiated local debugging of lambda's written in Go working?
**Summary of the problem**
After creating a plain vanilla AWS SAM application with `sam init` for `golang`, and then using the code lens to create an AWS SAM template file based debug configuration, I get the following error when trying to debug the lambda code. Running the code without debugging works.
```
2021-09-11 10:55:02 [INFO]: The Delve repo was not found in your GOPATH. Downloading in a temporary directory...
2021-09-11 10:55:03 [INFO]: Preparing to debug locally: Lambda "hello-world"
2021-09-11 10:55:03 [INFO]: Building SAM application...
2021-09-11 10:55:03 [INFO]: Running command: (not started) [/opt/homebrew/bin/sam build --build-dir /tmp/aws-toolkit-vscode/vsctkeYZ6BB/output --template /Users/user1/dev/godev/aws/lambdas/hello-world/hello-world/app___vsctk___template.yaml --base-dir /Users/user1/dev/godev/aws/lambdas/hello-world/hello-world]
2021-09-11 10:55:03 [INFO]: Building codeuri: /Users/user1/dev/godev/aws/lambdas/hello-world/hello-world runtime: go1.x metadata: {} functions: ['helloworld']
2021-09-11 10:55:03 [INFO]: Running GoModulesBuilder:Build
2021-09-11 10:55:03 [INFO]:
Build Succeeded
2021-09-11 10:55:03 [INFO]:
Built Artifacts : ../../../../../../../private/tmp/aws-toolkit-vscode/vsctkeYZ6BB/output
Built Template : ../../../../../../../private/tmp/aws-toolkit-vscode/vsctkeYZ6BB/output/template.yaml
Commands you can use next
=========================
[*] Invoke Function: sam local invoke -t ../../../../../../../private/tmp/aws-toolkit-vscode/vsctkeYZ6BB/output/template.yaml
[*] Deploy: sam deploy --guided --template-file ../../../../../../../private/tmp/aws-toolkit-vscode/vsctkeYZ6BB/output/template.yaml
2021-09-11 10:55:04 [INFO]: Build complete.
2021-09-11 10:55:04 [INFO]: Starting SAM application locally
2021-09-11 10:55:05 [INFO]: AWS.running.command
Invoking hello-world (go1.x)
Requested to skip pulling images ...
Mounting /tmp/aws-toolkit-vscode/vsctkeYZ6BB/output/helloworld as /var/task:ro,delegated inside runtime container
START RequestId: 7c546e9e-8558-4fde-8dd6-fc6946034850 Version: $LATEST
API server listening at: [::]:5858
2021-09-11T00:55:07Z info layer=debugger launching process with args: [/var/task/hello-world]
2021-09-11 10:55:07 [INFO]: Waiting for SAM application to start...
could not launch process: fork/exec /var/task/hello-world: function not implemented
2021/09/11 00:55:07 exit status 1
time="2021-09-11T00:55:07.765" level=error msg="Init failed" InvokeID= error="Runtime exited with error: exit status 1"
time="2021-09-11T00:55:07.773" level=error msg="INIT DONE failed: Runtime.ExitError"
2021-09-11 10:55:08 [INFO]: Attaching debugger to SAM application...
Command stopped: "sam local invoke"
```
From the output listed above, it seems to me that when using the debugger, it thinks that the function is not implemented.
2021-09-11 10:55:07 [INFO]: Waiting for SAM application to start...
**could not launch process**: fork/exec /var/task/hello-world: **function not implemented**
Running the above lambda from command line with `sam build && sam local invoke` works.
**Other considerations**
- Go debugging works for vanilla go apps (non lambdas)
- Go lambdas run successfully with `sam local invoke`.
**Steps to reproduce**
1. Create a new AWS SAM application using Go with `sam init`.
2. Select the `Hello world` template.
3. In the main.go file, create a debug configuration from the code lens provided by the AWS Toolkit and associated with the handler.
4. Set a breakpoint and start debugging.
Contributor guide
Research direction
Start with the generated debug configuration from main.go and the AWS SAM template, then compare the Toolkit's debug launch path with the working `sam build && sam local invoke` flow. Investigate the Delve startup output and the `/var/task/hello-world` launch failure on M1. Done means the generated configuration can debug the Go Lambda successfully while ordinary local invocation continues to work.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- aws, go, vscode
- Domain
- backend, cloud, devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100