当我尝试在GDB中运行我的程序时。在主程序结束后,我的程序开始跳回到我的主程序中间,然后随机跳转(而不是向前),而不是程序结束。 假设我的主要在57和161之间有行。当程序结束161时,它开始跳到第67行然后它跳到第64行,然后第61行,然后跳到145,最后跳到第161行,然后结束该计划。该程序没有进行跳跃和首次运行(57-> 58-> 59-> ...-> 67-> 68-> 69-> ...-> 161),之后它到了main(161)的末尾,它开始像我描述的那样跳跃。我没有在我的程序中使用和转到或标记。它只是在main结束后开始随机跳转而不是结束程序。
以下是我的gdb的一些输出:
145 evolve1.RVpotentialSample[0].outputHist((char*)"data/potentialHistS",sampleSize/10);
(gdb) n
67 Action sample1;
(gdb) n
64 velocity_verlet_cell_SBC evolve1(number_of_particles*2,dt,sampleSize);
(gdb) n
61 initial_MC_SBC initial1(number_of_particles,temp,100*number_of_particles);
(gdb) n
145 evolve1.RVpotentialSample[0].outputHist((char*)"data/potentialHistS",sampleSize/10);
(gdb) n
161 }
(gdb) n
我甚至不知道这怎么会发生。 Gdb只是在程序结束时向我展示了一些奇怪的跳跃。感谢您提供任何可能的意见。
答案 0 :(得分:2)
您观察到的行为有两个常见原因:
-O2
或类似标志)或如果是第一种情况,你通常会观察节目"跳转"所有时间(不仅仅是在程序结束时),因为编译器重新排列指令,使得行顺序不再是顺序的。
在第二种情况下,编译器通常"调用"来自声明变量的同一行的析构函数。
之前也在我的析构函数中设置了一个断点。在所有的析构函数之后,它开始像我描述的那样跳跃
你可能弄错了。当程序跳回时,执行一些stepi
命令。您很可能会在析构函数中登陆,但您没有设置断点。