bug-hunter

Homepage: https://github.com/Malabarba/elisp-bug-hunter

Author: Artur Malabarba

Updated:

Summary

Hunt down errors by bisecting elisp files

Commentary

An Emacs library that finds the source of an error or unexpected
behavior inside an elisp configuration file (typically `init.el' or
`.emacs').

Usage Examples
==============

Automated error hunting
~~~~~~~~~~~~~~~~~~~~~~~

  If your Emacs init file signals an error during startup, but you don’t
  know why, simply issue
  ,----
  | M-x bug-hunter-init-file RET e
  `----
  and The Bug Hunter will find it for you. Note that your `init.el' (or
  `.emacs') must be idempotent for this to work.


Interactive hunt
~~~~~~~~~~~~~~~~

  If Emacs starts up without errors but something is not working as it
  should, invoke the same command, but choose the interactive option:
  ,----
  | M-x bug-hunter-init-file RET i
  `----
  The Bug Hunter will start a separate Emacs instance several times, and
  then it will ask you each time whether that instance presented the
  problem you have. After doing this about 5--12 times, you’ll be given
  the results.


Assertion hunt
~~~~~~~~~~~~~~

  The Bug Hunter can also find your issue based on an assertion.
  Essentially, if you can write a code snippet that returns non-nil when
  it detects the issue, just provide this snippet as the assertion and
  the Bug Hunter will do the rest.

  For example, let’s say there’s something in your init file that’s
  loading the `cl' library, and you don’t want that. You /know/ you’re
  not loading it yourself, but how can you figure out which external
  package is responsible for this outrage?

  ,----
  | M-x bug-hunter-init-file RET a (featurep 'cl) RET
  `----

  *That’s it!* You’ll be given a nice buffer reporting the results:

  - Are you getting obscure errors when trying to open /".tex"/ files?
    - Don’t despair! Just use `(and (find-file "dummy.tex") nil)' as the
      assertion.
  - Did `ox-html' stop working due to some arcane misconfiguration?
    - Just write an assertion that does an export and checks the result.
  - Does some random command suddenly bind itself to `C-j' and you can’t
    figure out why?
    - `(eq (key-binding "\n") 'unwanted-command)' is the assertion for
      you!

  Finally, you can also use `bug-hunter-file' to hunt in other files.


init.org and other literate-style configs
=========================================

Please see the full Readme on http://github.com/Malabarba/elisp-bug-hunter

Dependencies