调试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-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,有需要的可以向我索取。

时间: 2024-11-03 22:13:11

调试D2JS的相关文章

Linux下GDB调试与对拍(先挖个坑)

应为NOIP要复赛在NOI-Linux下编写程序,所以被迫选择Vim+Gdb(主要是Guide太丑了). 虽然GUIDE的调试功能已经对付大多数的调试,反正学一学GDB的使用也没什么坏处. 1 生成调试信息 要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中.使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点.如: gcc -g hello.c -o hello g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名.变量名,

微信开发之本地接口调试(非80端口,无需上传服务器服务器访问

前言: 本文是总结在开发微信接口时,为方便开发所采取的一些快捷步骤,已节省开发人员难度开发时间从而提高开发效率. 本地测试: (提醒,在本地模拟微信get或post数据时先将校验参数注释掉) 利用微信模拟器weixinPost进行模拟发送xml数据 由于这个软件是微信没公开高级接口时公布的,所以对于高级接口的调试,笔者利用的是Fiddler这个抓包工具模拟post数据 高端测试: 利用反向代理软件ngrok访问本地项目: ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之

PHPStorm调试PHP代码~实际操作+mark~~

因为wamp自己已经下载了xdebug,只要配置开启就行了. 1. 配置php.ini(有就打开注释,没有就加上) XDEBUG Extension[xdebug]zend_extension ="D:/wamp64/bin/php/php5.6.25/zend_ext/php_xdebug-2.4.1-5.6-vc11-x86_64.dll"xdebug.remote_enable = 1;远程主机xdebug.remote_host = localhost;主机端口xdebug.r

Tomcat配置远程调试端口(windows、Linux)

当我们需要定位生产环境问题,而日志又不清晰的情况下,我们可以借助Tomcat提供的远程调试,设置如下: // Linxu系统: apach/bin/startup.sh开始处中增加如下内容: declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081" // Windows系统:

Android APP 调试过程中遇到的问题。

调试过过程中APP安装完启动后有的时候会异常退出,报这个错误.有的时候可以直接启动.查找不到原因.网上说把commit方法替换成commitAllowingStateLoss() 也无效. Android APP 调试过程中遇到的问题. >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007192169/AndroidAPP调试过程中遇到的问题.html

Linux-hexdump命令调试event驱动—详解(13)

hexdump: 查看文件的内容,比如二进制文件中包含的某些字符串,通常用来调试驱动用 1.调试 键盘驱动 讲解 当我们insmod挂载了键盘驱动后,找到键盘驱动被放在event1设备里, 此时没有按键按下,所以event1里面的数据是没有的,那么数据又是从来哪里来? 通过键盘驱动的read函数,若有按键按下,就会上传按键数据给用户层,此时的用户层就是hexdump 因为键盘驱动的input_handler 是:evdev_handler 所以键盘驱动的read函数是: evdev_handle

调试信息的完成

gdb中-x是为了实现通过文件的初始化gdb GAS(gcc)(AT&T 语法),NASM(Intel 语法) 当boot loader 引导操作系统的时候,机器必须有如下的状态: EAX: 必须包含魔数OX2BADB002,这个值告诉操作系统目前它是由兼容的Multiboot 的boot loader 引导的. EBX: 必须包含boot loader 提供的多重引导信息结构(见3.3 节多重信息引导结构)的32位物理地址. CS: 必须是32 位的读/执行的代码段,偏移是0 以及界限是 0X

gdb调试

[前言]使用gdb调试前,在编译程序时,要加 -g 选项,否则你将看不见程序的函数名.变量名,所代替的全是运行时的内存地址. 1.开始调试 a.  gdb <program> program也就是你的执行文件,一般在当前目录下. b. gdb <program> core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件. 2.[列出源码],从第n行开始(编译时要加 -g 选项) l n 3.[设置断点]在第N行加断点 break

WebPack+WebStorm调试

怎么用webstorm来调试WebPack? 今天查了很多文档,最终在官网上耐心看完英文文档后,才解决.附上链接:https://blog.jetbrains.com/webstorm/2015/09/debugging-webpack-applications-in-webstorm/ 工具简介 Windows7 WebStorm2017 Webpack2 谷歌浏览器(默认浏览器) 操作 在Project视图里找到index.html,右击进入Debug模式 WebStrom会自动进入Debu