#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 более интуитивно понятными.