Usando o novo built-in debugger do Node.js
Para debugar aplicações Node.js, eu estava usando até o momento o Node Debugger (a.k.a ndb), uma biblioteca que deve ser instalada a parte (geralmente via npm) e que apesar de não ser nada de outro mundo, tem me ajudando bastante. Existem também outras boas opcões, como o Node Inspector, Node Eclipse Debugger, entre outros. Todas elas como pacotes em separado.
Desde a versão 0.3.4 do Node.js, existe um built-in debugger, que provavelmente se tornará a opção default, e provavelmente o plugins de IDEs como o do Eclipse passará a usa-lo para debugar aplicacões Node.js (suposição minha).
Sua forma de utilização básica é praticamente a mesma que já estamos acostumados com ferramentas de debug command-line. Basta inserir uma linha no meio do código com a keyword debugger e o programa vai parar naquela linha para você verificar o que está acontecendo. Um breve exemplo:
[sourcecode language="javascript"]
function fazNada(msg) {
debugger;
console.log(msg);
}
fazNada("teste");
[/sourcecode]
Agora basta rodar o node com a opção debug:
$ node debug qualquercoisa.js
Digite run (acho que esse passo não precisaria existir, mas):
debug> run
O segunte output deveria aparecer:
// informações sobre o programa e o primeiro break point debugger; ^
Dê um list para vermos onde estamos no programa:
debug> list 1 function fazNada(msg) { => debugger; 3 console.log(msg); 4 } 5 fazNada("teste"); 6
Imprima o valor de msg:
debug> print msg teste
Passe para próxima linha:
debug> next break in fazNada(msg=teste), /Users/emerson.leite/lixo/xptoDebug.js:3 console.log(msg); ^
Continue o script para ele executar o restante e encerrar:
debug> continue debug> teste program terminated
Se você quiser repetir o ciclo basta executar run novamente.
Para ver os demais comandos, basta digitar help no console do debug:
debug> help Commands: backtrace, continue, help, info breakpoints, kill, list, next, print, quit, run, scripts, step, version
Por enquanto pretendo vou continuar usando em conjunto com o ndb, principalmente porque esse debug built-in ainda não tem um eval, ou seja, não consigo alterar nada durante o debug, o que me limita muito na hora de resolver problemas.
Fiquemos atentos as novidades.