关于JAVA Debug注释问题的思考

   最近一个同事在使用Eclipse搭建初始WEB项目环境的时候,在后台的Servlet代码上修改之后,Debug调试的时候,修改的代码始终没有生效,并且总是会走到注释的那部分程序。我过去看了一下,说肯定是你写的程序没有被重新编译,Debug的class走的还是原来的那部分class文件。这时候,我的这位同事就反驳说,Debug的时候就是因为走的是class字节码,所以运行注释的部分也会被判断这行是不是注释,Debug的时候注释也不会忽略的。我听完他说的后,我当时的第一反应是根据我一直的Debug经验注释肯定是不会被Debug执行的,但是我在想,我是不是应该找到更专业的说法来解释这个问题。
   带着这样的想法,我试图去网上搜索了相关的内容:
1、java Debug的体系:JPDA
JPDA(Java Platform Debugger Architecture)是 Java 平台调试体系结构的缩写。它包括三个模块:
1)Java 虚拟机工具接口(JVMTI)-底层
2)Java 调试线协议(JDWP)-中间层
3)Java调试接口(JDI)-高层。
以Eclipse调试为例,实际是Eclipse实现了JDI调试接口,通过JDWP调试通信协议,访问JVMTI对class文件进行调试。
同时,我们可以把JPDA看成C/S框架体系,也就是说debugger端可以通过网络远程访问JVM
服务器,这就是为什么我们可以对JAVA进行远程调试。
2、了解java 调试器原理:
在查找这方面的资料时,在java文件编译成class文件的时候,有个关于debug必须选项:源文件行号(InputStartLine) 目标文件开始行号(OutputStartLine) 是必须的。以单步调试为例,Debug时把源文件中的行号通过JPDA通知映射到class文件对应的行,然后
就可以返回调试的结果信息。
    了解了这两方面的内容,我们就大概清楚了Java Debug的执行过程,但是仍然无法解释我开头提到的问题,那么我就接着查相关的信息,关于java注释编译的信息,我终于得到了答案:java文件编译的时候,注释是不会被编译到class文件中
    通过这个问题的分析,让我对java debug理论方面有了更多了解,同时也对关于远程调试相关的内容有了更深的理解。





你可能感兴趣的:(JAVA Debug)