When your InitFile has a bug, or when you load external files that cause errors, the bug is often hard to find, because the Emacs Lisp reader does not know about line numbers and files – it just knows an error happened, and that’s it.
You have several options:
--debug-initto trigger the debugger when an error is thrown. Assuming an error is being thrown, this is the best approach.
(setq debug-on-error t)
M-x eval-region. Depending on whether that causes the error or not, split this half or the other half again, and repeat.
(error "No error until here")in the middle of your file. If you get the error “No error until here” when reloading the file, move the expression towards the back of the file, otherwise towards the front of the file.
C-uprefix to run it many many times. Here is how to define the keyboard macro and run it 999 times.
C-x ( C-M-f C-x C-e C-x ) C-u 999 C-x e
Plug: A side-effect of
dope.el is to trace the InitFile bug. Just
M-x dope-load-file ~/.emacs (or any other file) and dope will stop right where your InitFile breaks. Dope is an InitFile profiler at http://gnufans.net/~deego/pub/emacspub/lisp-mine/dope/ – DeepakGoel
The dope URL is now defunct, but fortunately it has been mirrored on Git Hub: