Depurar com o depurador interno do Node.js
A depuração é um aplicativo de vários estágios que geralmente segue estas etapas:
- Identifique um bug em seu programa.
- Localize o bug em seu código.
- Analise por que o bug ocorre.
- Corrija o bug.
- Valide que a correção funciona.
Após identificar um erro no programa Node.js, o primeiro desafio que você enfrentará será descobrir em que local do código o erro está localizado. Uma das maneiras mais eficientes de fazer isso é executar o código passo a passo para ter uma ideia de onde o erro começou.
Pontos de interrupção
Percorrer todo o código passo a passo pode ser extremamente ineficiente quando o programa tem milhares de linhas de código. Nesse caso, você pode usar um ponto de interrupção. Ele permite interromper a execução normal do programa e pausar em um determinado ponto no código.
Usando pontos de interrupção, você pode executar o programa normalmente até chegar à parte crítica do código em que suspeita que o erro está. Você pode alternar para a execução passo a passo.
Há várias maneiras de definir pontos de interrupção em seu código com base no depurador e no editor de código.
Modo de inspeção do Node.js
Como um depurador tem acesso completo ao ambiente de execução, um ator mal-intencionado também poderia usá-lo para injetar código arbitrário em seu aplicativo Node.js. Por isso, por padrão, o Node.js não permite depurar um programa em execução. É necessário habilitar um modo especial chamado modo de inspeção para permitir a depuração.
Você precisa iniciar seu aplicativo com a opção --inspect
para permitir que um cliente depurador se conecte ao aplicativo e assuma o controle da execução de seu aplicativo.
Por padrão, quando o Node.js é iniciado com a opção --inspect
, ele escuta no host 127.0.0.1
na porta 9229
. Você também pode especificar um host e uma porta personalizados usando a sintaxe --inspect=<HOST>:<PORT>
.
Importante
Evite associar a porta do depurador do Node.js a um endereço IP público ou a 0.0.0.0. Caso contrário, clientes que puderem se conectar ao seu endereço IP poderão se conectar ao aplicativo Node.js e controlá-lo. Fazendo isso, um invasor pode executar remotamente código arbitrário em seu ambiente de execução. Isso poderia levar a uma violação de segurança potencialmente grave.
Como alternativa, use a opção --inspect-brk
. Ela funciona da mesma forma que --inspect
, mas interrompe a execução do código logo antes do início de seu código. Isso permite que você conecte o depurador e dedique um tempo para definir pontos de interrupção e percorrer o código para identificar a causa raiz do problema. Use este botão de alternância --inspect-brk
quando precisar depurar:
- Uma condições de corrida.
- Problema intermitente difícil de reproduzir.
Após iniciar o aplicativo com o modo de inspeção habilitado, você poderá usar qualquer cliente depurador compatível para se conectar ao processo de seu aplicativo.
Clientes depuradores
Para depurar seu aplicativo, você precisa usar um cliente depurador. Um cliente depurador é um programa que se conecta ao aplicativo Node.js e permite que você controle sua execução. Há muitos clientes depuradores disponíveis, mas os mais comuns são:
- Visual Studio Code: Um cliente depurador gráfico que já vem incluído no Visual Studio Code. Use-o ao fazer a depuração durante o desenvolvimento.
- node-inspect: Um cliente depurador de linha de comando que já vem incluído no Node.js. Use-o ao depurar em produção.
Depurador interno
Você pode usar o node-inspect, um cliente depurador de linha de comando, que vem incluso no Node.js, para depurar seu aplicativo Node.js. É um depurador simples que permite definir pontos de interrupção e executar seu código passo a passo.
node inspect <YOUR_SCRIPT>.js
O depurador node-inspect executa o Node.js com o modo de inspeção habilitado e é inicializado ao mesmo tempo que o depurador interativo integrado. A execução é pausada antes que o código seja iniciado. Você deverá ver um prompt do depurador indicando que ele foi iniciado com êxito.
node inspect myscript.js
< Debugger listening on ws://127.0.0.1:9229/ce3689fa-4433-41ee-9d5d-98b5bc5dfa27
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in myscript.js:1
> 1 const express = require('express');
2
3 const app = express();
debug>