WEB开发网
开发学院软件开发Java 开发一个调试 JSP 的 Eclipse 插件 阅读

开发一个调试 JSP 的 Eclipse 插件

 2009-12-16 00:00:00 来源:WEB开发网   
核心提示: Tomcat 又将这个 JAVA 代码编译为 Hello_jsp.class,他们位于: $Tomcat_install_path$\work\Standalone\localhost\_ 目录下,开发一个调试 JSP 的 Eclipse 插件(4),但是 JSP 文件名/行号和 JAVA 行号

Tomcat 又将这个 JAVA 代码编译为 Hello_jsp.class,他们位于: $Tomcat_install_path$\work\Standalone\localhost\_ 目录下。但是 JSP 文件名/行号和 JAVA 行号的对应表(以下简称SMAP) 在哪里呢?答案是,它保存在 Class 中。如果用 UltraEdit 打开这个 Class 文件,就可以找到 SourceDebugExtension 属性,这个属性用来保存 SMAP。

JVM 规范定义了 ClassFile 中可以包含 SourceDebugExtension 属性,保存 SMAP:

            SourceDebugExtension_attribute { 
        u2 attribute_name_index; 
        u4 attribute_length; 
        u1 debug_extension[attribute_length]; 
      } 

我用 javassist 做了一个测试(javassist可是一个好东东,它可以动态改变Class的结构,JBOSS 的 AOP就利用了javassist,这里我们只使用它读取ClassFile的属性)

public static void main(String[] args) throws Exception{ 
     String[]files = { 
"E:\\Tomcat5_0_5\\work\\Catalina\\localhost\\_\\org\\apache\\jsp\\Hello_jsp.class", 
     }; 
         
for(int k = 0; k < files.length; k++){ 
     String file = files[k]; 
      System.out.println("Class : " + file); 
     ClassFile classFile = new ClassFile(new DataInputStream(new FileInputStream(file))); 
      
     AttributeInfo attributeInfo = classFile.getAttribute("SourceDebugExtension"); 
     System.out.println("attribute name :" + attributeInfo.getName() + "]\n\n"); 
     byte[]bytes = attributeInfo.get(); 
     String str = new String(bytes); 
     System.out.println(str);  
    } 
} 

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:开发 一个 调试

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接