Quellcode-Debugger (Maxima Manual)

Next: Debugger-Kommandos, Up: Fehlersuche [Contents][Index]

### 29.1 Quellcode-Debugger

Maxima hat einen Quellcode-Debugger. Es können Unterbrechungspunkte gesetzt werden, um die Ausführung einer Funktion abzubrechen und um schrittweise die Funktion zu testen. Der Stapelspeicher und Variable können untersucht werden.

Das Kommando `:help` oder `:h` zeigt eine Liste mit den Debugger-Kommandos. Innerhalb des Debuggers können alle Maxima-Funktionen genutzt werden, um Variablen und Ausdrücke auszugeben, zu definieren oder anderweitig zu manipulieren.

Eine Unterbrechnung wird mit dem Kommando `:br` gesetzt. Mit dem Kommando `:n` oder `:next` wird die nächste Programmzeile ausgeführt. Das Kommando `:bt` oder `:backtrace` zeigt eine Liste der Stack Frames. Mit dem Kommando `:r` oder `:resume` wird der Debugger verlassen.

Beispiele:

    (%i1) load ("/tmp/foobar.mac");

    (%o1)                           /tmp/foobar.mac

    (%i2) :br foo
    Turning on debugging debugmode(true)
    Bkpt 0 for foo (in /tmp/foobar.mac line 1)

    (%i2) bar (2,3);
    Bkpt 0:(foobar.mac 1)
    /tmp/foobar.mac:1::

    (dbm:1) :bt                        <-- :bt typed here gives a backtrace
    #0: foo(y=5)(foobar.mac line 1)
    #1: bar(x=2,y=3)(foobar.mac line 9)

    (dbm:1) :n                         <-- Here type :n to advance line
    (foobar.mac 2)
    /tmp/foobar.mac:2::

    (dbm:1) :n                         <-- Here type :n to advance line
    (foobar.mac 3)
    /tmp/foobar.mac:3::

    (dbm:1) u;                         <-- Investigate value of u
    28

    (dbm:1) u: 33;                     <-- Change u to be 33
    33

    (dbm:1) :r                         <-- Type :r to resume the computation

    (%o2)                                1094

Die im obigen Beispiel geladene Datei `/tmp/foobar.mac` hat den folgenden Inhalt:

    foo(y) := block ([u:y^2],
      u: u+3,
      u: u^2,
      u);

    bar(x,y) := (
      x: x+2,
      y: y+2,
      x: foo(y),
      x+y);

#### Nutzung des Debuggers mit Emacs

Wird Maxima unter GNU Emacs in einer Shell ausgeführt oder wird die Nutzeroberfläche Xmaxima verwendet, dann wird in einem zweiten Ausgabefenster die Position einer Unterbrechung im Quellcode angezeigt. Mit dem Emacs-Kommando `M-n` kann dann schrittweise die Funktion ausgeführt werden.

Um diese Funktionalität zu nutzen, sollte Emacs in einer `dbl`-Shell ausgeführt werden. Dazu benötigt Emacs die Datei `dbl.el` im elisp Verzeichnis. Dazu müssen die elisp-Dateien installiert oder das Maxima elisp Verzeichnis bekannt sein. Dazu können die folgenden Kommandos der Datei `.emacs` hinzugefügt werden:

    (setq load-path (cons "/usr/share/maxima/5.9.1/emacs" load-path))
    (autoload 'dbl "dbl")

Mit dem Emacs-Kommando `M-x dbl` wird eine Shell gestartet, in der Programme wie Maxima, gcl, gdb u. a. ausgeführt werden können. In dieser Shell kann auch der Maxima-Debugger ausgeführt werden.

The user may set a break point at a certain line of the file by typing `C-x space`. This figures out which function the cursor is in, and then it sees which line of that function the cursor is on. If the cursor is on, say, line 2 of `foo`, then it will insert in the other window the command, “`:br foo 2`”, to break `foo` at its second line. To have this enabled, the user must have maxima-mode.el turned on in the window in which the file `foobar.mac` is visiting. There are additional commands available in that file window, such as evaluating the function into the Maxima, by typing `Alt-Control-x`.

Next: Debugger-Kommandos, Up: Fehlersuche [Contents][Index]