【发布时间】:2015-06-15 05:49:06
【问题描述】:
我有 Matlab GUI,它使用执行某些代码的按钮。 所有这些都有效,除了当代码到达 for 循环时,执行似乎没有进入。
1) 知道如何在 Matlab GUIDE 代码框架内实现 for 循环吗?
2) 有没有办法使用断点来调试 GUI 代码(我唯一能做的就是通过 'disp' 语句),因为当我运行 GUI 时,断点会被删除。
在阅读了解决方案后,我发现
(1) 发生是因为 for 循环索引没有随着数组长度而改变
我索引的那个,没有改变。我在代码中解释了这一点。
(2) 我的错,我在运行 GUI 之前设置了断点,当我反其道而行之时,它就断了。
% Opening func
function Regression_OpeningFcn(hObject, ~, handles, varargin)
NoiseMin = -12;
NoiseMax = 10;
NoiseRes = 2;
handles.noiseMin = NoiseMin;
handles.noiseMax = NoiseMax;
handles.noiseRes = NoiseRes;
%**this executed when value changed in edit text box***
function noiseMinDbEditText_Callback(~, ~, handles)
handles.noiseMin = str2num(get(handles.noiseMinDbEditText,'String'));
% When GUI is running, following shows change from -12 sucessfully
disp(strcat('Noise Min = ',num2str(handles.noiseMin)));
function noiseMinDbEditText_CreateFcn(hObject, ~, ~)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
%Similar code for noiseMax and noiseRes(not shown here)
`% Here, code enters the Pushbutton callback
function StartRegressionPushButton_Callback(~, ~, handles)
snr_res = handles.noiseRes;
% here, snr_vecs still shows [-12 2 10]
snr_vecs = [handles.noiseMin:handles.noiseRes:handles.noiseMax];
因此,基本上,当 GUI 运行时,在文本框中输入和更改与 min、max 和 res snr 变量相对应的值会显示更改,但是一旦我进入按钮对话框,更改的值(即在全局变量“句柄”中捕获)没有显示,因为我在那里中断了代码。
有什么帮助吗? [for 循环问题出现在我基于 snr_vecs 数组进行索引时,该数组没有改变,因此 for 循环正在执行,但不是应该的]
赛迪
【问题讨论】:
-
请提供代码的详细描述。从上面的描述我无法清楚地识别问题。
-
我不确定,但我认为这是由 matlab 主函数处理的。或者,matlab gui 可能有一个单独的主循环。无论如何,在 gui 主函数中看起来好像该函数主要设置图形和回调。当我运行 gui 时断点消失的问题是我无法重现的。你试过重启matlab吗?您使用的是什么操作系统?此外,您知道 gui 从您设置它开始一直运行到您关闭它,对吗?这意味着在此期间不能设置断点。
-
@patrik 是的,我什至在按下“运行”按钮之前就设置了断点,这太愚蠢了。一旦我运行并出现 GUI,我就可以破解代码。这样做我注意到以下几点:
标签: matlab