【发布时间】:2015-06-25 22:46:24
【问题描述】:
每当向方法声明的行添加断点时(在 Intellij IDEA 或 Android Studio 中),都会出现一个弹出窗口:
方法断点可能会大大减慢调试速度
为什么它会显着减慢调试速度,是我的问题吗?将断点放在函数的第一行有什么不同?
谢谢!
【问题讨论】:
标签: java android debugging intellij-idea
每当向方法声明的行添加断点时(在 Intellij IDEA 或 Android Studio 中),都会出现一个弹出窗口:
方法断点可能会大大减慢调试速度
为什么它会显着减慢调试速度,是我的问题吗?将断点放在函数的第一行有什么不同?
谢谢!
【问题讨论】:
标签: java android debugging intellij-idea
我看了一圈,在Intellij Documetation看到了这个帖子:
方法断点
方法断点响应程序进入或退出特定方法。它们让您通过您希望调查的方法而不是行号来定位您的调试会话。方法断点让您可以在方法级别跟踪程序流程以及检查进入和退出条件。请注意,使用方法断点会降低您正在调试的应用程序的速度。
我猜它会在程序进入方法之前停止程序,以便您可以在进入方法之前评估参数等。
它显着变慢的原因是(这是我可以收集到的,因为这是我在 Intellij 文档中的方法断点上可以找到的全部)它必须:
让您在方法级别跟踪程序流程以及检查进入和退出条件
我想这比仅仅停止程序的执行要花更长的时间
【讨论】:
我的理解是,当在方法入口设置断点时,代码必须以解释方式运行(而不是使用 JIT 进行预编译?)。
如果您改为在方法的第一行设置断点,我怀疑代码中的行号索引可用于简单地将中断操作码交换为原始操作码,因此应用程序会全速运行。 (调试时对我来说仍然很慢;)
【讨论】:
IntelliJ 团队有一个简单的解释:“由于 JVM 设计,方法断点会大大降低调试器的速度,评估它们的成本很高”
【讨论】: