eclipse gdb 使用 -O2 标志步进到上一行

发布于 2024-10-29 07:31:19 字数 161 浏览 5 评论 0原文

使用带有 -g 和 -O2 标志的 gdb 偶尔跳过到上一行。删除 -O2 标志,它会按预期工作。谁能解释为什么会发生这种情况?

我是 eclipse CDT 中的 gdb 新手,并通过“标准创建进程启动器”在 C++ 代码上使用它。

这是预期的行为还是有保留优化的解决方案?

Step over occationally steps to previous line using gdb with both -g and -O2 flags. Remove the -O2 flags and it works as expected. Can anyone explain why that happens ?

I'm new to gdb in eclipse CDT and use it on C++ code with "Standard create process launcher".

Is this expected behaviour or is there a solution leaving optimization in ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

笑梦风尘 2024-11-05 07:31:19

这是预期的。编译器可以随意在更高的优化级别上重新排序代码。手册页甚至说:

“如果没有任何优化选项,
编译器的目标是降低成本
编译并进行调试
产生预期的结果。”

这个目标在更高的层面上不得不被搁置。

It's expected. The compiler will feel free to re-order code on higher optimization levels. The man page even says that:

"Without any optimization option, the
compiler's goal is to reduce the cost
of compilation and to make debugging
produce the expected results."

That goal has to fall by the wayside at higher levels.

眼睛会笑 2024-11-05 07:31:19

优化有时可能会以意想不到的方式重新排列您的代码。优化代码中的调试信息将遵循这些重新安排。

Optimization may re-arrange your code in sometimes unexpected ways. The debug information in the optimized code will have followed those re-arrangements around.

⒈起吃苦の倖褔 2024-11-05 07:31:19

不要求代码完全按照您编写的顺序执行,只是结果(“可观察的行为”)与执行时的结果相同。

§1.9:

一致性实现的最低要求是:

——对易失性对象的访问严格按照抽象机的规则进行评估。
— 在程序终止时,写入文件的所有数据应与根据抽象语义执行程序可能产生的可能结果之一相同。
— 交互设备的输入和输出动态应以这样的方式发生:在程序等待输入之前提示输出实际上被传递。交互设备的构成是由实现定义的。

这些统称为程序的可观察行为。

There are no requirements that the code is executed exactly in the order you have written it, just that the result, "the observable behavior", is the same as-if it did.

§1.9:

The least requirements on a conforming implementation are:

— Access to volatile objects are evaluated strictly according to the rules of the abstract machine.
— At program termination, all data written into files shall be identical to one of the possible results that execution of the program according to the abstract semantics would have produced.
— The input and output dynamics of interactive devices shall take place in such a fashion that prompting output is actually delivered before a program waits for input. What constitutes an interactive device is implementation-defined.

These collectively are referred to as the observable behavior of the program.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文