我正在使用 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?