emacs.rst
author Oleksandr Gavenko <gavenkoa@gmail.com>
Tue, 24 Feb 2009 14:30:40 +0200
changeset 44 735e016c8d30
parent 20 ccbb0c9257bb
child 86 72175e4fc069
permissions -rw-r--r--
how debug emacs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     1
-*- mode: outline -*-
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     2
44
735e016c8d30 how debug emacs
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 20
diff changeset
     3
* How debug ini file?
18
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     4
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     5
When your InitFile has a bug, or when you load external files that cause
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     6
errors, the bug is often hard to find, because the Emacs Lisp reader does not
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     7
know about line numbers and files – it just knows an error happened, and
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     8
that’s it.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     9
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    10
You have several options:
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    11
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    12
  * Binary Search – select half of the file in a region, and M-x eval-region.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    13
  Depending on whether that causes the error or not, split this half or the
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    14
  other half again, and repeat.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    15
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    16
  * Simplified Binary Search – add (error “No error until here”) in the
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    17
  middle of your file. If you get the error “No error until here” when
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    18
  reloading the file, move the expression towards the back of the file,
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    19
  otherwise towards the front of the file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    20
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    21
  * Use a keyboard macro that moves forward one expression (sexp) and
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    22
  evaluates it.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    23
20
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 19
diff changeset
    24
  * Try the command line switch --debug-init.
18
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    25
20
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 19
diff changeset
    26
  * Should n’t (setq debug-on-error t) help?
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 19
diff changeset
    27
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 19
diff changeset
    28
 * Try check-parens.
19
2230f25e0375 add about edebug.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 18
diff changeset
    29
2230f25e0375 add about edebug.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 18
diff changeset
    30
* Using edebug.
2230f25e0375 add about edebug.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 18
diff changeset
    31
2230f25e0375 add about edebug.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 18
diff changeset
    32
The main entry point is ‘M-x edebug-defun’ (also on ‘C-u C-M-x’). Use it
2230f25e0375 add about edebug.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 18
diff changeset
    33
instead of `C-x C-e’ or ‘C-M-x’ to evaluate a ‘defun’ and instrument it for
2230f25e0375 add about edebug.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 18
diff changeset
    34
debugging.
2230f25e0375 add about edebug.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 18
diff changeset
    35
2230f25e0375 add about edebug.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 18
diff changeset
    36
You can disable edebug on a function by evaluating the function again using
2230f25e0375 add about edebug.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 18
diff changeset
    37
‘C-M-x’.
44
735e016c8d30 how debug emacs
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 20
diff changeset
    38
735e016c8d30 how debug emacs
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 20
diff changeset
    39
* How debug func?
735e016c8d30 how debug emacs
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 20
diff changeset
    40
735e016c8d30 how debug emacs
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 20
diff changeset
    41
Use M-x debug-on-entry and M-x cancel-debug-on-entry to control
735e016c8d30 how debug emacs
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 20
diff changeset
    42
which functions will enter the debugger when called.
735e016c8d30 how debug emacs
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 20
diff changeset
    43
735e016c8d30 how debug emacs
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 20
diff changeset
    44
When next time that function called automatically loaded debug-mode.