Comment configurer la session de débogage VScode pour Golang et AppEngine?
VScodeDebugGoAppEngine
tutoriel Hello World qui montre comment configurer VS Code pour déboguer le code moteur de L'application Golang avec Visual Studio (alias VScode)
ceci utilise le code Helloworld de la documentation D'AppEngine:
go get -u -d github.com/directmeasure/VScodeDebugGoAppEngine.git
sur un Mac OSX 10.13.3.
j'ai testé le code et le serveur fonctionne en local. J'essaie de comprendre comment entrer dans le code avec le débogueur pour apprendre à utiliser le débogueur sur d'autres projets.
ce sont les meilleures instructions que j'ai pu trouver pour utiliser VScode avec GAE mais elles semblent être périmées en fonction des mises à jour de Golang(par exemple, passer à gcloud,- go_debugging flag et changement de répertoire structure):
https://medium.com/@dbenque/debugging-golang-appengine-module-with-visual-studio-code-85b3aa59e0f
Voici les mesures que j'ai prises:
mettre en place des Environnement
ajouté .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 .
Comment j'ai essayé d'obtenir de l'débogueur pour exécuter:
démarrage du serveur local .
dev_appserver.py --go_debugging=true app.yaml
joindre binaire local pour Plonger
ps aux | grep _go_app
dlv attach <#using the PID from the server binary>
Delve s'attache avec succès au binaire.
quand je commence le session de Débogage, la barre bleue de progression ne cesse jamais de balayer horizontalement.
la VARIABLE barre latérale n'est jamais remplie avec les variables dans bonjour.aller
le point de rupture est positionné à hello.aller: ligne 21
le terminal de débogage REPL affiche:
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
voici le lancement.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,
}
]
}
Voici les versions que j'ai installé:
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
MODIFIER###########################
$ 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
quand je démarre le débogueur, REPL affiche:
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
2 réponses
le code VS ne se fixe jamais à Delve car il attend de se connecter au serveur Delve à 127.0.0.1:2345
. Si vous dlv attach
en mode sans tête, en écoutant à la bonne adresse, vous devriez être en mesure de vous connecter.
les étapes ci-dessous décrivent comment déboguer une application Go App Engine fonctionnant avec dev_appserver.py
et aucun autre outil / helpers. Cependant, lorsque vous apportez des modifications à votre code Go, dev_appserver.py
recompile et redémarre l'application, en changeant le PID Delve doit être débogué. http://github.com/dbenque/delveAppengine peut aider à maintenir la profondeur attachée au bon processus. Voir ici pour un tutoriel.
- Installer VS Code Go extension.
go get -u -d github.com/directmeasure/VScodeDebugGoAppEngine.git
cd $GOPATH/src/src/github.com/GoogleCloudPlatform/golang-samples/appengine/helloworld
Note: si votre GOPATH contient plus d'une entrée,
cd
dans le répertoirego get
télécharger.démarrage du développement du moteur App serveur:
dev_appserver.py --go_debugging=true app.yaml
- Visite http://localhost:8080 pour vous assurer que le serveur est en cours d'exécution.
Trouver le PID des processus:
ps aux | grep _go_app
Démarrer le Plonger serveur (sélectionner n'importe quel port disponible sur votre système):
dlv --headless -l "localhost:2345" attach $GO_APP_PID
- ouvrir L'onglet de débogage du code VS (mandated on macOS, Ctrl+Shift+D on Windows & Linux).
- Créer un nouveau lancez la configuration en cliquant sur l'engrenage et en sélectionnant n'importe quelle entrée (voir docs officiels ici).
Créer un "Aller: se Connecter au serveur" entrée:
Note: Ce n'est qu'un modèle - vous pouvez l'éditer plus tard.
Personnalisez la configuration pour pointer vers le port que vous avez spécifié lors du démarrage de Delve. Voici ma configuration:
{ "name": "Launch", "type": "go", "request": "launch", "mode": "debug", "remotePath": "", "port": 2345, "host": "127.0.0.1", "program": "${fileDirname}", "env": {}, "args": [], "showLog": true }
- ajouter des points d'arrêt au besoin et visiter http://localhost:8080 nouveau. L'exécution devrait s'arrêter lorsqu'un point de rupture est atteint, les variables devraient être listées dans la section variables du code VS, et la pile d'appels devrait être dans la section pile d'appels.
pour obtenir de l'aide générale sur le débogage du code Go dans le VS Code (ne fonctionne pas avec App Engine), voir https://github.com/Microsoft/vscode-go/wiki/Debugging-Go-code-using-VS-Code.
Oui, c'est dépassé. La page d'où vous venez ne sort pas. vous pouvez exécuter
go get github.com/GoogleCloudPlatform/golang-samples/tree/master/appengine/helloworld/...
si