dbstack

Стек вызовов функции

Синтаксис

dbstack
dbstack(n)
dbstack(___, '-completenames')
ST = dbstack(___)
[ST,I] = dbstack(___)

Описание

пример

dbstack отображает номера строки и имена файлов вызовов функции, которые привели к текущему условию паузы, перечисленному в порядке, в котором они выполняются. Отображение запускается с выполняющегося в данного момента, функционирует и продолжается, пока это не достигает самой верхней функции. Каждый номер строки является гиперссылкой на ту строку в Редакторе. Обозначение functionname>localfunctionname описывает местоположение локальной функции.

пример

dbstack(n) не использует первые стековые фреймы n от отображения. Этот синтаксис может быть полезным, например, при издании dbstack из обработчика ошибок.

пример

dbstack(___, '-completenames') выводит полностью определенное имя каждой функции в стеке.

Можно задать '-completenames' с любым из входных параметров в предыдущих синтаксисах.

пример

ST = dbstack(___) возвращает информацию трассировки стека в m-by-1 структура, ST.

пример

[ST,I] = dbstack(___) также возвращает I, текущий индекс рабочей области.

Примеры

свернуть все

При отладке файла кода MATLAB® дайте команду dbstack, чтобы просмотреть информацию трассировки стека.

Создайте файл, myfile.m, который содержит эти операторы.

function n = myfile(x)
n = myfunction(x-1);
end

function z = myfunction(y)
z = 2 / y;
end

Установите точку останова в myfunction и запустите myfile с входным параметром 1. При выполнении myfunction MATLAB приостанавливает в строке z = 2/y.

dbstop in myfile>myfunction
myfile(1);

Запустите команду dbstack. MATLAB отображает номера строки и имена файлов вызовов функции, которые привели к текущей точке останова.

dbstack
In myfile>myfunction (line 5)
In myfile (line 2)

Сохраните полное имя файла, имя функции и номер строки для каждой функции в стеке при отладке файла.

Создайте файл, myfile.m, который содержит эти операторы.

function n = myfile(x)
n = myfunction(x-1);
end

function z = myfunction(y)
z = 2 / y;
end

Установите точку останова в myfunction и запустите myfile с входным параметром 1. При выполнении myfunction MATLAB приостанавливает в строке z = 2/y.

dbstop in myfile>myfunction
myfile(1);

Запустите команду dbstack, не использовав первый кадр и запросив полные имена. MATLAB возвращает информацию трассировки стека в заданной структуре ST.

[ST, I] = dbstack('-completenames', 1)
ST = 

    file: 'C:\myProject\myfile.m'
    name: 'myfile'
    line: 2


I =

     1

Входные параметры

свернуть все

Количество кадров, чтобы не использовать, заданный как неотрицательное целое число.

Выходные аргументы

свернуть все

Информация трассировки стека, возвращенная как m-by-1 структура, где m является количеством функций в стеке вызовов. Структура имеет эти поля.

fileФайл, в котором появляется функция. Это поле пусто, если нет никакого файла.
имяИмя функции в файле.
строкаНомер строки вызова функции.

Примечание

Если вы продвигаетесь мимо конца файла, dbstack возвращает отрицательное значение номера строки, чтобы идентифицировать тот особый случай. Например, если последняя строка, которая будет выполняться, является строкой 15, то номером строки dbstack является 15, прежде чем вы выполните ту строку и -15 после.

Текущий индекс рабочей области, возвращенный как положительное целое число. Индекс представляет количество рабочих областей между вашей текущей рабочей областью и рабочей областью, в которой MATLAB в настоящее время приостанавливается или выполнение.

Представлено до R2006a

Была ли эта тема полезной?