Maxima Manual: Отладка исходного кода

Next: Специальные команды, Up: Отладка [Contents][Index]

### 39.1 Отладка на уровне исходного кода

Maxima имеет отладчик исходного кода. Пользователь может определить в функции точку останова и и продолжить выполнение с этой точки строка за строкой. При этом возможно анализировать стек вызовов и переменные, имеющие значение на данном уровне.

Команда `:help`, или просто `:h`, выводит список команд отладчика. (Команды могут быть сокращены, если сокращение однозначно. Если оно неоднозначно, то будет выведен список альтернатив.) В отладчике пользователь может также использовать обычные команды Maxima для исследования, определения и манипулирования переменными и выражениями.

Точка останова задается командой `:br` в командной строке Maxima. В отладчике, пользователь может продвигаться по одной строке за раз с помощью команды `:n` (“next”). Команда `:bt` (“backtrace”) выводит список кадров стека. Команда `:r` (“resume”) завершает отладчик и продолжает выполнение программы. Данные команды проиллюстрированы в следующем примере.

    (%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 выводим обратную трассировку вызовов
    #0: foo(y=5)(foobar.mac line 1)
    #1: bar(x=2,y=3)(foobar.mac line 9)

    (dbm:1) :n                         <-- :n продвигаем выполнение на одну строку
    (foobar.mac 2)
    /tmp/foobar.mac:2::

    (dbm:1) :n                         <-- :n продвигаем выполнение на одну строку
    (foobar.mac 3)
    /tmp/foobar.mac:3::

    (dbm:1) u;                         <-- Исследуем знасение переменной u
    28

    (dbm:1) u: 33;                     <-- Устанавливаем значение u равным 33
    33

    (dbm:1) :r                         <-- :r to возобновляем выполнение программы

    (%o2)                                1094

Содержимое файла `/tmp/foobar.mac`:

    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);

Использование Отладчика в Редакторе Emacs

Если пользователь выполняет программу в командном окне отладчика (dbl) редактора GNU emacs или в графической оболочке Xmaxima, то при достижении точки останова в другой части окна будет показан участок исходного кода с текущей строкой, выделенной либо красным цветом, либо маленькой стрелкой. Пользователь может продолжить выполнение программы построчно, нажимая M-n (Alt-n).

Для использования в Emacs отладчика `dbl` требуется файл `dbl.el`, расположенный в директории elisp. Убедитесь, что файлы elisp установлены или добавьте директорию elisp программы Maxima к пути: например, добавте следующие строки к файлу `.emacs` или файлу `site-init.el`

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

После этого при вводе

    M-x dbl

в emacs должно открываться командное окно, в котором можно выполнять программы, например, Maxima, gcl, gdb и т.д. Это командное окно “знает” об отладке исходного кода, который открыт в другом окне редактора.

Пользователь может установить точку останова в определенной строке кода, нажав на `C-x space`. При этом производится анализ: в какой функции находится данная строка и на какой по порядку строке этой функции стоит курсор. Если курсор расположен, скажем, на строке 2 функции `foo`, тогда в командном окно будет введена команда “`:br foo 2`”, которая задает точку останова на второй строке функции `foo`. Для того, чтобы все это работало необходимо, чтобы в окне файла `foobar.mac` был включен режим maxima-mode.el. Существуют еще дополнительные команды, доступные в таком окне, такие как вычисление функций Maxima при нажатии `Alt-Control-x`.

Категории:Отладка ·

Next: Специальные команды, Up: Отладка [Contents][Index]