If you’re an Emacs user and have a non-trivial .emacs or init.el you have almost certainly run into the situation where you make a change or upgrade a package or Emacs and things stop working. I see questions about how to troubleshoot this from n00bs all the time.

Invariably, the advice is to do a binary search on your configuration file by commenting out half of it and seeing if the errors persists and then commenting out half of the other half if so. That process converges in \(\log_{2} \,n\) time for \(n\) lines. That’s pretty quickly for most .emacs or init.el files but is still a pain.

Happily, the prolific Artur Malabarba—when does he have time to work on his thesis?—has come to the rescue with elisp-bug-hunter. If you get an error while loading Emacs, just run

M-x bug-hunter-init-file RET RET

and bug-hunter will do the binary search for you. You’ll get a nice report showing where the error occurred. That’s pretty nice but bug-hunter is even more flexible. Suppose Emacs loads without error but some aspect doesn’t work correctly. If you can write an assertion to detect the error, bug-hunter can still find the problem.

The example Malabarba gives is figuring out how cl.el is getting loaded. To do that, you just run

M-x bug-hunter-init-file RET (featurep 'cl) RET

and bug-hunter will tell you where it’s getting loaded. That very issue has come up with my own init.el file so I ran that example and discovered that package-initialize was loading the library. That’s very nice indeed. Malabarba gives other examples in the README at the link.