Могу ли я знать транспортный порт jdwp изнутри JVM? - PullRequest
2 голосов
/ 21 ноября 2011

Я запускаю Java со следующими аргументами:
-Xdebug -Xrunjdwp:transport=dt_socket,address=0,server=y,suspend=n
и получаю следующий вывод:
Listening for transport dt_socket at address: 59183

Возможно ли найти порт изнутрита же JVM, без чтения стандартного вывода?

Ответы [ 2 ]

1 голос
/ 07 июня 2017
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;
    }
}
1 голос
/ 21 ноября 2011

Почему вы устанавливаете порт на 0? Обычно вы используете параметр адреса, чтобы установить для порта все, что вы хотите.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...