MATLAB中dbstack函数用法
目录
语法
说明
示例
调试时查看堆栈跟踪信息
存储堆栈中每个函数的完整名称
dbstack函数的功能是函数调用堆栈。
语法
dbstack
dbstack(n)
dbstack(___, '-completenames')
ST = dbstack(___)
[ST,I] = 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
参数说明
n — 要忽略的帧数
要忽略的帧数,指定为非负整数。
ST — 堆栈跟踪信息
堆栈跟踪信息,以 m×1 结构体形式返回,其中 m 是调用堆栈中的函数数量。该结构体包含以下字段。
file | 出现该函数的文件。如果没有文件,则此字段为空。 |
name | 函数在文件中的名称。 |
line | 函数调用的行号。 |
注意
如果处理时越过了文件尾,dbstack 返回负行号以指出该特殊情况。例如,如果要执行的最后一行是第 15 行,则在您执行该行之前,dbstack 行号是 15,执行之后是 -15。
I — 当前工作区索引
当前工作区索引,返回为正整数。索引表示当前工作区与 MATLAB 当前暂停或正在执行的工作区之间的工作区数量。