我正在编写一个Java代理程序,与JVMTI交互。由于某些原因,我需要使用JVMTI(在
注意:我已经看过this,但是认为可能有一些常规方法可以做到这一点,而这些方法不在JVMTI标准中。
java
进程内部的C接口),而不是像java.lang.instrument
或JDI这样的Java API。我希望能够做一些似乎不直接支持的事情。
- 是否有一种方法在Java进程已经启动后加载代理程序?
- 是否有一种方法可以卸载Java代理程序(除了杀死整个Java进程),无论是从JVMTI代码内部还是从进程外部?例如,如果我可以找到动态加载模块的句柄,我能否从JVMTI代码中安全地调用
dlclose()
?
如果这些操作无法完成,是否有一种方法在加载代理程序后向Java代理程序传递数据?是否有一种通过某些Java命令行实用程序正常完成此操作的方法?如果没有,我能否在我的代理程序代码中使用标准的C或C++库调用创建一个线程并使其侦听套接字?
如果方便的话,不用担心你的回答是否支持Windows - 我正在进行这个项目来扩展一个仅限于Unix的调试工具。注意:我已经看过this,但是认为可能有一些常规方法可以做到这一点,而这些方法不在JVMTI标准中。