web-dev-qa-db-fra.com

Comment désactiver le débogueur de noeud "break on first line"

Existe-t-il un argument de ligne de commande ou une variable d’environnement qui désactive la fonctionnalité "Interrompre en première ligne" du débogueur de noeud?

43

Selon ce problème j’ai ouvert dans le nœud repo, pour l’instant, cela n’est pas possible. C'est aussi quelque chose que les gars de nœuds ne voient pas comme une fonctionnalité qui mérite d'être implémentée "parce que cela semble inutile. […] L'attachement à un processus en cours fait exactement" la même chose. Voir le reste de la discussion dans le numéro mentionné.

Si vous pensez que vous voulez une telle fonctionnalité, votez sur celle-ci, laissez un commentaire dans le numéro de Github et, en l'absence de réponse, ouvrez-en une nouvelle et publiez-la ici également.

23
Gabriel Petrovay

Il existe en réalité deux concepts de débogueur dans le noeud: le débogueur V8 (avec son protocole basé sur TCP) et un débogueur de ligne de commande de noeud (CLI).

Lorsque vous exécutez node debug app.js, une interface CLI de débogueur est exécutée dans le processus de noeud principal et un nouveau processus de noeud enfant est créé pour le script débogué (node --debug-brk app.js). L'option --debug ou --debug-brk permet d'activer le débogueur V8 dans le processus enfant.

La différence entre --debug et --debug-brk est que ce dernier ajoute un point d'arrêt sur la première ligne, de sorte que l'exécution s'arrête immédiatement à cet endroit.

Je vous suggère cette solution:

  1. Lorsque vous créez un processus enfant à partir de votre serveur Web, exécutez node --debug au lieu de node debug. Ainsi, un seul processus enfant est créé: il exécute votre application et il n'est pas mis en pause sur la première ligne.

  2. Vous pouvez maintenant utiliser n'importe quel outil de débogage prenant en charge le protocole de débogage V8 - nœud, le débogueur CLI intégré, node-inspector ou vous pouvez éventuellement implémenter votre propre interface de débogueur (GUI) si vous le souhaitez. (Je suppose que c'est ce que vous essayez d'atteindre en exécutant le débogueur CLI en arrière-plan?)

    Si vous avez décidé d'utiliser la CLI intégrée, créez simplement un autre processus enfant et indiquez au débogueur de la CLI du noeud de se connecter au processus démarré à l'étape 1:

    node debug localhost:5858

    et continuez comme avant.

30
Miroslav Bajtoš

Écrivez une extension chrome pour cliquer sur le bouton de démarrage

1. Run Shell

mkdir run_as_devtools
cd run_as_devtools
touch manifest.json
touch run_as_devtools.js

2. Editez les fichiers

run_as_devtools.js:

if (location.protocol === 'chrome-devtools:' && location.href.match(/ws=localhost/))(function () {
    'use strict';
    setTimeout(function () {
        try {
            document.querySelector('html /deep/ .long-click-glyph').click();
        } catch (e) {
            console.log(e);
        }
    }, 500);    
})();

manifest.json: (il utilise la clé de chromevox, donc ne l'utilisez pas avec chromevox)

{
   "content_scripts": [{
      "js": [ "run_as_devtools.js" ],
      "matches": [ "<all_urls>" ]
   }],
   "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEGBi/oD7Yl/Y16w3+gee/95/EUpRZ2U6c+8orV5ei+3CRsBsoXI/DPGBauZ3rWQ47aQnfoG00sXigFdJA2NhNK9OgmRA2evnsRRbjYm2BG1twpaLsgQPPus3PyczbDCvhFu8k24wzFyEtxLrfxAGBseBPb9QrCz7B4k2QgxD/CwIDAQAB",
   "manifest_version": 2,
   "name": "Elevated Devtools extension",
   "version": "1.0"
}

3. Installer l'extension

Paramètres Chrome - Autres outils - Extensions - Mode développeur - Charger une extension décompressée - Dossier select run_as_devtools

P.S. Mieux vaut l'utiliser avec Node Inspector Manager https://stackoverflow.com/a/43018133/4831179

Référence: https://stackoverflow.com/a/17044405/4831179

1
blackmiaool

J'ai résolu le même problème simplement en passant du nœud v6 à v7

1
Sami

Similaire à l'idée de blackmiaool mais plus simple, avec le noeud v8, vous pouvez lancer le script avec --inspect. Si vous avez le code suivant, lorsque vous ouvrez la fenêtre de débogage dans Chrome devtools, vous accédez directement au point de débogage. De plus, cela vous permet d'exécuter du code asynchrone en cliquant sur le bouton "continuer", ce qui permet à votre code de s'exécuter avant de vous retourner à la réplique

// app_Shell.js

var UserModel = require("./some_user_model");

function looper() {
    var Tmp = { UserModel: UserModel };
    debugger;
    setTimeout(looper, 100);
}
looper();

Et dans un script Shell, vous pouvez faire quelque chose comme:

echo "Click the 'Open dedicated DevTools for Node' link"
python -mwebbrowser about:inspect
node --inspect app_Shell.js

Voir ici pour plus d'informations

0
AJP