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]