如何调试服务器

时间:2011-05-25 02:07:07

标签: java debugging

我有一台将在另一台机器上运行的服务器,我需要使用两台不同的机器进行调试。有没有办法虚拟调试服务器,因为我的机器上的一切运行正常,但当我把它放在另一台机器上时,一切都错了?我没有另外一台机器(我只能主持并看到结果)。

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();
}

}

2 个答案:

答案 0 :(得分:1)

您必须在服务器JVM上启用调试。 这通常通过以下JVM args -

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

然后,您需要使用服务器的IP地址和上述调试端口 - 8787

连接到该进程

答案 1 :(得分:0)

其中一个答案已经表明如何在服务器上启用JDWP。这将要求您具有相应的权限来打开必要的端口。

如果您没有此权限,我会谦虚地建议您使用记录器。您的代码完全没有任何日志记录调用,这些调用会在您无法控制运行时环境的情况下提供帮助。

您可以从使用Java中的日志框架开始 - java.util.logging,但您会发现log4j或slf4j更直观。