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.