Scala no-op保证不会被优化掉?

时间:2012-09-28 10:38:40

标签: eclipse scala scalac noop

您可以在Scala方法的结束}上设置断点,但这样做是没有意义的,因为它显然不会被命中。

我还是想把它放在那里。所以我想,“我在那条线之前放入一个无操作,然后设置一个断点?”

但是,当我试图设置一个永远不会被命中的断点(因为那里没有代码)时,Eclipse显然没有警告我,因此我不能依赖Eclipse告诉我是否已经优化了no-op out(特别是因为我甚至没有使用相同版本的Scala来运行Eclipse Scala插件正在使用的代码)。

所以我可以在这里使用一个简短的无操作语句或表达式,保证不会被Scala编译器优化,在所有情况下 - 并保证不会被优化掉通过JIT以防止它被击中的断点的方式?我想它必须是一个表达而不是我的情况下的一个语句,因为这个方法返回一个有用的值,而不是Unit

1 个答案:

答案 0 :(得分:1)

这不完全是一个无操作,但是一个日志语句(或跟踪表达式 - 即另外返回它刚刚记录的值的日志记录语句)保证不会被优化掉!

唯一的问题是,每次遇到断点时,如果要查看实际输出的内容,就必须手动跳过调试语句或跟踪表达式。除非它只输出变量的值,否则您可以在Eclipse的Variables选项卡中找到该变量。

至少在我的代码中,使用Eclipse Scala插件2.1里程碑2,在“旧式调试模式”中踩过一个跟踪表达式,这不是一件小事 - 因为它完全被破坏了,因为{{3} }!

在我意识到发生了什么事之前,我花了大约20次尝试敲击F6 和F7 键,然后才终于踏上它!这只是为了踩过一次

请记住,下一行是} - 所以显而易见的解决方法是在下一行设置另一个断点 - 不起作用!

从理论上讲,你应该只能this issue,而不是试图跨过踪迹。不幸的是,这对我来说也不起作用 - 它说找不到课程。

相关问题