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
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
@args --debugger

:c at the root repl is not allowed since no debugger is running yet
  nix-repl> :c
  error: command 'c' can only be used when the debugger is active

:c and other commands become available once a debugger starts
  nix-repl> with {}; a
  error: undefined variable 'a'
         at «string»:1:10:
              1| with {}; a
               |          ^

  nix-repl> :?
  The following commands are available:

    <expr>                             Evaluate and print expression
    <x> = <expr>                       Bind expression to variable
    :?, :help                          Print help about all commands (this content)
    :a, :add <expr>                    Add attributes from resulting set to scope
    :b, :build <expr>                  Build a derivation
    :bl, :build-with-gc-roots <expr>   Build a derivation, creating GC roots in the working directory
    :doc <expr>                        Show documentation for the provided function (experimental lambda support)
    :e, :edit <expr>                   Open package or function in $EDITOR
    :env                               Show environment stack
    :i, :build-and-install <expr>      Build derivation, then install result into current profile
    :l, :load <path>                   Load Nix expression and add it to scope
    :log <expr | .drv path>            Show logs for a derivation
    :p, :print <expr>                  Evaluate and print expression recursively
                                       Strings are printed directly, without escaping.
    :q, :quit                          Exit the REPL
    :r, :reload                        Reload all files successfully loaded
    :sh, :shell <expr>                 Build dependencies of derivation, then start nix-shell
    :t, :type <expr>                   Describe result of evaluation
    :te, :trace-enable [bool]          Enable, disable, or toggle showing traces for errors
    :u, :use <expr>                    Build derivation, then start nix-shell

      Debug mode commands

    :bt, :backtrace                    Show trace stack
    :c, :continue                      Go until end of program, exception or builtins.break
    :s, :step                          Go one step
    :st, :show-trace [integer index]   Show current trace. If an integer is provided, this switches to that stack beforehand. If the integer has an explicit + or - sign, it is treated as relative to the current stack index.

      Flakes commands

    :lf, :load-flake <flakeref>        Load Nix flake and add it to the scope

we can now inspect state
  nix-repl> :bt

  1: error: Fake frame for debugging purposes
  «string»:1:10

       1| with {}; a
        |          ^

  0: error: undefined variable 'a'
  «string»:1:10

       1| with {}; a
        |          ^

and resume execution
  nix-repl> :c
  error: undefined variable 'a'
         at «string»:1:10:
              1| with {}; a
               |          ^

the debugger is once again disabled
  nix-repl> :c
  error: command 'c' can only be used when the debugger is active

leaving the debugger from a toplevel error and entering it again doesn't leave old frames visible
  nix-repl> with {}; a
  error: undefined variable 'a'
         at «string»:1:10:
              1| with {}; a
               |          ^

  nix-repl> :s
  error: undefined variable 'a'
         at «string»:1:10:
              1| with {}; a
               |          ^

  nix-repl> with {}; b
  error: undefined variable 'b'
         at «string»:1:10:
              1| with {}; b
               |          ^

  nix-repl> :bt

  1: error: Fake frame for debugging purposes
  «string»:1:10

       1| with {}; b
        |          ^

  0: error: undefined variable 'b'
  «string»:1:10

       1| with {}; b
        |          ^

exiting from here prints the error
  nix-repl> :q
  error: undefined variable 'b'
         at «string»:1:10:
              1| with {}; b
               |          ^