Nächste: , Vorige: , Nach oben: Laufzeitumgebung   [Inhalt][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)

Nächste: , Vorige: , Nach oben: Laufzeitumgebung   [Inhalt][Index]