我正在尝试捕获在任何 android 应用程序中进行的所有方法调用。为此,我使用 JDI 为应用程序的每个正在运行的线程注册 MethodEntryRequest。我成功地做到了这一点,但我面临的问题是应用程序变得非常非常慢。所以我想知道我在执行过程中是否做错了什么。我正在添加我的代码,我首先注册 ClassPreparedRequest 以捕获应用程序进程对每个类的加载,并在其中为导致类加载的线程注册 MethodEntryRequest 和线程过滤器。
if(!traceMap.keySet().contains(event.thread()))
{
EventRequestManager mgr = vm.eventRequestManager();
MethodEntryRequest menr = mgr.createMethodEntryRequest();
menr.setSuspendPolicy(EventRequest.SUSPEND_NONE);
menr.addThreadFilter(event.thread());
menr.enable();
}
注册 ClassPreparedRequest 的代码是
ClassPrepareRequest cpr = mgr.createClassPrepareRequest();
cpr.addClassFilter("com.example.*");
cpr.setSuspendPolicy(EventRequest.SUSPEND_NONE);
cpr.enable();