我正在使用jdi接口来创建调试器,当我使用MethodEntryRequests启用方法条目跟踪时,调试程序的速度减慢了几十倍。我为主线程设置了过滤器,并将策略暂停到SUSPEND_EVENT_THREAD。 Classfilter是有限的,如果我打印任何收到的事件,它不会显示超过几十个,所以它不应该收到太多。我正在本地调试并且使用调试的java程序跟随它的命令行:
-Xdebug -Xrunjdwp:transport=dt_socket,suspend=y,server=y,address=1337
答案 0 :(得分:31)
简短的回答是,在设置方法条目时,执行会通过解释器运行。我不认为有这个... ...
以前这是在调试模式下运行的所有代码的情况,但it was enhanced in 1.4 ...现在HotSpot适用于“全速”调试,除了方法输入和退出,观察点以及单步执行时或者在包含断点的方法中。
答案 1 :(得分:11)
2个原因:
同样适用于分析器和.net应用程序
答案 2 :(得分:5)
我认为调试器需要为每个方法调用唤醒,以查看它是否与选择要中断的方法匹配。因为它必须在可执行之前检查每个方法调用潜在匹配,所以它比不必执行所有这些检查要慢得多。