[RUBY] [Visual Studio Code] J'obtiens une erreur de syntaxe lors de l'exécution du débogage lors de l'utilisation de rbenv

environnement

article version
OS Mac Catalina 10.15.6
Visual Studio Code 1.49.0
Ruby 2.7.1

J'utilisais rbenv pour le contrôle de version Ruby

supposition

Les gemmes nécessaires au débogage ont été ajoutées au Gemfile et étaient déjà installées

gem "ruby-debug-ide"
gem "debase"

Erreur

Sélectionnez Exécuter sur le côté gauche de Visual Studio Code et sélectionnez Ajouter une configuration-> RSpec - fichier de spécification active uniquement

Lorsque j'ai débogué avec les paramètres ci-dessus, la barre d'état en bas de l'écran est restée orange indiquant qu'elle était en cours d'exécution, et rien n'a progressé.

ReRun renvoie l'erreur suivante dans la vue [OUTPUT] comme illustré ci-dessous.

Uncaught exception: /Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected tSTRING_BEG, expecting do or '{' or '('
[ -n "$RBENV_DEBUG" ] && set -x
     ^
/Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected ']', expecting end-of-input
[ -n "$RBENV_DEBUG" ] && set -x
                    ^

/Users/pldb/.rbenv/versions/2.6.6/bin/rdebug-ide:23:in `load': /Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected tSTRING_BEG, expecting do or '{' or '(' (SyntaxError)
[ -n "$RBENV_DEBUG" ] && set -x
     ^
/Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected ']', expecting end-of-input
[ -n "$RBENV_DEBUG" ] && set -x
                    ^
	from /Users/pldb/.rbenv/versions/2.6.6/bin/rdebug-ide:23:in `<main>'

résultat

Changement de .vscode / launch.json comme suit

** Changer avant **

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "RSpec - active spec file only",
      "type": "Ruby",
      "request": "launch",
      "program": "/Users/pldb/.rbenv/shims/rspec",
      "args": [
        "-I",
        "${workspaceRoot}",
        "${file}"
      ]
    }
  ]
}

** Après changement **

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "RSpec - active spec file only",
      "type": "Ruby",
      "request": "launch",
      "program": "${workspaceRoot}/bin/rspec",
      "args": [
        "-I",
        "${workspaceRoot}",
        "${file}"
      ]
    }
  ]
}

Il s'agit du paramètre par défaut de Visual Studio Code Cependant, j'ai utilisé binstub

Cause

Le " programme " au moment où launch.json a été généré était " $ {workspaceRoot} / bin / rspec "

Cependant, j'ai pensé que le chemin de rspec utilisé était correct et l'ai remplacé par le chemin suivant

% which rspec
/Users/pldb/.rbenv/shims/rspec

L'erreur de titre a été causée par ceci

Référence: rspec ne s'exécute pas en tant que programme, il est analysé comme s'il s'agissait d'un fichier de code.

C'est le contenu de la rspec sous shims qui était en fait référencé

#!/usr/bin/env bash
set -e
[ -n "$RBENV_DEBUG" ] && set -x

program="${0##*/}"
if [ "$program" = "ruby" ]; then
  for arg; do
    case "$arg" in
    -e* | -- ) break ;;
    */* )
      if [ -f "$arg" ]; then
        export RBENV_DIR="${arg%/*}"
        break
      fi
      ;;
    esac
  done
fi

export RBENV_ROOT="/Users/pldb/.rbenv"
exec "/usr/local/Cellar/rbenv/1.1.2/libexec/rbenv" exec "$program" "$@"

Il s'agit d'un fichier bash généré par rbenv (pour référencer rspec), et la lecture de ce fichier car il a généré une erreur. En d'autres termes, c'était parce que je ne comprenais pas complètement rspec.

Contre-mesures

Utiliser binstub

Référence: [Traduction + Explication] Comprendre binstub: Comportement de RubyGems, rbenv, bundler

Générez $ {workspaceRoot} / bin / rspec dans binstub pour en faire la rspec à utiliser dans votre projet

$ {workspaceRoot} pointe vers un dossier dans le répertoire extrait avec Visual Studio Code

Accédez à ce répertoire et procédez comme suit

% bundle binstubs rspec-core
% ./bin/rspec -v
RSpec 3.9
  - rspec-core 3.9.2
  - rspec-expectations 3.9.2
  - rspec-mocks 3.9.1
  - rspec-support 3.9.3

Vous pouvez maintenant exécuter avec les paramètres par défaut

Évitez les dossiers bin (pour ne pas affecter les autres contributeurs) si vous créez une gemme

% bundle binstubs rspec-core --path exe
% ./exe/rspec -v
RSpec 3.9
  - rspec-core 3.9.2
  - rspec-expectations 3.9.2
  - rspec-mocks 3.9.1
  - rspec-support 3.9.3

Dans ce cas, le chemin de " programme " dans launch.json sera $ {workspaceRoot} / exe / rspec

Restant

Si vous ne vous souciez pas de la version de rspec dans votre projet, cela fonctionne même si vous spécifiez / usr / local / bin / rsepc comme suit:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "RSpec - active spec file only",
      "type": "Ruby",
      "request": "launch",
      "program": "/usr/local/bin/rspec",
      "args": [
        "-I",
        "${workspaceRoot}",
        "${file}"
      ]
    }
  ]
}

Et c'est une autre question, mais je couvrirai une autre chose à propos de la configuration de launch.json. Une erreur d'encodage s'est produite dans gemspec

Uncaught exception: 
[!] There was an error parsing `Gemfile`: 
[!] There was an error while loading `xxx.gemspec`: invalid byte sequence in US-ASCII. Bundler cannot continue.

Comme vous pouvez le voir, c'est dû aux paramètres d'encodage

Référence: Problème d'encodage lors de l'utilisation de gem'xcodeproj '

Le launch.json lors du débogage pendant le développement de gem ressemble finalement à ceci:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "RSpec - active spec file only",
      "type": "Ruby",
      "request": "launch",
      "program": "${workspaceRoot}/exe/rspec",
      "args": [
        "-I",
        "${workspaceRoot}",
        "${file}"
      ],
      "env": {
        "LANG": "en_US.UTF-8",
        "LC_COLLATE": "en_US.UTF-8",
        "LC_CTYPE": "en_US.UTF-8",
        "LC_MESSAGES": "en_US.UTF-8",
        "LC_MONETARY": "en_US.UTF-8",
        "LC_NUMERIC": "en_US.UTF-8",
        "LC_TIME": "en_US.UTF-8",
        "LC_ALL": "en_US.UTF-8"
      }
    }
  ]
}

Recommended Posts

[Visual Studio Code] J'obtiens une erreur de syntaxe lors de l'exécution du débogage lors de l'utilisation de rbenv
J'obtiens une erreur lors de l'ajout d'une dépendance
Une note sur "Ne pas émettre une erreur de certificat avec un certificat auto-signé à l'aide de Keytool Java"
Une erreur 404 se produit lors du test de l'authentification par formulaire avec Spring Security
J'obtiens une erreur de version de Ruby lorsque j'essaye de démarrer Rails.
J'ai une question. Une erreur se produit lors de la lecture d'une vidéo dans Listview avec Android.
Prise en main des programmes Java à l'aide de Visual Studio Code
Je ne pouvais pas taper le japonais dans Ubuntu20.04 + Visual Studio Code
Pourquoi pouvez-vous développer Java avec Visual Studio Code?
Je n'ai trouvé aucun moyen d'obtenir le code d'erreur lorsque j'ai reçu une exception sur Android
J'ai eu une erreur lors de l'utilisation de nextInt, nextLine et substring.
La variable java.home définie dans les paramètres de Visual Studio Code pointe vers un dossier manquant ou inaccessible (C: avadk-13.0.1)
Java avec Visual Studio Code
Erreur lors de l'utilisation des rails capybara
Ce que j'ai appris en travaillant Java avec Visual Studio Code
Évitez les erreurs de code de caractère en java lors de l'utilisation de l'extension VScode RUN-CODE