Eu não costumo usar um depurador, talvez uma vez a cada duas semanas, mas não é a primeira coisa que eu vou.
A ferramenta mais importante no meu trabalho é tão onipresente que quase me esqueci de mencioná-la - rastreamentos de pilha. Mais de 90% dos problemas que encontro podem ser resolvidos examinando-se um rastreamento de pilha. Esta ferramenta nem sempre é muito útil, dependendo do seu idioma, mas quando elas são implementadas por um idioma, elas podem economizar uma incrível quantidade de tempo.
Eu acho que a segunda maneira mais comum de detectar problemas simples é que provavelmente é o código que acabei de alterar. Eu corro testes de unidade com bastante frequência, então eu geralmente sei o que acabei de quebrar.
Para desenvolvimento e depuração mais complexos, devo adicionar algumas instruções de log no nível de depuração ou de rastreio. Eu considero problemas de desenvolvimento um bom guia para me ajudar a colocar informações de registro de rastreio / depuração de produção, o que me leva a:
Você nem sempre tem um depurador à mão. Na produção, pode ser impossível executar um depurador (Heck, pode ser impossível acessar as máquinas de produção, exceto os logs, dependendo da segurança da sua empresa). Existem também idiomas onde a conexão de um depurador demora muito tempo ou talvez simplesmente não haja bons depuradores disponíveis.
Se você tem codificado o tempo todo usando lógica e log de nível de depuração / rastreio, pode simplesmente ser o caso de examinar suas excelentes instruções de log (possivelmente aumentando o nível de log) para descobrir o problema sem acessar o hardware.
Embora eu ache que os depuradores são uma ferramenta poderosa, não os deixe ser a única ferramenta na sua caixa de ferramentas!