Normalmente no uso un depurador, tal vez una vez cada dos semanas, pero no es lo primero a lo que voy.
La herramienta más importante en mi trabajo es tan ubicua que casi me olvido de mencionarla: apilar rastros. Más del 90% de los problemas que encuentro pueden resolverse examinando una traza de pila. Esta herramienta no siempre es muy útil dependiendo de su idioma, pero cuando se implementan bien con un idioma, pueden ahorrarle una cantidad de tiempo increíble.
Supongo que la segunda forma más común en que detecto problemas simples es que probablemente sea el código que acabo de cambiar. Hago pruebas de unidad con bastante frecuencia, así que generalmente sé lo que acabo de romper.
Para un desarrollo y depuración más complejos, puedo agregar algunas declaraciones de registro de depuración o nivel de seguimiento. Considero que los problemas de desarrollo son una buena guía para ayudarme a colocar información de registro de seguimiento / depuración de producción, lo que me lleva a:
No siempre tienes a mano un depurador. En producción, podría ser imposible ejecutar un depurador (Heck, podría ser imposible acceder a las máquinas de producción, excepto los registros, según la seguridad de su empresa). También hay idiomas en los que conectar un depurador solo toma demasiado tiempo o tal vez no haya buenos depuradores disponibles.
Si ha estado codificando todo el tiempo utilizando la lógica y el registro de nivel de depuración / seguimiento, puede ser simplemente el caso de examinar sus excelentes declaraciones de registro (posiblemente aumentando el nivel de registro) para resolver el problema sin siquiera acceder al hardware.
Aunque creo que los depuradores son una herramienta poderosa, ¡no dejes que sean la única herramienta en tu caja de herramientas!