在调试直接代码块时,我注意到 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)
绝对没有理由两次越过这些线。我不明白这种行为。代码如下所示:
(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
说只有一个线程在运行。此外,一切似乎都给出了正确的结果,但即使执行两次也应该没有问题,因为这些大多是一些普通的二传手。
有没有人看到过这样的事情或有任何提示可以在哪里进行调查?我自己失败了=)。
感谢您的提示,luk32。