Matlab调试时如何避免触发get方法且不修改代码?
MATLAB调试问题:避免查看变量时触发依赖属性的get方法
问题场景
调试以下MFunEval类代码时,在第21行notify(obj,'UpdateGraph');和第24行[x,y] = MFunEval.grid(obj.Lm);设置断点。当程序运行到第21行查看obj.hFun时,会触发Data属性的get方法(第24行),导致MATLAB打开大量内置函数文件,引发意外问题。需求是不修改代码的前提下,实现代码按顺序执行,避免这类不必要的get方法触发。
classdef MFunEval<handle %函数计算类 properties hFun %函数句柄 end properties (SetObservable = true) Lm = []; %区间 end properties (Dependent = true) Data %保存网格化数据 end events UpdateGraph %更新图形 end methods function obj = MFunEval(fcn_handle,limits) obj.hFun = fcn_handle; obj.Lm = limits; end function fofxy = set.hFun(obj,func) obj.hFun = func; notify(obj,'UpdateGraph'); end function data = get.Data(obj) [x,y] = MFunEval.grid(obj.Lm); matrix = obj.hFun(x,y); data.X = x; data.Y = y; data.Matrix = matrix; end end methods (Static) function [x,y] = grid(lim) inc = (lim(2)-lim(1))/20; [x,y] = meshgrid(lim(1):inc:lim(2)); end end end
调试技巧
- 命令行直接访问目标属性:不要在工作区面板展开对象,直接在命令窗口输入
obj.hFun查看属性值。这种方式只会读取指定属性,不会触发MATLAB自动计算所有依赖属性(如Data)。 - 用
getfield精准获取:使用getfield(obj, 'hFun')命令单独提取属性,适用于需要动态指定属性名的场景,同样不会触发其他依赖属性的get方法。 - 修改工作区显示预设:打开MATLAB预设(主页→环境→预设),进入「工作区」选项,取消勾选「显示依赖属性」。这样在工作区展开对象时,MATLAB不会主动计算
Data这类依赖属性,从根源避免误触发。 - 临时变量中转属性值:在断点处执行
temp_hFun = obj.hFun;,后续查看temp_hFun即可。通过临时变量隔离对象属性访问,避免连带触发其他代码逻辑。
内容的提问来源于stack exchange,提问作者bokabokaboka
相关产品推荐
相关产品推荐

