每当在方法声明的行中添加断点时(在Intellij IDEA或Android Studio中),都会出现一个弹出窗口:
方法断点可能会大大减慢调试速度
为什么显着会减慢调试速度,这是我的问题?将断点放在函数的第一行有什么不同?
谢谢!
答案 0 :(得分:8)
我环顾四周,看到Intellij Documetation中的这篇文章:
方法断点
方法断点用于响应程序进入或退出特定方法。它们允许您按照要调查的方法而不是按行号来定位调试会话。方法断点允许您遵循方法级别的程序流程以及检查进入和退出条件。请注意,使用方法断点可能会降低正在调试的应用程序的速度。
我猜它会在程序进入方法之前就停止程序,因此您可以在输入方法之前评估参数等。
它大大减慢的原因是(这是我可以收集的,因为这是所有我可以在Intellij的文档中找到方法断点)它必须:
让您遵循方法级别的程序流程以及检查进入和退出条件
我认为这比停止程序的执行需要更长的时间
答案 1 :(得分:0)
我的理解是,当在方法入口上设置断点时,代码必须以解释方式运行(而不是使用JIT进行预编译?)。
如果你在方法的第一行设置断点,我怀疑代码中的行号索引可以用来简单地交换原始操作码的break操作码,因此应用程序全速运行。 (调试时对我来说似乎还很慢;)
答案 2 :(得分:0)
IntelliJ团队有一个简单的解释:“由于JVM设计,方法断点将大大降低调试器的速度,评估起来很昂贵”