问题:( 问题的完整描述如下)
- 有没有人有关于如何欺骗 Matlab 跳过一行或几行代码的建议?(mex / java / 重写一些内部的 Matlab 功能?)
- 有谁知道
db*
代码文件可能位于哪里(如果存在)?
Matlab 中有几个函数允许在调试/运行程序时进行流控制:dbstop
, dbcont
,dbstep
等...我试图找到一个db*
函数可以跳过 Matlab 脚本中的下一行dbskip
,但遗憾的是没有这样的内置功能,而且这个功能似乎永远不会实现(10 年而且还在继续)。
编辑使用示例:
以下脚本myScript
可能会调用一个函数,该函数myFunc
根据其输入值决定是否跳过调用者脚本中的下一行,如下所示:
% myScript.m
x = 1;
myFunc(x);
x = 2;
x = 3;
% myFunc.m
function myFunc(u)
if u == 1
% skip next line in caller -- how to?
% ... do more stuff ...
else
% ... do other stuff ...
disp('Business as usual.')
end
% ... do even more stuff ...
end
编辑
正如@Michael Smith 建议的那样,实现此目的的一种方法是编写一个程序,该程序将myScript.m
逐行读取并执行它,跳过在运行时指定的任何行。我相信这个解决方案是一个好的开始;但是,在更复杂的情况下,函数调用中会有函数调用。因此,使用这种方法制作一个真正通用的解决方案需要编写一个成熟的 Matlab 代码解释器,它具有 Matlab 的所有功能以及我自己的一些要求。如果我可以使用 Matlab 的某些固有反射功能或侵入调试系统,我想避免这种情况。
与此同时,我撞到了另一面墙,试图找出dbstep
实施的方式和地点。调试任何db*
功能时,结果是以下错误:
Error using <db*>
Debug commands only allowed when stopped in debug mode.
我能找到的唯一dbstep.m
文件包含没有任何代码的文档,所以我假设它是编译的内置文件。