任何机会,有没有人遇到以下情况?
出于调试目的,我通过使用" mpi-run -np 1"启动基于mpi的程序,仅使用一个mpi进程。但是,当我调试程序时,反复执行步骤和步骤经常发生。
所以,让我们说,我逐行跟踪源代码,直到我达到了兴趣点。然后我尝试着进入,输入" n"期待一行。但是,调试器返回到函数的第一行。只有在我经历了两次或三次之后,我才能继续。
印象是调试器没有做错事,因为结果被认为是正确的。我真的很好奇为什么会发生这种情况。
提前致谢!
答案 0 :(得分:3)
观察到的行为通常是编译器优化处于活动状态的结果。优化可能导致二进制代码不完全遵循源的结构 - 它仍然给出相同的结果,但编译器以更高效的方式重新排列操作。此外,某些功能可能会内联。结果,调试信息中的指令范围和源代码行之间的对应关系变得无用。
在进行源代码级调试时,请始终确保使用大多数编译器的-O0
标志关闭优化,或者不为Sun / Oracle编译器提供任何优化标志。请注意,某些编译器选项可能会导致优化级别提升。例如,在{/ 1}}的Sun / Oracle Studio中启用OpenMP支持会自动将优化级别提高到-xopenmp
。相反,应使用-xO3
并且不明确指定优化级别。此外,一些编译器默认优化,例如Intel的编译器。