Cela me rappelle un bug qui m'a pris la tête pendant au moins une semaine. Mon histoire n'est pas aussi intéressante car au final il ne s'agissait que d'un banal dépassement de tableau.
Je développais un compilateur et un jour je constate plusieurs plantages sur un serveur de tests. Des joli segfaults bien propres. J'essaye sur ma machine et surprise ... cela fonctionne. Idem sur les autres serveurs à ma disposition. Le bug ne se produit que sur 1 seul serveur. C'est inhabituel car cet outil est sensé être parfaitement déterministe.
Pour ne rien arranger, le bug disparaît quand je recompile en mode debug et Valgrind ne me dit rien d'intéressant. Les serveurs sont identiques avec les même processeurs, les mêmes DRAMs, le même OS (debian) et les mêmes bibliothèques. Je m'assure que la randomization d'adresses est désactivée, que tout les fichiers concernés (data, libs, exécutable, ...) ont les mêmes checksums, que les horloges sont bien synchronisées, que le kernel linux est identique, ... etc etc etc
Tout est pareil mais ce fichu test continue à planter sur un unique serveur. C'est la 5ieme dimension ce truc. Est ce que le bug serait dans le hardware? C'est rare mais cela m'est déjà arrivé. Après plusieurs jours, je commence à sérieusement douter de mes capacités. Peut être ne saurais je jamais pourquoi notre compilateur plante sur zorglub-test mais pas sur paglop-test ou iznogoud-test?
WTF ... wait a second ... "zorglub-test" fait 12 caractères de long alors que les 2 autres en font respectivement 11 et 13. Cela ne peut pas être aussi simple:
Et si! Le système de logs du compilateur initialisait une chaîne de caractères contenant le HOSTNAME dans un tableau trop petit de 1 caractère. Classique! Moins de 12 caractères, pas de problèmes. Plus de 12 caractères, dépassement de tableau mais pas de crash. Exactement 12 caractères et le 0円 de fin passe la variable immédiatement après le tableau de vrai (1) à faux (0) et beaucoup plus tard ... BOOM.
# Cela me rappelle un bug ...
Posté par SChauveau . En réponse à la dépêche La voiture allergique à la glace à la vanille, et autres bugs. Évalué à 10.
Cela me rappelle un bug qui m'a pris la tête pendant au moins une semaine. Mon histoire n'est pas aussi intéressante car au final il ne s'agissait que d'un banal dépassement de tableau.
Je développais un compilateur et un jour je constate plusieurs plantages sur un serveur de tests. Des joli segfaults bien propres. J'essaye sur ma machine et surprise ... cela fonctionne. Idem sur les autres serveurs à ma disposition. Le bug ne se produit que sur 1 seul serveur. C'est inhabituel car cet outil est sensé être parfaitement déterministe.
Pour ne rien arranger, le bug disparaît quand je recompile en mode debug et Valgrind ne me dit rien d'intéressant. Les serveurs sont identiques avec les même processeurs, les mêmes DRAMs, le même OS (debian) et les mêmes bibliothèques. Je m'assure que la randomization d'adresses est désactivée, que tout les fichiers concernés (data, libs, exécutable, ...) ont les mêmes checksums, que les horloges sont bien synchronisées, que le kernel linux est identique, ... etc etc etc
Tout est pareil mais ce fichu test continue à planter sur un unique serveur. C'est la 5ieme dimension ce truc. Est ce que le bug serait dans le hardware? C'est rare mais cela m'est déjà arrivé. Après plusieurs jours, je commence à sérieusement douter de mes capacités. Peut être ne saurais je jamais pourquoi notre compilateur plante sur zorglub-test mais pas sur paglop-test ou iznogoud-test?
WTF ... wait a second ... "zorglub-test" fait 12 caractères de long alors que les 2 autres en font respectivement 11 et 13. Cela ne peut pas être aussi simple:
Et si! Le système de logs du compilateur initialisait une chaîne de caractères contenant le HOSTNAME dans un tableau trop petit de 1 caractère. Classique! Moins de 12 caractères, pas de problèmes. Plus de 12 caractères, dépassement de tableau mais pas de crash. Exactement 12 caractères et le 0円 de fin passe la variable immédiatement après le tableau de vrai (1) à faux (0) et beaucoup plus tard ... BOOM.