You are here

les joies du debug aidé par git bisect

Nicolas's picture
Submitted by Nicolas on Mon, 27/07/2015 - 11:15

J'avais lu il y a quelques temps un article intéressant sur le debug avec git et notemment l'utilisation de git bisect. Jusque là je n'avais pas eu l'occasion d'utiliser cette commande mais l'intégration du code du stagiaire à notre future version de septembre me l'a donnée! 

En effet après l'intégration à notre et version et alors que je travaillais à une nouvelle fonctionnalité, lors du passage des tests de non régression, toute une série de test étaient en échec avec des erreurs semblant en rapport avec le code intégré. Après vérification rapide avec l'auteur du code nous sommes arrivés à la conclusion qu'il était difficile de déterminer l'origine du problème sans reprendre l'historique des commits qui commençait (entre les miens et les siens) à être conséquent.

 Face à ce problème je me suis dit que ce serait une bonne occasion de tester le git bisect. Le principe est simple, on indique à git que l'on veut entammer une recherche par bisection via la commande git bisect start, ensuite on indique que le problème existe sur le commit courrant via git bisect bad puis le dernier commit connu comme bon via git bisect good ref_commit, ici il s'agissait du dernier commit de la version précédente (facile :D ). Et on laisse git faire le boulot pour nous possionner à un commit situé a peu près à la moitié de la liste. On build on déploie on test et là deux option ou on est bon ou on est pas bon et on recommence.

Au final git bisect nous ammène au commit ayant introduit le bug il ne reste plusqu'à analyser le code modifié dans ce commit pour chasser la vilaine bête. Pour le coup le stagiaire avait bien bossé le bug venait d'une autre partie du code!!!! Du coup au lieu de se fader le parcours de tous les commits un par un, en 1h c'était plié \o/. On peut même automatiser la chose avec un petit script bien fait qui ferait les opérations de git bisect et lancerait le test qui va bien en testant sa valeur de retour pour savoir si on continue ou si on est arrivé au commit fautif!!

That's all falks.

category: