在Matlab中,为什么在保存并运行M文件后第一次未触发断点?

在Matlab中,为什么在保存并运行M文件后第一次未触发断点?,matlab,Matlab,我注意到Matlab中有一个奇怪而恼人的行为。可能我只是做错了什么,但当我对M文件进行一些更改、保存并重新运行它时,断点并没有按预期触发。如果我第二次执行M文件,那么断点将按预期触发。为什么会出现这种奇怪的行为?我该如何修复它 编辑: 根据要求,我的Matlab代码片段: function readCommutingContextData(filename) fid = fopen(filename); bufferSize = 5; format long g nLines = 0; tl

我注意到Matlab中有一个奇怪而恼人的行为。可能我只是做错了什么,但当我对M文件进行一些更改、保存并重新运行它时,断点并没有按预期触发。如果我第二次执行M文件,那么断点将按预期触发。为什么会出现这种奇怪的行为?我该如何修复它

编辑:

根据要求,我的Matlab代码片段:

function readCommutingContextData(filename)
fid = fopen(filename);

bufferSize = 5;

format long g
nLines = 0;
tline = fgetl(fid);
while ischar(tline)
    nLines = nLines + 1;
    tline = fgetl(fid);
end
fclose(fid);

timestamps  = zeros(nLines,2,'uint64');
coords      = zeros(nLines,3);
features    = zeros(nLines,12);
labels      = cell(nLines,3);
sources      = cell(nLines,1);
fid = fopen(filename);
tline = fgetl(fid);
i = 1;
while ischar(tline)
    tokens = textscan(tline, '%s', 'delimiter', ',');   
    tokens = tokens{1};
    timestamp           = uint64(str2double(tokens{1}));
    gpsTime             = uint64(str2double(tokens{2}));
    latitude            = str2double(tokens{3});
    longitude           = str2double(tokens{4});
    accuracy            = str2double(tokens{5});
    source              = tokens{6};

    ...
end
fclose(fid);

我已经观察到在R2011a和R2012a中编辑文件之前设置的断点的类似行为。我相信这是一个Matlab错误


我发现的解决方法是在编辑和保存文件后重置(清除/设置)至少一个断点。

当我从“命令窗口”运行代码时,我遇到了相同的问题,断点没有工作。在我冲浪之后,在别人的指导下,我在我的呼叫语法前面使用了“清除所有”。轻松删除“all”并再次运行您的代码,所有断点都将正常工作。

很容易处理。转到断点选项卡并单击此处的箭头,首先单击“全部清除”,然后单击“设置并清除”,最后选择“错误时停止”选项……断点开始正常工作

一种可能性是代码与其环境有一些交互,这意味着只有在第二次运行时才会命中断点。但是,如果看不到您的代码,或者看不到再现问题的最小代码片段,您就不会期望得到比我所做的猜测更有用的帮助。当您已经处于调试模式时,会出现一些奇怪的行为。(提示为“K>>”)您能检查一下吗?谢谢。我可以包含我的代码,但我可以向您保证,它与我正在运行的Matlab代码非常独立。我已经注意到这个问题很长一段时间使用许多不同的M文件。另外,@bdecaf:No,它发生在我已经处于调试模式之外时(即No“K>>”)。它并不是一直都在发生,我似乎找不到任何模式来区分它何时发生,何时不发生。这可能与我远程访问Matlab运行的机器有关吗?你联系过Mathworks的技术支持吗?他们的存在是为软件付费的原因之一。根据我的经验,他们经常解决技术问题。我刚刚回忆起这篇文章:可能你太快了,或者你的文件系统需要使用rehash,这样Matlab才能了解这些更改。是的,我也使用了这种解决方法。你知道有没有报告过这个错误吗?