web-dev-qa-db-fra.com

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 Golang App Engine avec Visual Studio (alias VScode)

Cela utilise le code Helloworld de la documentation AppEngine:

go get -u -d github.com/directmeasure/VScodeDebugGoAppEngine.git

sur un Mac exécutant osX 10.13.3.

J'ai testé le code et le serveur fonctionne localement. J'essaie de comprendre comment entrer le code avec le débogueur afin que je puisse 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 obsolètes sur la base des mises à jour de Golang (par exemple, passer à Gcloud, -go_debugging flag et changement de structure de répertoire):
https://medium.com/@dbenque/debugging-golang-appengine-module-with-visual-studio-code-85b3aa59e0f

Voici les étapes que j'ai suivies:

configurer l'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'exécuter le débogueur:

démarrer le serveur local.

dev_appserver.py --go_debugging=true app.yaml

attacher un binaire local à Delve

 ps aux | grep _go_app 

dlv attach <#using the PID from the server binary>

Delve s'attache avec succès au binaire.

Lorsque je démarre la session de débogage , la barre de progression bleue n'arrête jamais de scanner horizontalement.

La barre latérale VARIABLE n'est jamais remplie avec les variables dans hello.go

Le point d'arrêt est défini sur hello.go: ligne 21

Le terminal Debug 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 la configuration launch.json:

{
    "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ées:

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

ÉDITER###########################

$ 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

Lorsque je démarre le débogueur, REPL montre:

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
22
BryanWheelock

VS Code ne se connecte jamais à Delve car il attend de se connecter au serveur Delve distant à 127.0.0.1:2345. Si vous dlv attach en mode sans tête, en écoutant à la bonne adresse, vous devriez pouvoir, espérons-le, vous connecter.

Les étapes ci-dessous décrivent comment déboguer une application Go App Engine exécutée avec dev_appserver.py et aucun autre outil/assistant. Cependant, lorsque vous apportez des modifications à votre code Go, dev_appserver.py recompile et redémarre l'application, en modifiant le PID Delve à déboguer. http://github.com/dbenque/delveAppengine peut aider à maintenir Delve attaché au bon processus. Voir ici pour un tutoriel.

  1. Installez extension VS Code Go .
  2. go get -u -d github.com/directmeasure/VScodeDebugGoAppEngine.git
  3. cd $GOPATH/src/src/github.com/GoogleCloudPlatform/golang-samples/appengine/helloworld

    Remarque: si votre GOPATH a plusieurs entrées, cd dans le répertoire go get téléchargé sur.

  4. Démarrez le serveur de développement App Engine:

    dev_appserver.py --go_debugging=true app.yaml

  5. Visitez http: // localhost: 808 pour vous assurer que le serveur fonctionne.
  6. Trouvez le PID du processus Go:

    ps aux | grep _go_app

  7. Démarrez le serveur Delve (sélectionnez n'importe quel port disponible sur votre système):

    dlv --headless -l "localhost:2345" attach $GO_APP_PID

  8. Ouvrez l'onglet de débogage VS Code (⇧⌘D sur macOS, Ctrl + Shift + D sous Windows et Linux).
  9. Créez une nouvelle configuration de lancement en cliquant sur l'engrenage et en sélectionnant n'importe quelle entrée (voir les documents officiels ici ).
  10. Créez une entrée "Aller: Se connecter au serveur":create config dropdown

    Remarque: ce n'est qu'un modèle - vous pouvez le modifier plus tard.

  11. Personnalisez la configuration pour pointer vers le port que vous avez spécifié lors du démarrage de Delve. Voici ma configuration complète:

     {
     "nom": "Lancer", 
     "taper": "aller", 
     "demander": "lancer", 
     "mode": "débogage", 
     "remotePath": "", 
     "port": 2345, 
     "Host": "127.0.0.1", 
     "programme": "$ {fileDirname}", 
     "env": {}, 
     "args": [], 
     "showLog": true 
    } 
    
  12. Ajoutez des points d'arrêt comme vous le souhaitez et visitez http: // localhost: 808 à nouveau. L'exécution doit s'arrêter lorsqu'un point d'arrêt est atteint, les variables doivent être répertoriées dans la section variables du code VS et la pile des appels doit se trouver dans la section de la pile des appels.

Pour obtenir une aide générale sur le débogage du code Go dans VS Code (non exécuté avec App Engine), voir https://github.com/Microsoft/vscode-go/wiki/Debugging-Go-code-using-VS-Code .

13

Oui, c'est obsolète. La page dont vous sortez n'existe pas. Au lieu de cela, vous pouvez exécuter

go get github.com/GoogleCloudPlatform/golang-samples/tree/master/appengine/helloworld/...
1
Victor Oliveira