Nous avons une extension (interne) VS Code implémentant le protocole Language Server pour une langue. J'ai consulté le exemple VS Code LS pour activer le débogage sur le serveur, cependant dans l'exemple, le ServerOptions utilisé pour initialiser le LanguageClient est toujours un type :

{
  run: NodeModule;
  debug: NodeModule;
}

Et ici, un argument inspect avec un numéro de port peut être explicitement transmis au client, qui peut ensuite être utilisé pour déboguer.

Dans notre projet, nous utilisons déjà la version (() => Promise<StreamInfo>) du type ServerOptions, qui bien sûr ne fournit pas de mécanisme pour passer les arguments pour démarrer le service avec le débogage disponible sur un port spécifique.

Pour démarrer le serveur de langue, nous appelons plus tard child_process.spawn(command, args, options) avec quelques arguments pour lancer le processus du serveur. Ici, le command est node, args est ["path/to/server/main.js", "path/to/log/output" ], options est :

{
  "cwd":"path/to/workspace/folder",
  "env":{/*various environment propreties, including a hostname, but no port*/}
}

Je suppose qu'il existe une variable argument/env spécifique que nous devrions transmettre à ce stade pour rendre le serveur débogage ? Que puis-je transmettre ici pour écouter le débogueur sur un port donné ?

Remarque: nous utilisons vscode-remote, mais je ne pense pas que cela devrait avoir un impact sur la réponse (en plus de s'assurer que le port utilisé est ouvert sur la machine distante).

0
ElFik 13 nov. 2020 à 06:39

1 réponse

Meilleure réponse

Le mécanisme que j'ai trouvé consiste à ajouter "--inspect" comme premier argument à args dans child_process.spawn(...), donc args a maintenant la valeur : ["--inspect", "path/to/server/main.js", "path/to/log/output"]

Cela lance l'écouteur de débogage sur le port de nœud par défaut (9229) sur 127.0.0.1

0
ElFik 18 nov. 2020 à 02:40