我正在使用btrace来检测应用程序。 Btrace所做的是将字节码注入正在运行的JVM中以跟踪目标应用程序。它还设置了一个套接字连接,以便在跟踪器客户端和应用程序之间进行通信。
当我停止跟踪客户端时,它不会删除注入应用程序的代码。它继续跟踪并通过此端口发回结果。由于客户端不再有任何尝试发送跟踪结果生成异常:
java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
at java.io.ObjectOutputStream$BlockDataOutputStream.writeBlockHeader(ObjectOutputStream.java:1894)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1875)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1786)
at java.io.ObjectOutputStream.reset(ObjectOutputStream.java:500)
at com.sun.btrace.agent.RemoteClient.onCommand(RemoteClient.java:137)
at com.sun.btrace.BTraceRuntime$ConsumerWrapper.accept(BTraceRuntime.java:169)
at com.sun.btrace.BTraceRuntime$ConsumerWrapper.accept(BTraceRuntime.java:157)
at com.sun.btrace.org.jctools.queues.MpscChunkedArrayQueue.drain(MpscChunkedArrayQueue.java:624)
at com.sun.btrace.BTraceRuntime$4.run(BTraceRuntime.java:443)
at java.lang.Thread.run(Thread.java:745)
如何在将应用程序连接到应用程序后取消对应用程序的检测并正常关闭btrace?