Isolate a Buggy Commit with Git Bisect
A few weeks a go I made a blog post about my success in running Age of Empires II with Wine. Unfortunately the upgrade from wine-0.9.31 to 0.9.32 broke it again. The game doesn’t even start anymore and just displays the following message:
Could not initialize graphics system. Make sure your video card and driver are compatible with directdraw.
See the AppDB Comments for further discussions.
So I decided to try to isolate the commit which is responsible for the breakage. The first step was to get all the required build dependencies installed. Next I did a checkout of the wine source and started regression testing as explained on the wine-wiki. By telling git bisect the last good state and a known broken one it can perform a binary search for the buggy commit.
git bisect start
git bisect good wine-0.9.31
git bisect bad wine-0.9.32
Then you can compile Wine and test whether the bug is still there.
CFLAGS=-fno-stack-protector ./configure && make clean && make depend && make
Depending on the result you run git bisect good
or git bisect bad
respectively. If you want to see which commits could cause the error run
git bisect visualize
. Recompile and repeat the above steps until you
can isolate the problematic commit.
In my case it was the following:
27113156d96d20296409fcb92839609c8dd7e34a is first bad commit
commit 27113156d96d20296409fcb92839609c8dd7e34a
Author: Stefan Dosinger <stefan@codeweavers.com>
Date: Mon Feb 19 15:24:00 2007 +0100
wined3d: Remove IWineD3DDevice::EnumDisplayModes.
So now that I have isolated the commit, I filled a bug report.
Marc