Hello World tutorial that shows how to setup VS Code to debug Golang App Engine code with Visual Studio (aka VScode )
This is using using the Helloworld code from AppEngine documentation:
go get -u -d github.com/directmeasure/VScodeDebugGoAppEngine.git
on a Mac running osX 10.13.3.
I've tested the code and the server works locally. I'm trying to figure out how to enter into the code with the debugger so I can learn how to use the debugger on other projects.
These were the best instructions I could find for using VScode with GAE but they seem to be outdated based on updates to Golang(e.g. switch to Gcloud, -go_debugging flag and change of directory structure):
https://medium.com/@dbenque/debugging-golang-appengine-module-with-visual-studio-code-85b3aa59e0f
Here are the steps I took:
added to .bash_profile
export BASEFOLDER="/Users/Bryan/google-cloud-sdk/" .
export GOROOT="/usr/local/go" # this shoudln't have to be set with current Version, doing it to follow the tutorial .
How I have attempted to get debugger to run:
dev_appserver.py --go_debugging=true app.yaml
ps aux | grep _go_app
dlv attach <#using the PID from the server binary>
Delve successfully attaches to the binary.
When I start the Debug session, the blue progress bar never stops scanning horizontally.
The VARIABLE sidebar is never populated with the variables in hello.go
The Breakpoint is set at hello.go: line 21
The Debug REPL terminal displays:
Verbose logs are written to:
/var/folders/mw/0y88j8_54bjc93d_lg3120qw0000gp/T/vscode-go-debug.txt
16:02:31, 2018-4-5
InitializeRequest
InitializeResponse
Using GOPATH: /Users/Bryan/go
fmt.Print(u)
Please start a debug session to evaluate
Here is the launch.json config:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "debug",
"remotePath": "",
//"port": 1234,
"port": 2345 // docs say port should match assigned port headless server, https://github.com/Microsoft/vscode-go/wiki/Debugging-Go-code-using-VS-Code#remote-debugging
// this creates bind error
"host": "127.0.0.1",
"program": "${workspaceFolder}/hello.go",
"env": {},
"args": [],
"showLog": true,
"trace": true,
}
]
}
Here are the versions I have installed:
go version go1.10 darwin/amd64
$ gcloud version .
Google Cloud SDK 197.0.0
app-engine-go
app-engine-python 1.9.68
bq 2.0.31
core 2018.04.06
gsutil 4.30
VS code extension:
Go 0.6.78
EDIT###########################
$ lsof -n -i :8080
Bryan@Bryans-MacBook-Pro Thu Apr 12 17:02:04 ~
$ lsof -n -i :2345
Bryan@Bryans-MacBook-Pro Thu Apr 12 17:03:34 ~
$ ps aux | grep _go_app
Bryan 7433 0.0 0.0 2434840 800 s000 S+ 5:03PM 0:00.00 grep _go_app
Bryan 7426 0.0 0.0 556603172 3896 s002 S+ 5:02PM 0:00.01 /var/folders/mw/0y88j8_54bjc93d_lg3120qw0000gp/T/tmp8GWk1gappengine-go-bin/_go_app
Bryan@Bryans-MacBook-Pro Thu Apr 12 17:03:52 ~
$ dlv attach --headless -l "localhost:2345" 7426 /var/folders/mw/0y88j8_54bjc93d_lg3120qw0000gp/T/tmp8GWk1gappengine-go-bin/_go_app
API server listening at: 127.0.0.1:2345
When I start the Debugger, REPL shows:
Verbose logs are written to:
/var/folders/mw/0y88j8_54bjc93d_lg3120qw0000gp/T/vscode-go-debug.txt
couldn't start listener: listen tcp 127.0.0.1:2345: bind: address already in use
Process exiting with code: 1
To debug a program, execute the dlv debug command. Attach the filename at the end of this command, and debugging will start. For example, if you want to debug the main.go file, run the command dlv debug main.go . It is also known as “delve server” because this is a running process waiting for instructions.
To set a breakpoint in source code, click in the far left margin next to a line of code. You can also select the line and press F9, select Debug > Toggle Breakpoint, or right-click and select Breakpoint > Insert breakpoint.
VS Code never attaches to Delve because it is waiting to connect to the remote Delve server at 127.0.0.1:2345
. If you dlv attach
in headless mode, listening at the correct address, you should hopefully be able to connect.
The steps below describe how to debug a Go App Engine application running with dev_appserver.py
and no other tools/helpers. However, when you make changes to your Go code, dev_appserver.py
recompiles and restarts the application, changing the PID Delve needs to debug. http://github.com/dbenque/delveAppengine can help keep Delve attached to the right process. See here for a tutorial.
go get -u -d github.com/directmeasure/VScodeDebugGoAppEngine.git
cd $GOPATH/src/src/github.com/GoogleCloudPlatform/golang-samples/appengine/helloworld
Note: if your GOPATH has more than one entry, cd
to the directory go get
downloaded to.
Start the App Engine development server:
dev_appserver.py --go_debugging=true app.yaml
Find the PID of the Go process:
ps aux | grep _go_app
Start the Delve server (select any port available on your system):
dlv --headless -l "localhost:2345" attach $GO_APP_PID
Create a "Go: Connect to server" entry:
Note: this is only a template - you can edit it later.
Customize the config to point to the port you specified when starting Delve. Here is my full configuration:
{ "name": "Launch", "type": "go", "request": "launch", "mode": "debug", "remotePath": "", "port": 2345, "host": "127.0.0.1", "program": "${fileDirname}", "env": {}, "args": [], "showLog": true }
For general help with debugging Go code in VS Code (not run with App Engine), see https://github.com/Microsoft/vscode-go/wiki/Debugging-Go-code-using-VS-Code.
Yes, it is outdated. The page you are getting from, does not exist. Instead, you can run
go get github.com/GoogleCloudPlatform/golang-samples/tree/master/appengine/helloworld/...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With