как отладить сервер

#java #debugging

#java #отладка

Вопрос:

У меня есть сервер, который будет запущен на другой машине, и мне нужно выполнить отладку на двух разных машинах. Есть ли способ виртуально отладить сервер, поскольку на моей машине все работает нормально, но когда я устанавливаю его на другую машину, все происходит неправильно? В моем распоряжении нет другой машины (я могу только размещать и видеть результаты).

 public class fss {  public static void main(String[] args) throws IOException {         ServerSocket serverSocket = null;       boolean listening = true;       boolean allowed = true;         //      int port = Integer.parseInt(args[0]);       int port
= 60000;

    try {

        serverSocket = new ServerSocket(port);
    } catch (IOException e) {
        System.out.println("Could not transmit on port: "   port);
        System.exit(-1);
    }

    while (listening) {

        //Take the ip of the client in number form
        allowed = true;
        Socket socket = serverSocket.accept();
        DataOutputStream outToClient = new DataOutputStream(socket.getOutputStream());
        String clientAddress = socket.getRemoteSocketAddress().toString();
        clientAddress = clientAddress.substring(1);
        for (int i = 0; i < clientAddress.length() - 1; i  ) {
            if (clientAddress.substring(i, i   1).equals(":")) {
                clientAddress = clientAddress.substring(0, i);
            }
        }

        File f = new File("forbidden.txt");
        if (f.exists()) {
            BufferedReader forbidden = new BufferedReader(new FileReader("forbidden.txt"));
            String addr;
            while ((addr = forbidden.readLine()) != null) {
                if (Character.isLetter(addr.charAt(0))) {//if the address is in a letter form
                    addr = InetAddress.getByName(addr).toString();
                    for (int i = 0; i < addr.length() - 1; i  ) {
                        //System.out.println(addr.substring(i, i   1));
                        if (addr.substring(i, i   1).equals("/")) {
                            addr = addr.substring(i   1);
                        }
                    }
                }
                if (clientAddress.equals(addr)) {
                    allowed = false;
                    break;
                }

            }
            if (allowed == true) {
                new MultiThread(socket).start();
            } else {
                outToClient.writeBytes("Connection refused"   "n");
                socket.close();
                forbidden.close();
            }
        } else {
            new MultiThread(socket).start();
        }
    }
    serverSocket.close();
}
  

}

Ответ №1:

Вам нужно будет включить отладку на сервере JVM. Обычно это делается с помощью следующих аргументов JVM —

 -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787
  

Затем вам нужно подключиться к процессу, используя IP-адрес сервера и указанный выше порт отладки — 8787

Ответ №2:

В одном из ответов уже указывалось, как включить JDWP на сервере. Для этого потребуется, чтобы у вас также были соответствующие разрешения для открытия необходимого порта.

Если у вас нет этого разрешения, я бы скромно предложил использовать регистратор. Ваш код полностью лишен каких-либо вызовов протоколирования, которые помогли бы в сценарии, где у вас нет большого контроля над средой выполнения.

Вы могли бы начать с использования logging framework в Java — java.util.logging , но вы найдете log4j или slf4j более интуитивно понятными.