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的更多相关文章

  1. C# Web应用调试开启外部访问

    在用C#开发Web应用时有个痛点,就是本机用VS开启Web应用调试时外部机器无法访问此Web应用.这里将会介绍如何通过设置允许局域网和外网机器访问本机的Web应用. 目录 1. 设置内网访问 2. 设 ...

  2. NodeJs之调试

    关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...

  3. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...

  4. 写出易调试的SQL(修订版)

    h4 { background: #698B22 !important; color: #FFFFFF; font-family: "微软雅黑", "宋体", ...

  5. tomcat开发远程调试端口以及利用eclipse进行远程调试

    一.tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里:  SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compi ...

  6. Hawk 4.7 单步调试

    单步调试的意义 已经编写的工作流,可能会因为某些外界环境的变化而出错,此时需要排除错误,我们可以使用单步调试. 单步调试的本质,相当于只使用前n个模块,这样就能看到每个步骤下,流的改变. 例子 还是上 ...

  7. Visual Studio 2012远程调试中遇到的问题

    有的时候开发环境没问题的代码在生产环境中会某些开发环境无法重现的问题,或者需要对生产环境代码进行远程调试该怎么办? Vs已经提供给开发者远程调试的工具 下面简单讲讲该怎么用,前期准备:1.本地登录账户 ...

  8. iOS逆向工程之Hopper+LLDB调试第三方App

    LLDB是Low Level Debugger的简称,在iOS开发的调试中LLDB是经常使用的,LLDB是Xcode内置的动态调试工具.使用LLDB可以动态的调试你的应用程序,如果你不做其他的额外处理 ...

  9. 写出易调试的SQL

    h4 { background: #698B22 !important; color: #FFFFFF; font-family: "微软雅黑", "宋体", ...

随机推荐

  1. TypeScript 素描 - 类

    本文虽然是学自官方教程而来,但是也融入了自己的理解,而且对官方的例子做了一些修改 /* 类 面向对象编程的一大核心 使用C#.Java进行编程的朋友肯定已经是不能够再熟悉了 TypeScript的类与 ...

  2. [LeetCode] Matchsticks to Square 火柴棍组成正方形

    Remember the story of Little Match Girl? By now, you know exactly what matchsticks the little match ...

  3. [LeetCode] Coin Change 硬币找零

    You are given coins of different denominations and a total amount of money amount. Write a function ...

  4. [LeetCode] Maximum Product Subarray 求最大子数组乘积

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  5. 当AngularJS POST方法碰上PHP

    问题描述 怎么POST过去给PHP都收不到资料? $_POST方法取不到正确的传入值! 原理说明 AngularJS这套framework使用的AJAX方法中,资料传递的格式为JSON,送出去的hea ...

  6. 一个c#的输入框函数

    private static string InputBox(string Caption, string Hint, string Default) { Form InputForm = new F ...

  7. bzoj1901

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 7218  Solved: 3000[Su ...

  8. Javascript提交表单

    <form action="login.do?act=login" method="post"> <input type="subm ...

  9. asp.net mvc bootstrap datatable 服务端分页 更新槽糕的代码【1】

    datatable 服务端分页 因项目需求变动,需处理大量数据,更改成服务端分页,自己两天的学习笔记 datatable 1.10.7 百度云下载  密码:0ea1 先上图[ jqueryui风格] ...

  10. bzoj 4320: ShangHai2006 Homework

    4320: ShangHai2006 Homework Time Limit: 10 Sec Memory Limit: 128 MB Description 1:在人物集合 S 中加入一个新的程序员 ...