Don't understand german? Read or subscribe to my english-only feed.

bisect – Probleme Debuggen mit Binärer Suche

Absolut keine Neuheit, aber weil ich es gerade gebraucht habe und man die binäre Suche – die man zumindest aus der Datenstrukturen-Vorlesung kennen sollte ;-) – so schön in der Praxis anwenden kann und das eigentlich jeder kennen sollte, möchte ich das mal kurz erwähnen.

Problemstellung? Im aktuellem grml-Build habe ich festgestellt, dass es in der aktuellen udev-Version ein Problem mit der linux-raid-Erkennung via vol_id gibt. In irgendeiner Version von udev kam also ein Changeset hinzu, das dieses Problem verursacht. Durch die Verwendung von git-bisect war das Problem sehr schnell eingegrenzt und ich konnte Upstream das Changeset nennen, welches das Problem versursacht.

Der Ablauf:

Source holen:
% git clone git://www2.kernel.org/pub/scm/linux/hotplug/udev.git
% cd udev

bisect initialisieren:
% git bisect start
% make clean ; make ; $TESTEN

Der aktuelle Source (master-Branch) macht den Stress? Dann als böse markieren:
% git bisect bad

Auf eine funktionierende Version stellen (siehe 'git log', $commit-id auswählen und als $branch_name markieren):
% git checkout -b $branch_name $commit-id

Klappt das mit $commit-id noch? Testen und als gut markieren:
% make clean ; make ; $TESTEN
% git bisect good

Jetzt geht das Spiel mit “git bisect [good|bad] ; make clean ; make ; $TESTEN” so lange, bis man ein ‘$commit-id is first bad commit […]’ erhält. Das geht ziemlich schnell [O(log n)] und man hat dann auch schon den konkreten Übeltäter gefunden. :)

Ach ja, mein favorisiertes Versionkontrollsystem (mercurial) bietet ebenfalls eine Bisect-Extension.

Comments are closed.