Heisenbug - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs est disponible ici.

Bug informatique dont le nom est basé sur le principe d'incertitude d'Heisenberg défini en physique quantique : observer une structure modifie son état.

En pratique, on retrouve l'un des trois cas suivants :

  • le programme tourne sous le débogueur, mais pas sur la ligne de commande
  • le programme marche quand on rajoute des printf() pour déboguer, mais pas quand on les enlève
  • le programme fonctionne quand des techniques de contrôle de bug sont appliquées, mais pas quand on retire ces contrôles pour une version de production.

Souvent, ce genre de bug provient d'une variable qui est utilisée avant d'être assignée. Elle est donc dans un état indéfini lorsque le programme est lancé.

Une autre source d'Heisenbug provient d'une politique "laxiste" de gestion de la mémoire, propice aux fuites de mémoires et à l'écrasement éventuel de données. Il convient d'être très strict sur la manière dont la mémoire dynamique est manipulée.

Exemple

En Visual C++, il existe un mode debug (pour la mise au point d'un programme) et un mode release (la version de production généralement). Le mode debug a la "bonne" idée de réserver plus de mémoire qu'il n'en faut réellement. Ce comportement implique que le programme en mode debug plantera rarement, alors qu'en mode release, le programme plantera systématiquement à cause d'un débordement de pile. Il s'agit d'un Heisenbug car lorsqu'on veut l'analyser, il faut passer en mode debug, ce qui le fait disparaître...

Page générée en 0.069 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise