Puesto que ningún software está totalmente libre errores, la optimización diaria es una tarea imprescindible. El verdadero problema en este sentido no suele ser la identificación de procesos erróneos en la ejecución, sino la de su causa concreta. Basta un paréntesis mal colocado, por ejemplo, o un operador usado de forma incorrecta, pera que el programa deje de funcionar como debería. Sin embargo, cuando hay que lidiar con cientos o miles de líneas, con la búsqueda manual carácter a carácter no se obtienen muchos frutos. Los depuradores modernos, en cambio, no solo informan de que se ha encontrado un problema, sino que también dan datos detallados acerca del tipo de error y, a menudo, también indican en qué línea de código se encuentra.
Por lo general, los depuradores analizan el código del softwarepaso a paso. Para ello, en el software se establecen los llamados breakpoints o puntos de interrupción. El depurador reconocerá estos puntos y los usará para detener la ejecución del software precisamente en dichos lugares. Los desarrolladores tienen entonces dos opciones:
- Pueden examinar el estado del programa en ese momento en concreto. De esta forma pueden comprobar fácilmente, por ejemplo, si todas las variables implicadas han dado como resultado los valores esperados.
- También pueden ejecutar el programa a partir del punto de interrupción para descartar posibles problemas o causas de error.
Los puntos de interrupción no tienen por qué ser fijos: muchos depuradores permiten vincular los breakpoints a ciertas condiciones individuales, lo cual permite detener el programa ante indicios concretos. Si, por ejemplo, una serie de procesos se ejecuta correctamente 20 veces pero muestra un fallo de programa en la repetición número 21, el debugger podrá intervenir en el problema directamente si se ha configurado la condición adecuada. Así, los ciclos que se han realizado sin dar resultados no han de volver a ejecutarse.
Otra de las funciones de los depuradores es el análisis de datos como, por ejemplo, el contenido de las variables, de las memorias o de los registros. Los debuggers también pueden modificar las memorias como, por ejemplo, la memoria principal (memoria interna) o el registro del procesador.