首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Freemarker Debugger框架使用示例

Freemarker Debugger框架使用示例
EN

Stack Overflow用户
提问于 2022-01-05 08:42:07
回答 1查看 135关注 0票数 0

我已经开始使用断点等开发一个Freemarker,提供的框架基于java。到目前为止我让它停在一个断点上但是..。没什么。

除了源代码提供的调试/imp类之外,还有服务器部分和客户端部分的非常基本的示例设置吗?那会有很大帮助的。

这是我的服务器类:

代码语言:javascript
复制
class DebuggerServer {
    private final int port;
    private final String templateName1;
    private final Environment templateEnv;
    private boolean stop = false;

    public DebuggerServer(String templateName) throws IOException {
        System.setProperty("freemarker.debug.password", "hello");
        port = SecurityUtilities.getSystemProperty("freemarker.debug.port", Debugger.DEFAULT_PORT).intValue();
        System.setProperty("freemarker.debug.password", "hello");
        Configuration cfg = new Configuration();
        // Some other recommended settings:
        cfg.setIncompatibleImprovements(new Version(2, 3, 20));
        cfg.setDefaultEncoding("UTF-8");
        cfg.setLocale(Locale.US);
        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        Template template = cfg.getTemplate(templateName);
        templateName1 = template.getName();
        System.out.println("Debugging " + templateName1);

        Map<String, Object> root = new HashMap();
        Writer consoleWriter = new OutputStreamWriter(System.out);

        templateEnv = new Environment(template, null, consoleWriter);
        DebuggerService.registerTemplate(template);
    }

    public void start() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                startInternal();
            }
        }, "FreeMarker Debugger Server Acceptor").start();
    }

    private void startInternal() {
        boolean handled = false;

        while (!stop) {
            List breakPoints = DebuggerService.getBreakpoints(templateName1);
            for (int i = 0; i < breakPoints.size(); i++) {
                try {
                    Breakpoint bp = (Breakpoint) breakPoints.get(i);
                    handled = DebuggerService.suspendEnvironment(templateEnv, templateName1, bp.getLine());
                } catch (RemoteException e) {
                    System.err.println(e.getMessage());
                }
            }
        }
    }

    public void stop() {
        this.stop = true;
    }
}

这是客户端类:

代码语言:javascript
复制
class DebuggerClientHandler {
    private final Debugger client;
    private boolean stop = false;

    public DebuggerClientHandler(String templateName) throws IOException {
//        System.setProperty("freemarker.debug.password", "hello");
//        System.setProperty("java.rmi.server.hostname", "192.168.2.160");

        client = DebuggerClient.getDebugger(InetAddress.getByName("localhost"), Debugger.DEFAULT_PORT, "hello");
        client.addDebuggerListener(environmentSuspendedEvent -> {
            System.out.println("Break " + environmentSuspendedEvent.getName() + " at line " + environmentSuspendedEvent.getLine());
//            environmentSuspendedEvent.getEnvironment().resume();
        });

    }

    public void start() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                startInternal();
            }
        }, "FreeMarker Debugger Server").start();
    }

    private void startInternal() {
        while (!stop) {
        }
    }

    public void stop() {
        this.stop = true;
    }

    public void addBreakPoint(String s, int i) throws RemoteException {
        Breakpoint bp = new Breakpoint(s, i);
        List breakpoints = client.getBreakpoints();
        client.addBreakpoint(bp);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-01-05 14:28:38

Liferay (https://github.com/liferay/liferay-ide)具有FreeMarker模板调试支持(https://issues.liferay.com/browse/IDE-976),因此他们设法使用它。不过,我从未见过它的实际行动。除此之外,我不知道有什么地方使用调试API。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70589936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档