0

条件が満たされた 2 回目 (または 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;

条件が満たされるたびにブレークポイントで停止する方法は知っていますが、2 回目のヒットを確認したい場合は、最初に数分間待ってから、f5 を押してさらに数分間待つ必要があります。必要以上に集中力が失われるので、これは非常に面倒です。10回目を見ようとしたらもっとひどい。

停止する必要がある関数のコードを調整する必要のないソリューションを探しています。

4

2 に答える 2

2

これは楽しいアイデアです。部分的な解決策が得られると思います。

関数を書く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)

を実行すると、 の行が2mytest回ヒットしたとき (および t が 666 のとき) にのみ停止する必要があります。つまり、が計算されている間です。myfuncf2

clear mystopへの呼び出しの間に永続変数をリセットするために、行を含める必要があることに注意してくださいmytestclear mystopまたは、の実行の間に手動で呼び出すこともできますmytest

明らかに - 3 回目、10 回目、n 回目などの後にのみ停止する場合は、counter>=2上記の条件を に変更しcounter>=nます。

于 2013-05-15T11:11:37.293 に答える
1

コードを調整し、そこに到達した回数をカウントできるフラグを管理する必要があります

于 2013-05-14T09:36:30.257 に答える