我開始用下面的參數的java:
-Xdebug -Xrunjdwp:transport=dt_socket,address=0,server=y,suspend=n
,我得到下面的輸出:
Listening for transport dt_socket at address: 59183
我可以從JVM內部知道jdwp傳輸端口嗎?
是否有可能找到同一個JVM內部的端口,而不讀取標準輸出?
我開始用下面的參數的java:
-Xdebug -Xrunjdwp:transport=dt_socket,address=0,server=y,suspend=n
,我得到下面的輸出:
Listening for transport dt_socket at address: 59183
我可以從JVM內部知道jdwp傳輸端口嗎?
是否有可能找到同一個JVM內部的端口,而不讀取標準輸出?
你爲什麼把端口設置爲0?通常,您可以使用地址參數將端口設置爲任何您想要的。
http://download.oracle.com/javase/1.4.2/docs/guide/jpda/conninv.html
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Method;
import java.util.Properties;
@Slf4j
public class RuntimeDebugger {
static private int jdwpListenerPort;
static public int getJdwpListenerPort() {
if(jdwpListenerPort == 0) {
jdwpListenerPort = readJdwpListenerPort();
}
return jdwpListenerPort;
}
static private int readJdwpListenerPort() {
String listenerAddress = null;
try {
Class<?> theClass = Class.forName("sun.misc.VMSupport");
Method m = theClass.getMethod("getAgentProperties");
Properties p = (Properties) m.invoke(null);
listenerAddress = p.getProperty("sun.jdwp.listenerAddress");
if (listenerAddress != null) {
listenerAddress = StringUtils.substringAfter(listenerAddress, ":");
return Integer.parseInt(listenerAddress);
}
} catch (Exception ex) {
log.error("Failed to read sun.jdwp.listenerAddress, ignore");
}
return -1;
}
}
https://stackoverflow.com/questions/28745065/identify-java-jdwp-debugger-assigned-ephemeral-port – shawn