Un logiciel parfait ne comportant aucune erreur n’existe pas. Par conséquent, il est pratiquement indispensable de procéder à une optimisation quotidienne. La plupart du temps, le principal problème n’est pas de déterminer les processus erronés dans le déroulement du programme mais d’en trouver la cause exacte. Une parenthèse mal placée ou un opérateur mal utilisé peuvent empêcher qu’un programme fonctionne de la façon attendue. Toutefois, au vu des centaines voire des milliers de lignes de code, une recherche manuelle, caractère par caractère, n’apporterait que peu de résultats. C’est pourquoi les débogueurs modernes indiquent non seulement qu’un problème a été trouvé, mais fournissent aussi des informations détaillées sur le type d’erreur et souvent sur la ligne de code dans laquelle l’erreur peut être trouvée.
En général, les débogueurs parcourent le code du programme en procédant étape par étape. Des points d’arrêt (angl. « breakpoints ») sont définis à cette fin dans le logiciel à déboguer. L’outil de débogage identifie ces points et peut les utiliser pour arrêter l’exécution du logiciel à cet endroit. Les développeurs ont alors deux possibilités :
- examiner l’état exact du programme à ce moment précis. Les développeurs peuvent ainsi vérifier en toute simplicité si toutes les variables intégrées renvoient les valeurs attendues.
- exécuter le programme à partir du point d’arrêt concerné afin de limiter les éventuels problèmes ou les éventuelles sources d’erreurs.
Les points d’arrêt ne doivent pas nécessairement être fixes : de nombreux debuggers permettent d’associer des conditions individuelles aux points d’arrêt. Le programme peut ainsi être arrêté si certaines conditions se produisent. Par exemple, si une boucle réalise 20 cycles correctement et qu’une erreur se produit uniquement au 21e cycle, le débogueur peut s’attaquer directement au problème grâce à la condition correspondante. Ceci permet d’éviter de réaliser à nouveau les boucles précédentes qui se déroulent sans incident.
Parmi les autres fonctionnalités des débogueurs, on trouve notamment l’inspection des données – par exemple les contenus des variables – ainsi que l’enregistrement, le répertoriage et la modification des mémoires, telles que la mémoire principale (mémoire vive) ou le registre du processeur.