2

我使用以下参数启动 java:
-Xdebug -Xrunjdwp:transport=dt_socket,address=0,server=y,suspend=n
我得到以下输出:
Listening for transport dt_socket at address: 59183

是否可以在不读取标准输出的情况下从同一个 JVM 中找到端口?

4

2 回答 2

1

为什么将端口设置为0?通常,您会使用地址参数将端口设置为您想要的任何内容。

http://download.oracle.com/javase/1.4.2/docs/guide/jpda/conninv.html

于 2011-11-21T17:38:46.720 回答
1
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;
    }
}
于 2017-06-07T04:02:59.977 回答