方法断点可能会严重减缓调试速度

34
无论是在Intellij IDEA还是Android Studio中,将断点添加到方法声明的行上时,都会弹出一个窗口:

方法断点可能会显着减慢调试速度

我的问题是:为什么会显著地减慢调试速度?将断点放在函数的第一行有什么不同吗?

谢谢!


请参见https://dev59.com/f3RB5IYBdhLWcg3wAjNH。 - Javaru
3个回答

13
我稍微查看了一下,在Intellij文档中找到了这篇文章:Breakpoint类型

方法断点

方法断点会在程序进入或退出特定方法时触发。它们允许您通过要调查的方法而不是行号来针对调试会话。方法断点使您可以按方法级别跟踪程序流以及检查输入和输出条件。请注意,使用方法断点可能会减慢您正在调试的应用程序。

我猜它会在进入方法之前停止程序,这样你就可以在进入方法之前评估参数等。

原因是这会大大减慢速度(这是我从 Intellij 文档中了解到的关于方法断点的全部内容),因为它需要:

让您按方法级别跟踪程序流以及检查输入和输出条件

我想这可能需要比仅暂停程序执行更长的时间。

2
请使用问题上的编辑链接添加更多信息。Post Answer按钮仅用于完整回答问题。 - dhh
问题在于,IntelliJ的文档在这方面非常稀少。我查阅了他们的文档,并尽力根据我所拥有的信息回答了我的问题。这似乎是我能得到的最完整的答案。 - Jeeter
7
我认为这可以作为他问题的有效回答,而且根据 帮助中心 的规定,这也是该网站的完全合法用途。 - user4989692
3
帮助中心 获知:“通过调查问题并贡献你研究结果以及尝试过的任何额外措施作为部分答案来帮助我们找到解决方案。这样,即使我们无法解决问题,下一个人也有更多可参考的信息。你还可以投票支持该问题或设置悬赏,以便引起更多关注……任何能让提问者朝着正确方向前进的答案都是有用的,但请尽量在回答中提到任何限制、假设或简化情况。” - Jeeter

0

1
https://dev59.com/1l4c5IYBdhLWcg3wY5mW#54995643声称:“此实现要求JVM在任何线程进入任何方法和任何线程退出任何方法时触发事件。” - reducing activity
嗯,显然是设计和/或实现的问题:我们想知道一些具体信息,特别是什么东西最终会占用CPU。 - SamB

0
我理解的是,当在方法入口设置断点时,代码必须以解释执行的方式运行(而不是使用JIT进行预编译?)。
如果将断点设置在方法的第一行上,我猜测可以使用代码中的行号索引,简单地将一个断点操作码与原始操作码进行交换,这样应用程序就能以全速运行。(尽管在调试时仍然感觉相当慢;)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接