Este es un práctico tutorial de cómo depurar tus aplicaciones hechas en Node.js. Con esto aprenderás a hacer esta tarea por completo y de la mejor manera. Esta guía lo ayudará a comenzar a depurar tus aplicaciones y scripts Node.js. Continúa leyendo y entérate de mas.
Activer un inspecteur
Quand a commencé avec le commutateur --inspecter
, un processus Node.js écoute via WebSockets les commandes de diagnostic définies par défaut par le protocole Inspector sur l'hôte et le port 127.0.0.1:9229. Chaque processus se voit également attribuer un UUID unique (par exemple 0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e).
Los clientes de Inspector deben conocer y especificar la dirección de host, el puerto y el UUID para conectarse a la interfaz de WebSocket. La URL Achevée ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e cela dépend bien sûr de l'hôte et du port réels et de l'UUID correct pour l'instance.
El Inspector también incluye un punto final HTTP para servir métadonnées sobre el depurador, incluida su URL de WebSocket, UUID y la URL de Chrome DevTools. Obtén estos metadatos enviando una solicitud HTTP a http: // [hôte: port] / json / list. Cela renvoie un objet JSON comme celui-ci; utilisez la propriété webSocketDebuggerUrl comme URL pour vous connecter directement à l'inspecteur.
{"description": "instance node.js", "devtoolsFrontendUrl": "chrome-devtools: //devtools/bundled/inspector.html? experiences = true & v8only = true & ws = 127.0.0.1: 9229 / 0f2c936f-b1cd -4ac9-aab3 -f63b0f33d55e "," faviconUrl ":" https://nodejs.org/static/favicon.ico "," id ":" 0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e "," title ":" node "," type ":" node "," url ":" file: // "," webSocketDebuggerUrl ":" ws: //127.0.0.1: 9229 / 0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e "}
Vous pouvez également demander à un processus Node.js démarré sans –inspecter pour commencer à écouter les messages de débogage en le signalant avec SIGUSR1 (en Linux y OS X). A partir del Node 7, esto activa la API de depuración heredada; en el Node 8 y posterior activará la API Inspector.
La sécurité est impliquée
Étant donné que le débogueur a un accès complet au runtime Node.js, un acteur malveillant capable de se connecter à ce port peut exécuter du code arbitraire au nom du processus de nœud. Il est important de comprendre les implications de sécurité de l'exposition du port de débogage sur les réseaux publics et privés.
L'exposition publique du port de débogage n'est pas sûre
Si el depurador está vinculado a una adresse IP pública, o 0.0.0.0, quelconque client que pueda acceder a su dirección IP podrá conectarse al depurador sin ninguna restricción y podrá ejecutar código arbitrario.
Par défaut, le nœud –inspect est lié à 127.0.0.1. Vous devez explicitement fournir une adresse IP publique ou 0.0.0.0, etc., si vous souhaitez autoriser les connexions externes au débogueur. Cela peut vous exposer à une menace de sécurité potentiellement importante. Nous vous suggérons de sécuriser les pare-feu et les contrôles d'accès appropriés pour éviter une exposition à la sécurité.
Les applications locales ont un accès complet à l'inspecteur.
Même si vous liez le port de l'inspecteur à 127.0.0.1 (valeur par défaut), toute application exécutée localement sur votre PC aura un accès illimité. C'est par conception pour permettre aux débogueurs locaux de se connecter facilement.
Navigateurs, websockets y política del mismo origen.
Los sitios la toile abiertos en un le navigateur web pueden hacer solicitudes WebSocket y HTTP bajo el modelo de seguridad del navegador. Es necesaria una conexión HTTP inicial para obtener un Id de sesión de depurador único. La misma política de origen impide que los sitios web puedan realizar esta conexión HTTP.
Para mayor seguridad contra los ataques de reencuadernación de DNS, Node.js verifica que las cabeceras del ‘Host’ para la conexión especifiquen una dirección IP o localhost o localhost6 con precisión.
Estas políticas de seguridad no permiten conectarse a un serveur de depuración remoto especificando el nombre del host. Puedes evitar esta restricción especificando la dirección IP o utilizando túneles ssh como se describe a continuación.
Clients Inspecteur
Varias herramientas comerciales y de Open source pueden conectarse al Inspector de nodos. A continuación se ofrece información básica sobre estos temas:
- inspecter les nœuds
- Débogueur CLI pris en charge par Node.js Foundation qui utilise le protocole Inspector.
- Une version est incluse avec Node et peut être utilisée avec le nœud inspect myscript.js.
- La dernière version peut également être installée de manière autonome (par exemple, npm install -g node-inspect) et utilisée avec node-inspect myscript.js.
- Chrome DevTools 55+
- Option 1: Ouvrez chrome: // inspectez dans un navigateur basé sur Chromium. Cliquez sur le bouton Configurer et assurez-vous que l'hôte et le port de destination sont répertoriés.
- Option 2: Copiez devtoolsFrontendUrl à partir de la sortie de / json / list (voir ci-dessus) ou du texte d'indication –inspect et collez-le dans Chrome.
- Opción 3: Instale Chrome Extension NIM (Administrador del Inspector de Nodos): https://chrome.google.com/webstore/detail/nim-node-inspector-manage/gnhhdgbaldcilmgcpfddgdbkhjohddkj
- Visual Studio Code 1.10+
- Dans le panneau de débogage, cliquez sur l'icône des paramètres pour ouvrir .vscode / launch.json. Sélectionnez "Node.js" pour la configuration initiale.
- Visual Studio 2017
- Choisissez "Déboguer> Démarrer le débogage" dans le menu ou appuyez sur F5.
- JetBrains WebStorm 2017.1+ et autres IDE JetBrains
- Créez une nouvelle configuration de débogage Node.js et cliquez sur Déboguer. –Inspect sera utilisé par défaut pour Node.js 7+. Pour désactiver js.debugger.node.use.inspect dans le registre IDE.
- Interface à distance Chrome
- Dispose d'une bibliothèque pour faciliter les connexions aux points de terminaison du protocole Inspector
Options de ligne de commande
Le tableau suivant répertorie l'impact de divers indicateurs d'exécution sur le débogage:
- -Inspecter:
- Activer l'agent d'inspection
- Écouter sur l'adresse et le port par défaut (127.0.0.0.1: 9229)
- –Inspect = [hôte: port]:
- Activer l'agent d'inspection
- Lier à l'adresse du nom d'hôte ou à l'hôte (par défaut: 127.0.0.0.1)
- Écouter sur le port (par défaut: 9229)
- –Inspect-brk
- Activer l'agent d'inspection
- Écouter sur l'adresse et le port par défaut (127.0.0.1:9229)
- Pausa antes de que comience el código de Nom d'utilisateur
- –Inspect-brk =[port hôte]
- Activer l'agent d'inspection
- Lier à l'adresse du nom d'hôte ou à l'hôte (par défaut: 127.0.0.0.1)
- Écouter sur le port (par défaut: 9229)
- Pause avant le début du code utilisateur
- noeud inspecter script.js
- Spawn processus enfant pour exécuter le script utilisateur sous –inspect flag; et utilisez le processus principal pour exécuter le débogueur CLI.
- noeud inspecter –port = xxxx script.js
- Spawn processus enfant pour exécuter le script utilisateur sous –inspect flag; et utilisez le processus principal pour exécuter le débogueur CLI.
- Écouter sur le port (par défaut: 9229)
Activation des scénarios de débogage à distance
Je vous recommande de ne jamais faire écouter le débogueur sur une adresse IP publique. Si vous devez autoriser les connexions de débogage à distance, je vous recommande d'utiliser à la place des tunnels ssh. Je fournis l'exemple suivant à des fins d'illustration uniquement. Veuillez comprendre le risque de sécurité lié à l'autorisation d'accès à distance à un service privilégié avant de continuer.
Supposons que vous exécutiez Node.js sur une machine distante, remote.example.com, vous voulez pouvoir déboguer. Sur cette machine, vous devez démarrer le processus de nœud avec l'inspecteur écoutant uniquement localhost (valeur par défaut).
Nœud $ --inspect server.js [php] Maintenant, sur votre machine locale à partir de laquelle vous souhaitez démarrer une connexion client de débogage, vous pouvez configurer un tunnel ssh: [php] $ ssh -L 9221: localhost: 9229 @ user_sample. remote.com
Cela démarre une session de tunnel ssh où une connexion au port 9221 de votre machine locale sera transmise au port 9229 de remote.example.com. Vous pouvez maintenant attacher un débogueur comme Chrome DevTools ou Visual Studio Code à localhost: 9221, qui devrait pouvoir déboguer comme si l'application Node.js s'exécutait localement.