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

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

有帮助吗?

解决方案

简而言之,当设置方法条目时,执行将通过解释器运行。我不认为这附近有什么...

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

其他提示

2个原因:

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

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

我假设调试器需要醒来为每个方法调用,看它是否匹配选择打破该一个(或多个)。因为它必须检查每一个方法调用一个潜在的比赛,才可以执行它比,如果它没有做这些检查要慢得多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top