當調試一個直接的代碼塊時,我注意到gdb的漂亮bahaviour。 我用以下命令正常運行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。
您是否在開啓任何優化的情況下進行編譯?你確定你在上次編譯後沒有修改源代碼(gdb提取實際的源代碼)? –