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

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

Remove

----
netbeans-8.2-201609300101-src\debugger.jpda\src\org\netbeans\modules\debugger\jpda\models\CallStackFrameImpl.java
----
LN330 : 347

  1. String sourceName = getSourceName(null);
  2. int ext = sourceName.lastIndexOf('.');
  3. if (ext > 0) {
  4. String extension = sourceName.substring(++ext);
  5. extension = extension.toUpperCase();
  6. if (!"JAVA".equals(extension)) { // NOI18N
  7. as = Collections.singletonList(extension);
  8. s = extension;
  9. }
  10. } else {
  11. // Check Nashorn:
  12. String sourcePath = getSourcePath(null);
  13. if (sourcePath.startsWith("jdk/nashorn/internal/scripts/") || // NOI18N
  14. sourcePath.startsWith("jdk\\nashorn\\internal\\scripts\\")) { // NOI18N
  15. s = "JS"; // NOI18N
  16. as = Collections.singletonList(s);
  17. }
  18. }

MODIFY

  1. String sourceName = getSourceName(null);
  2. int ext = sourceName.lastIndexOf('.');
  3. String extension = null;
  4. if (ext > 0) {
  5. extension = sourceName.substring(++ext);
  6. extension = extension.toUpperCase();
  7. }
  8. if (!"JAVA".equals(extension)) { // NOI18N
  9. // Check Nashorn:
  10. String sourcePath = getSourcePath(null);
  11. if (sourcePath.startsWith("jdk/nashorn/internal/scripts/") || // NOI18N
  12. sourcePath.startsWith("jdk\\nashorn\\internal\\scripts\\")) { // NOI18N
  13. s = "JS"; // NOI18N
  14. as = Collections.singletonList(s);
  15. } else {
  16. as = Collections.singletonList(extension);
  17. s = extension;
  18. }
  19. }

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. [bzoj3207][花神的嘲讽计划Ⅰ] (字符串哈希+主席树)

    Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天D ...

  2. canvas贝塞尔曲线 - 1

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvEAAAIcCAIAAADwgGbqAAAgAElEQVR4nOy9a4wb55nn20kOZhq7o8

  3. [LeetCode] Counting Bits 计数位

    Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the ...

  4. 测试对于list的sort与sorted的效率

    sorted from time import clock from random import randint start = clock() a = [randint(0,1000000) for ...

  5. python 抽象类、抽象方法、接口、依赖注入、SOLIP

    1.程序设计原则:SOLIP SOLIP设计原则 1.单一责任原则(SRP) 一个对象对只应该为一个元素负责 2.开放封闭原则(OCP) 对扩展开放,修改封闭 3.里氏替换原则(LSP) 可以使用任何 ...

  6. 读《单页web应用》-回顾作用域

    js中没有块级作用域,只有全局作用域和函数作用域.全局变量可以在任何地方访问,局部变量只能在声明它的地方访问. var a=1; function func(){ var a=2; } console ...

  7. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  8. windows 10专业版14393.447 64位纯净无广告版系统 基于官方稳定版1607制作 更新于20161112

    系统特点: 447更新日志(Win10 PC一周年更新正式版14393.447 32位/64位更新补丁KB3200970下载 Flash补丁Kb3202790下载): 1.通过网友的反馈,保留了Edg ...

  9. windows下安装kibana出 "EPERM: operation not permitted

    D:\kibana-\bin>kibana-plugin install file:///x-pack-5.0.0.zip Attempting to transfer from file:// ...

  10. java--面向对象---访问属性

    <第一节> private--只能用于成员变量和成员函数(限制于类而不是对象),即只能在本类中访问被定义为private 的变量 public-- protected-- <第二节& ...