Next: Funktionen und Variablen der Laufzeitumgebung, Previous: Initialisierung von Maxima, Up: Laufzeitumgebung [Contents][Index]

### 26.2 Interrupts

Eine Berechnung kann mit dem Kommando `^c` (`control-c`) abgebrochen werden. Standardmäßig kehrt Maxima zu der Eingabeaufforderung der Konsole zurück. In diesem Fall ist es nicht möglich, die Berechnung fortzusetzen.

Beispiel:

Eine lange Rechnung wird mit `^c` abgebrochen. Maxima kehrt zur Eingabeaufforderung zurück.

    (%i1) factor(factorial(10000))$

    Maxima encountered a Lisp error:
     Interactive interrupt at #x9224192.

    Automatically continuing.
    To enable the Lisp debugger set *debugger-hook* to nil.
    (%i2)

Wird die Lisp-Variable `*debugger-hook*` mit dem Kommando `:lisp (setq *debugger-hook* nil)` auf den Wert `nil` gesetzt, dann startet Maxima den Lisp-Debugger, wenn das Kommando `^c` ausgeführt wird. Mit dem Kommando `continue` im Lisp-Debugger kann die unterbrochene Berechnung fortgesetzt werden.

Beispiel:

Die Variable `*debugger-hook*` wird auf den Wert `nil` gesetzt. Der Abbruch der Rechnung startet in diesem Fall den Lisp-Debugger. Die Rechnung kann mit der Auswahl `0` für das Kommando `continue` fortgesetzt werden.

    (%i2) :lisp (setq *debugger-hook* nil)
    NIL
    (%i2) factor(factorial(10000))$

    debugger invoked on a SB-SYS:INTERACTIVE-INTERRUPT
         in thread #<THREAD
         "initial thread" RUNNING
         {C597F49}>:
      Interactive interrupt at #x9224192.

    Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

    restarts (invokable by number or by possibly-abbreviated name):
      0: [CONTINUE    ] Return from SB-UNIX:SIGINT.
      1: [MACSYMA-QUIT] Maxima top-level
      2: [ABORT       ] Exit debugger, returning to top level.

    (SB-BIGNUM:BIGNUM-TRUNCATE #<unavailable argument>
                               #<unavailable argument>)
    0] 0

    (%i3)

Hinweis:

Mit dem Kommando `:lisp (setq *debugger-hook* 'maxima-lisp-debugger)` kann das Standardverhalten von Maxima wiederhergestellt werden.

In Unix-Systemen kann die Ausführung auch mit Kommando `^z` (`control-z`) abgebrochen werden. In diesem Fall wird eine Unix-Shell gestartet. Das Kommando `fg` kehrt zu Maxima zurück.

Wie mit dem Kommando `^c` kann auch ein Lisp-Fehler zu einem Abbruch der Berechnung führen. Maxima meldet den Lisp-Fehler und kehrt standardmäßig zu der Eingabeaufforderung zurück. Wurde die Lisp-Variable `*debugger-hook*` auf den Wert `nil` gesetzt, startet Maxima den Lisp-Debugger.

Beispiel:

Es wird eine Lisp-Funktion `$sqr` definiert, die aus Maxima mit `sqr` aufgerufen werden kann und ihr Argument quadriert. Wird die Funktion mit mehr als einem Argument aufgerufen, wird ein Lisp-Fehler generiert und Maxima kehrt zu der Eingabeaufforderung zurück.

    (%i1) :lisp (defun $sqr (x) (* x x))
    $SQR
    (%i1) sqr(3);
    (%o1)                           9
    (%i2) sqr(2,3);

    Maxima encountered a Lisp error:

     invalid number of arguments: 2

    Automatically continuing.
    To enable the Lisp debugger set *debugger-hook* to nil.

    (%i3)

Jetzt wird die Lisp-Variable `*debugger-hook*` auf den Wert `nil` gesetzt. In diesem Fall wird der Lisp-Debugger aufgerufen. Die Ausführung kann in diesem Fall nicht mit dem Kommando `continue` fortgesetzt werden, da ein Syntax-Fehler aufgetreten ist. Jedoch ist es möglich, Maxima mit dem Kommando `(run)` vom Lisp-Prompt neu zu starten.

    (%i3) :lisp (setq *debugger-hook* nil)
    NIL
    (%i3) sqr(2,3);

    debugger invoked on a SB-INT:
       SIMPLE-PROGRAM-ERROR in thread #<THREAD
       "initial thread" RUNNING {C597F49}>:
      invalid number of arguments: 2

    Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

    restarts (invokable by number or by possibly-abbreviated name):
      0: [MACSYMA-QUIT] Maxima top-level
      1: [CONTINUE    ] Ignore runtime option --eval "(cl-user::run)".
      2: [ABORT       ] Skip rest of --eval and --load options.
      3:                Skip to toplevel READ/EVAL/PRINT loop.
      4: [QUIT        ] Quit SBCL (calling #'QUIT, killing the process).

    ($SQR 2)[:EXTERNAL]
    0] continue

    * (run)
    Maxima restarted.
    (%i4)

Next: Funktionen und Variablen der Laufzeitumgebung, Previous: Initialisierung von Maxima, Up: Laufzeitumgebung [Contents][Index]