If you're an Emacs user and have a non-trivial
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 time for lines. That's pretty quickly for most
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
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
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.
bug-hunter now so that it will be available the next time I need it. You could probably get it loaded after the fact but why make life harder than it needs to be?