سؤال

I am starting java with the following arguments:
-Xdebug -Xrunjdwp:transport=dt_socket,address=0,server=y,suspend=n
and I get the following output:
Listening for transport dt_socket at address: 59183

Is it possible to find the port from inside the same JVM, without reading standard output?

هل كانت مفيدة؟

المحلول

Why are you setting the port to 0? Typically you would use the address parameter to set the port to whatever you want.

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;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top