Main Content

dbstack

函数调用堆栈

说明

示例

dbstack 会显示行号和导致当前暂停状态的函数调用的文件名,按它们的执行顺序列出。显示内容从当前正在执行的函数开始,一直到最顶层函数为止。每个行号都是一个超链接,指向编辑器中对应的行。functionname>localfunctionname 表示法用于描述局部函数的位置。

示例

dbstack(n) 会在显示中省略前 n 个堆栈帧。此语法很有用,例如从错误处理程序内发出 dbstack 时。

示例

dbstack(___, '-completenames') 将输出堆栈中每个函数的完全限定名称。

您可以指定将 '-completenames' 与上述语法中的任何输入参数结合使用。

示例

ST = dbstack(___)m x 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 中设置断点,并通过输入 1 运行 myfile。执行 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 中设置断点,并通过输入 1 运行 myfile。执行 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×1 结构体形式返回,其中 m 是调用堆栈中的函数数量。该结构体包含以下字段。

file出现该函数的文件。如果没有文件,则此字段为空。
name函数在文件中的名称。
line函数调用的行号。

注意

如果处理时越过了文件尾,dbstack 返回负行号以指出该特殊情况。例如,如果要执行的最后一行是第 15 行,则在您执行该行之前,dbstack 行号是 15,执行之后是 -15

当前工作区索引,返回为正整数。索引表示当前工作区与 MATLAB 当前暂停或正在执行的工作区之间的工作区数量。

扩展功能

版本历史记录

在 R2006a 之前推出