zoukankan      html  css  js  c++  java
  • 调试D2JS

    D2JS 最终加载运行于 nashorn 上,目前能调试 nashorn js 的 IDE 只有一款:NetBeans。eclipse 没有计划,神器号称支持 nashorn,对于简单类型可以观察,对于 js 的复合类型(对象数组)神器就会错误的处理为 Java 对象(nashorn 上的 js 对象都是 java 对象)。

    但是 NetBeans 代码有点业余,其硬编码了 js 文件后缀,导致 d2js、jssp 等内容为 js 后缀不为 js 的都无法调试。

    之前通过猜测、NetBeans模块调试、远程调试等等方式,最终确定如下修改:

    ----
    netbeans-8.2-201609300101-srcdebugger.jpda.jssrcorg etbeansmodulesdebuggerjpdajssourceSource.java
    ----
    LN224 : 227

            int nl = name.length();
            if (nl < 4 || !name.substring(nl - 3, nl).toLowerCase().equals(".js")) {
                name = name + ".js";
            }

    Remove

    ----
    netbeans-8.2-201609300101-srcdebugger.jpdasrcorg etbeansmodulesdebuggerjpdamodelsCallStackFrameImpl.java
    ----
    LN330 : 347

               

     String sourceName = getSourceName(null);
                int ext = sourceName.lastIndexOf('.');
                if (ext > 0) {
                    String extension = sourceName.substring(++ext);
                    extension = extension.toUpperCase();
                    if (!"JAVA".equals(extension)) {    // NOI18N
                        as = Collections.singletonList(extension);
                        s = extension;
                    }
                } else {
                    // Check Nashorn:
                    String sourcePath = getSourcePath(null);
                    if (sourcePath.startsWith("jdk/nashorn/internal/scripts/") ||       // NOI18N
                        sourcePath.startsWith("jdk\nashorn\internal\scripts\")) {   // NOI18N
                        s = "JS";                                                   // NOI18N
                        as = Collections.singletonList(s);
                    }
                }

    MODIFY

                String sourceName = getSourceName(null);
                int ext = sourceName.lastIndexOf('.');
                String extension = null;
                if (ext > 0) {
                    extension = sourceName.substring(++ext);
                    extension = extension.toUpperCase();
                }
                if (!"JAVA".equals(extension)) {    // NOI18N                
                    // Check Nashorn:
                    String sourcePath = getSourcePath(null);
                    if (sourcePath.startsWith("jdk/nashorn/internal/scripts/") ||       // NOI18N
                        sourcePath.startsWith("jdk\nashorn\internal\scripts\")) {   // NOI18N
                        s = "JS";                                                   // NOI18N
                        as = Collections.singletonList(s);
                    } else {            
                        as = Collections.singletonList(extension);
                        s = extension;
                    }
                }

    10-27日已提交到NetBeans,希望他们下个版本会加进去。

    目前调试效果如下:

    d2js debugger

    看起来还不错,调试器看到的代码暴露了 d2js 代码被套上的闭包和 sql 块转换生成的代码,和源文件不同。

    这里不能上传 jar,有需要的可以向我索取。

  • 相关阅读:
    Mesos源码分析(8): Mesos-Slave的初始化
    OpenStack(一)——OpenStack的相关概念
    awk(gawk)文本报告生成器
    echo的色彩处理
    bash命令检测Shell脚本中的语法错误和查看详细执行过程
    Linux命令之cut
    sed流编辑器
    shell中函数的使用
    shell中的shift左移参数命令
    shell中跳出循环语句break和continue
  • 原文地址:https://www.cnblogs.com/inshua/p/6136972.html
Copyright © 2011-2022 走看看