|
1 | 1 | # Introduction to Rebugger
|
2 | 2 |
|
3 | 3 | Rebugger is an expression-level debugger for Julia.
|
4 |
| -It has no ability to interact with or manipulate call stacks (see [Gallium](https://github.com/Keno/Gallium.jl)), |
5 |
| -but it can trace execution via the manipulation of Julia expressions. |
| 4 | +It has two modes of action: |
| 5 | + |
| 6 | +- an "interpret" mode that lets you step through code, set |
| 7 | + breakpoints, and other manipulations common to "typical" debuggers; |
| 8 | +- an "edit" mode that presents method bodies as objects for manipulation, |
| 9 | + allowing you to interactively play with the code at different stages |
| 10 | + of execution. |
| 11 | + |
6 | 12 |
|
7 | 13 | The name "Rebugger" has 3 meanings:
|
8 | 14 |
|
9 | 15 | - it is a [REPL](https://docs.julialang.org/en/latest/stdlib/REPL/)-based debugger (more on that below)
|
10 | 16 | - it is the [Revise](https://github.com/timholy/Revise.jl)-based debugger
|
11 |
| -- it supports repeated-execution "surface" debugging |
12 |
| - |
13 |
| -Rebugger is an unusual debugger with a novel work-flow paradigm. |
14 |
| -With most debuggers, you enter some special mode that lets the user "dive into the code," |
15 |
| -but what you are allowed to do while in this special mode may be limited. |
16 |
| -In contrast, Rebugger brings the code along with its input arguments to the user, |
17 |
| -presenting them both for inspection, analysis, and editing in the (mostly) normal Julia |
18 |
| -interactive command line. |
19 |
| -As a consequence, you can: |
20 |
| - |
21 |
| -- test different modifications to the code or arguments without being forced to exit debug mode |
22 |
| - and save your file |
23 |
| -- run the same chosen block of code repeatedly (perhaps with different modifications each time) |
24 |
| - without having to repeat any of the "setup" work that might have been necessary to get to some |
25 |
| - deeply nested method in the original call stack. |
26 |
| - In other words, Rebugger brings "internal" methods to the surface. |
27 |
| -- run any desired command that helps you understand the nature of a bug. |
28 |
| - For example, if you've already loaded `MyFavoritePlottingPackage` in your session, |
29 |
| - then when debugging you can (transiently) add `Main.MyFavoritePlottingPackage.plot(x, y)` |
30 |
| - as a line of the method-body you are currently analyzing, and you should see a |
31 |
| - plot of the requested variables. |
32 |
| - |
33 |
| -Rebugger exploits the Julia REPL's history capabilities to simulate the |
34 |
| -stacktrace-navigation features of graphical debuggers. |
35 |
| -Thus Rebugger offers a command-line experience that is more closely aligned with |
36 |
| -graphical debuggers than the traditional `s`, `n`, `up`, `c` commands of a console debugger. |
| 17 | +- it supports repeated-execution debugging |
37 | 18 |
|
38 | 19 | ## Installation
|
39 | 20 |
|
@@ -74,9 +55,9 @@ in your Terminal settings to avoid the need to press Esc before each Rebugger co
|
74 | 55 |
|
75 | 56 | #### Ubuntu
|
76 | 57 |
|
77 |
| -The default meta key on Ubuntu is left Alt, which is equivalent to Esc Alt on the default |
| 58 | +The default meta key on some Ubuntu versions is left Alt, which is equivalent to Esc Alt on the default |
78 | 59 | Gnome terminal emulator.
|
79 | 60 | However, even with this tip you may encounter problems because Rebugger's default key bindings
|
80 | 61 | may be assigned to activate menu options within the terminal window, and
|
81 | 62 | [this appears not to be configurable]( https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/1113420).
|
82 |
| -As a consequence Ubuntu users will very likely need to [Customize keybindings](@ref). |
| 63 | +Affected users may wish to [Customize keybindings](@ref). |
0 commit comments