【问题标题】:Breakpoint-counter: Only stop at Matlab breakpoint the second (nth) time it is hit断点计数器:仅在第二次(第 n 次)被击中时停在 Matlab 断点处
【发布时间】:2013-05-14 09:32:24
【问题描述】:

我正在寻找一种设置条件断点的方法,该断点仅在满足条件的第二次(或第 n 次)时停止,例如:

function f = myfunc(x)
for t = 1:1000
   x = x+x^0.5; %I want to stop here the second time the function is called and t == 666
end
f = x;

我知道每次满足条件时如何在断点处停止,但是如果我想查看第二次击中的情况,我首先需要等待几分钟,然后按 f5 并再等待几分钟.这很烦人,因为它让我再次失去焦点。如果我想看第十次,那就更糟了。

我正在寻找一种不需要我调整我需要停止的函数的代码的解决方案。

【问题讨论】:

    标签: matlab breakpoints


    【解决方案1】:

    这是一个有趣的想法,我认为它可以为您提供部分解决方案。

    写一个函数mystop.m:

    function flag = mystop
    
    persistent counter
    
    if isempty(counter)
        counter = 0;
    else
        counter = counter+1;
    end
    
    if counter>=2
        flag = true;
    else
        flag = false;
    end
    

    现在在myfunc 内的x = x+x^0.5; 行设置一个条件断点,条件为

    t == 666 && feval(@()mystop)
    

    设置一个测试函数来锻炼myfunc几次:

    function [f1,f2,f3,f4,f5] = mytest
    
    clear mystop
    
    f1= myfunc(1)
    f2= myfunc(2)
    f3= myfunc(3)
    f4= myfunc(4)
    f5= myfunc(5)
    

    当您运行mytest 时,它应该只在myfunc 中的行被击中的秒 时间停止(并且t 为666) - 换句话说,在计算f2 时.

    请注意,您需要包含clear mystop 行,以便在调用mytest 之间重置持久变量。或者,您可以在运行 mytest 之间手动调用 clear mystop。

    显然 - 如果您希望它仅在第 3 次、第 10 次、第 n 次等之后停止,请将上面的条件 counter>=2 修改为 counter>=n。

    【讨论】:

    • 看起来很有前途!仍然需要对其进行测试,但我想这很容易通过给 mystop 计数器限制作为输入来概括。
    • 是的,我认为您应该能够概括它并在很多方面使其更加健壮 - 以上只是一个似乎接近解决方案的快速示例。 PS 我认为你应该可以用mystop 替换feval(@()mystop) - 不太清楚为什么我把它复杂化了。
    【解决方案2】:

    你必须调整代码,在那里管理一个可以计算到达那里的次数的标志

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2020-07-25
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      相关资源
      最近更新 更多