码迷,mamicode.com
首页 > Web开发 > 详细

调试D2JS

时间:2016-12-06 13:45:00      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:jpda   let   ash   add   string   --   last   nbsp   bug   

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

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

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

 

----
netbeans-8.2-201609300101-src\debugger.jpda.js\src\org\netbeans\modules\debugger\jpda\js\source\Source.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-src\debugger.jpda\src\org\netbeans\modules\debugger\jpda\models\CallStackFrameImpl.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 代码被套上的闭包和 sql 块转换生成的代码,和源文件不同。

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

 

调试D2JS

标签:jpda   let   ash   add   string   --   last   nbsp   bug   

原文地址:http://www.cnblogs.com/inshua/p/6136972.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!