从函数调用dbstep

Ita*_*atz 5 debugging matlab

我正在尝试编写我的Matlab调试步骤命令版本dbstep,即我想在一次调用中执行dbstep和其他一些操作.但是,放入dbstep函数不起作用:

% in file my_dbstep.m
function my_dbstep()
evalin('caller', 'dbstep'); 
Run Code Online (Sandbox Code Playgroud)

当我my_dbstep在调试会话中调用时,它就像我dbstep在函数内输入一样,而不是在调用者中输入.

还有其他解决方案吗?

Ita*_*atz 1

我找到的解决方案是使用一个 mex 文件,每次我在调试模式下单步执行一行(使用这个新的 mex 文件)时,我可以从该文件中调用 Matlab 中的一个函数来执行我想要的操作,然后从 mex 中dbstep2调用dbstep:

// file dbstep2.c
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {    
    mexCallMATLAB(0,NULL,0, NULL, "do_some_stuff");
    mexCallMATLAB(0,NULL,0, NULL, "dbstep");
}
Run Code Online (Sandbox Code Playgroud)

就我而言,我do_some_stuff在 Matlab(无 GUI)中调试时使用该函数将击键发送到 vim,因此当前行在 vim 中打开的脚本中突出显示。当然,它可以用于任何其他用例。