Débogage

Quelques raccourcis :

Pour des idées connexes, voir le Musée des horreurs.

La question du débogage fait partie du quotidien des programmeuses et des programmeurs, et la pratique du débogage est un art qu'il faut maîtriser pour cheminer dans cet étrange métier qu'est celui d'informaticienne ou d'informaticien.

Personnellement, je débogue beaucoup les autres (cela fait partie de ma tâche d'enseignant, je suppose) mais très peu mon propre code. Je dois ceci à mes illustres enseignants (en particulier Maurice Joyal et Norman Brault), à l'époque où j'étais moi-même étudiant, qui m'ont permis de lire leur propre code, ce qui m'a donné un choc total : contrairement à mon propre code de l'époque, qui tendait à être long et « verbeux », le leur était court, concis, avec très, très peu de fonctions longues de plus d'une ou deux lignes. Leur code tendait à être réutilisable alors que le mien tendait à être fortement lié au domaine du problème que je tentais de résoudre.

Avec le temps, j'ai réussi à rapprocher mon code de cet idéal, et force est d'admettre que, quand les fonctions ont une vocation claire et sont rarement plus longues qu'une ou deux lignes, les bogues, s'il y en a, sautent souvent aux yeux. Sans compter que cette démarche, qui tend à mener à du code plus générique, résulte en de multiples petits composants logiciels faciles à tester et à assembler (et, pour un compilateur, faciles à optimiser!), ce qui accélère le développement et la qualité globale de notre production.

Développeur junior : « I found the bug ».

Développeur sénior : « I found a bug ». (inspiré de source)

Généralités

« Bug == violation of intent » (Titus Winters, extrait de source)

Quelques liens généraux à ce sujet :

L'outil qu'est le débogueur

Pour comprendre comment fonctionne le débogueur de Visual Studio, voir cette très chic présentation de 2014 par deux de ses artisans : http://channel9.msdn.com/Shows/C9-GoingNative/GoingNative-28-The-VS-Debugger-How-It-Works-Tips-and-Tricks

Un débogueur (selon la documentation de Xcode)

Si vous souhaitez implémenter un débogueur ou mieux comprendre comment ces outils fonctionnent, quelques liens :

Outils

Outils de débogage à proprement dit :

Débogueurs pour Linux :

Outils de gestion et de suivi des bogues (Bug-Tracking Systems) :

À propos du débogueur de Go, texte de Filippo Valsorda en 2015 : https://blog.cloudflare.com/go-has-a-debugger-and-its-awesome/

Écrire un débogueur

Écrire votre propre débogueur :

Bases du débogage

« The best debugger ever made is a full night's rest » – Kelly Vaughn (source)

« Debugging code is like a murder mystery, but you are both the murdered and the murderer. And a moron » – Kevin Montrose (source)

« Debugging time increases as a square of the program's size » – Chris Wenham (source)

On nomme débogage cette pratique par lequel une programmeuse ou un programmeur cherche à découvrir pourquoi le comportement d'un programme ne correspond pas aux attentes. À propos des bases de cette pratique, pour ne pas dire cet « Art » :

Classe Noisy (Stephan T. Lavavej)

La classe Noisy décrite dans ../TrucsScouts/Noisy.html est une technique recommandée par Stephan T. Lavavej pour détecter les opérations de la Sainte-Trinité dans un programme générique. Utiliser un Noisy en tant que type T produit une trace de chacune de ces opérations.

Domaines particuliers

La pratique du débogage peut être influencée par le contexte.

Débogage de problèmes de gestion de mémoire :

Débogage en conditions hostiles :

Débogage propre aux systèmes multiprogrammés :

Débogage propre à la programmation orientée objet :

Débogage des outils des systèmes d'exploitation :

Débogage propre aux langages fonctionnels :

Débogage avec Java :

Débogage avec Lisp :

Débogage avec Ruby :

Diagnostic Post-Mortem

Pour les questions touchant à la gestion de la mémoire de manière générale, voir aussi ce lien.

Techniques de diagnostic post-mortem des processus :

Cas d'espèces

Pour une perspective historique, voir ../Orthogonal/Histoire.html#bogues

Cas d'espèces et expériences vécues :

https://pbs.twimg.com/media/DI7yTaUVoAAX9sf.jpg

Valid XHTML 1.0 Transitional

CSS Valide !