See [lix-project/lix#1156], but basically currently the `:st <n>` debugger command doesn't allow any negative indices, and putting a plus sign in front of the arg doesn't change anything; thus, we can exploit that "design space" to allow users to move between different stack frames easily, by simply prepending their arg with a +/- sign. The actual behavior is little more nuanced when you account for errors: as suggested by @pennae (thanks! :), when the user inputs an offset that would result in an invalid frame index, the debugger instead clamps it to the closest bound (i.e. 0 for negative offsets, $maxFrame for positive ones) and just prints a warning. Fixes #1156 [lix-project/lix#1156]: https://git.lix.systems/lix-project/lix/issues/1156 Change-Id: I02a0cdb6aaebbdb0515308880a3bf9c0d2fcd25e
19 lines
789 B
Markdown
19 lines
789 B
Markdown
---
|
|
synopsis: "Allow moving between stack frames relative to current debugger frame"
|
|
issues: [1156]
|
|
cls: [5411]
|
|
category: "Improvements"
|
|
credits: [blokyk]
|
|
---
|
|
|
|
Debugging functional programs often involve switching between a bunch of stack
|
|
frames to get the full context of what's happening and who's calling who.
|
|
Before this change, going up or down the stack in the nix debugger with `:st`
|
|
meant remembering the absolute index of each stack frame, instead of their
|
|
positions relative to one another; this got tiring *fast*.
|
|
|
|
Now, you can prepend `:st`'s argument with a + or - sign to indicate you want to
|
|
move relative to the current stack frame. For example, typing `:st +3` when you
|
|
were on frame `10` will go frame `13`; vice-versa, typing `:st -4` on frame `6`
|
|
will go to frame `2`.
|