Muitas ótimas respostas aqui, mas eu gostaria de adicionar minha visão (com base em como minha abordagem evoluiu)
Logs de depuração
Vamos ser sinceros, todos nós gostamos de algo bom console.log('Uh oh, if you reached here, you better run.')
e, às vezes, que funciona muito bem, por isso, se você é reticente em se afastar demais, adicione pelo menos um pouco de brilho aos seus logs com a depuração do Visionmedia .
Depuração interativa
Tão útil quanto o log do console pode ser, para depurar profissionalmente, você precisa arregaçar as mangas e ficar preso. Defina pontos de interrupção, percorra seu código, inspecione escopos e variáveis para ver o que está causando esse comportamento estranho. Como outros já mencionaram, o inspetor de nós é realmente o joelho das abelhas. Ele faz tudo o que você pode fazer com o depurador embutido, mas usando a interface familiar do Chrome DevTools. Se, como eu, você usa o Webstorm , aqui está um guia útil para depuração a partir daí.
Rastreios de pilha
Por padrão, não podemos rastrear uma série de operações em diferentes ciclos do loop de eventos (ticks). Para contornar isso, dê uma olhada em longjohn (mas não em produção!).
Perdas de memória
Com o Node.js, podemos esperar que um processo do servidor permaneça ativo por um tempo considerável. O que você faz se acha que houve alguns vazamentos desagradáveis? Use heapdump e o Chrome DevTools para comparar alguns instantâneos e ver o que está mudando.
Para alguns artigos úteis, confira
Se você quiser assistir a um vídeo, então
Seja qual for o caminho escolhido, certifique-se de entender como você está depurando
É uma coisa dolorosa
Olhar para o seu próprio problema e saber
Que você mesmo e mais ninguém conseguiu
Sophocles, Ajax