コードのストレートブロックをデバッグするとき、gdbのかなり奇妙な動作に気づきました。次のコマンドで通常どおりgdbを実行しました。
gdb ./exe
break main
run
next
その後[enter]
、数回。結果として私が得たのは
35 world.generations(generations);
(gdb)
36 world.popSize(100);
(gdb)
37 world.eliteSize(5);
(gdb)
41 world.setEvaluationFnc( eval );
(gdb)
37 world.eliteSize(5);
(gdb)
39 world.pXOver(0.9);
(gdb)
38 world.pMut(0.9);
(gdb)
41 world.setEvaluationFnc( eval );
(gdb)
これらの行を2回実行する理由はまったくありません。私はこの振る舞いを理解していません。コードは次のようになります。
(gdb) list 39
34 SimpleGA<MySpecimen> world;
35 world.generations(generations);
36 world.popSize(100);
37 world.eliteSize(5);
38 world.pMut(0.9);
39 world.pXOver(0.9);
40
41 world.setEvaluationFnc( eval );
42
43 world.setErrorSink(stderrSink);
私はそれを無視すべきか、それとも私のコードで何か邪悪なことが起こっているのかわかりません。アプリはOpenMPを使用し、それを使用するようにコンパイルされています。ただし、info thread
実行中のスレッドは1つだけであると言います。また、すべてが適切な結果をもたらすように見えますが、2回実行しても、ほとんどが単純なセッターであるため、問題はありません。
誰かがこのようなものを見た、またはどこで調査するためのヒントがありましたか?私は自分で失敗しました=)。
ヒントをありがとう、luk32。