33

我正在使用 jdi 接口创建调试器,当我使用 MethodEntryRequests 启用方法条目跟踪时,被调试程序的速度降低了数十倍。我已将主线程的过滤器和挂起策略设置为 SUSPEND_EVENT_THREAD。Classfilter 是有限的,如果我打印任何收到的事件,它不会显示超过几十个,所以它不应该收到太多。我在本地调试,并在调试后的 java 程序中有以下类型的命令行:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=y,server=y,address=1337

4

3 回答 3

31

简短的回答是在设置方法条目时执行通过解释器运行。我认为无论如何都没有这...

这曾经是所有在调试模式下运行的代码的情况,但它在 1.4 中得到了增强......现在 HotSpot 可用于“全速”调试,除了方法进入和退出、观察点以及单步或方法中的情况包含断点。

于 2009-04-24T22:08:04.567 回答
11

2个原因:

  1. 它必须对每个方法条目添加检查(没有选项可以仅调整某些方法)
  2. 方法内联变得不可能(因此小方法的运行速度要慢 10-100 倍)

分析器和 .net 应用程序也是如此

于 2009-04-26T12:36:19.557 回答
5

我假设调试器需要为每个方法调用唤醒,以查看它是否与选择中断的方法匹配。因为它必须在执行之前检查每个方法调用是否存在潜在匹配,所以它比不必执行所有这些检查要慢得多。

于 2009-04-21T03:26:38.887 回答