summaryrefslogtreecommitdiff
path: root/doc/navigating_stacktraces.md
blob: 14c3ff642c97ad1b057f719d71a19ee054e53090 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
CIDER comes with a powerful solution to the problem of verbose Clojure
stacktraces.  Stacktraces are presented in a special major mode
(`cider-stacktrace-mode`), which gives you the possibility to filter out certain
stack frames and some handy ways to navigate causes.  You'll also be able to go
to the code in question with a single keystroke.

Command                                | Keyboard shortcut                   | Description
---------------------------------------|-------------------------------------|--------------
`cider-stacktrace-previous-cause`      |<kbd>M-p</kbd>                       | Move point to previous cause
`cider-stacktrace-next-cause`          |<kbd>M-n</kbd>                       | Move point to next cause
`cider-stacktrace-jump`                |<kbd>M-.</kbd> or <kbd>Return</kbd>  | Navigate to the source location (if available) for the stacktrace frame
`cider-stacktrace-cycle-current-cause` |<kbd>Tab</kbd>                       | Cycle current cause detail
`cider-stacktrace-cycle-all-causes`    |<kbd>0</kbd> or <kbd>S-Tab</kbd>     | Cycle all cause detail
`cider-stacktrace-cycle-cause-1`       |<kbd>1</kbd>                         | Cycle cause #1 detail
`cider-stacktrace-cycle-cause-2`       |<kbd>2</kbd>                         | Cycle cause #2 detail
`cider-stacktrace-cycle-cause-3`       |<kbd>3</kbd>                         | Cycle cause #3 detail
`cider-stacktrace-cycle-cause-4`       |<kbd>4</kbd>                         | Cycle cause #4 detail
`cider-stacktrace-cycle-cause-5`       |<kbd>5</kbd>                         | Cycle cause #5 detail
`cider-stacktrace-toggle-java`         |<kbd>j</kbd>                         | Toggle display of Java frames
`cider-stacktrace-toggle-clj`          |<kbd>c</kbd>                         | Toggle display of Clojure frames
`cider-stacktrace-toggle-repl`         |<kbd>r</kbd>                         | Toggle display of REPL frames
`cider-stacktrace-toggle-tooling`      |<kbd>t</kbd>                         | Toggle display of tooling frames (e.g. compiler, nREPL middleware)
`cider-stacktrace-toggle-duplicates`   |<kbd>d</kbd>                         | Toggle display of duplicate frames
`cider-stacktrace-show-only-project`   |<kbd>p</kbd>                         | Toggle display only project frames
`cider-stacktrace-toggle-all`          |<kbd>a</kbd>                         | Toggle display of all frames

You can configure whether the error buffer with stacktraces should be automatically
shown on error. By default it will be displayed, but you can change this:

```el
(setq cider-show-error-buffer nil)
```

At times, the error being displayed will originate from a bug in the
CIDER code itself. These internal errors might frequently occur and
interrupt your workflow, but you might not want to suppress **all**
stacktrace buffers via the `cider-show-error-buffer` variable as
above; instead, you might only want to suppress *this specific type*
of internal error. The stacktrace buffers provide such an option when
displaying an internal error. A toggle button will be displayed with
the error type's name, and you can toggle whether this particular type
of error will cause the stacktrace buffer to automatically show
itself.  The toggle button controls this behavior only during the
current Emacs session, but if you would like to make the suppression
more permanent, you can do so by customizing the
`cider-stacktrace-suppressed-errors` variable.  The buffer will also
provide a direct link to the bug reporting page to help facilitate its
diagnosis and repair.

Independently of the value of `cider-show-error-buffer` or
`cider-stacktrace-suppressed-errors`, the error buffer is always
generated in the background. Use `cider-selector` (`C-c M-s`) to visit
this buffer.

There are two more selective strategies for the error buffer:

```el
(setq cider-show-error-buffer 'except-in-repl) ; or
(setq cider-show-error-buffer 'only-in-repl)
```

* To disable auto-selection of the error buffer when it's displayed:

```el
(setq cider-auto-select-error-buffer nil)
```

* Error buffer stacktraces may be filtered by default. Valid filter
types include `java`, `clj`, `repl`, `tooling`, and `dup`. There are
also "positive" filtering types. The value `project` will cause only
project frames to be shown or `all` will force all stackframes to be
shown. Note that `project` and `all` are mutually exclusive. Whichever
one is first will determine the behavior if they are both present.

```el
(setq cider-stacktrace-default-filters '(tooling dup))
;; or
(setq cider-stacktrace-default-filters '(project))
```

* Error messages may be wrapped for readability. If this value is nil, messages
will not be wrapped; if it is truthy but non-numeric, the default `fill-column`
will be used.

```el
(setq cider-stacktrace-fill-column 80)
```