关于RCP产品无法进行远程调试的说明(源码断点和高亮显示位置不对)

来源:互联网 发布:全钟穆勒编程软件下载 编辑:程序博客网 时间:2024/05/01 12:11

背景:

这里应该写一些远程调试功能的重要意义的。官话不多说,有时候源码上无法重现,产品的的bug,远程调试将提供更多的信息。

我所在小组负责维护的RCP产品,通过Eclipse导出的产品可以进行远程调试。但是通过linux服务器 导出的产品可以监听到相关线程,源码断点和高亮显示位置不对。但通常服务器打出的产品才是会被大范围使用的。so,得解决问题。

PS:关于如何通过服务器打版。可以参考:Eclipse help中   Plug-in Development Environment Guide->Tasks  下的相关内容

知识准备:

java文件先通过编译产生.class文件  该文件是程序运行时的真正文件。也是java跨平台的原因。

.class文件会自动忽略java文件中的注释信息

.class文件中可以包含行号信息。(行号信息等同于debug信息)这个信息可以在导出产品时指定

远程调试是基于行号信息的。简单的理解就是在jvm运行.class的某一行时,将信息发送给开启远程调试的Eclipse,然后Eclipse通过该信息找到相关的行
这也就解释了,如果源码和运行的产品不匹配,也是可以远程调试的,只是源码上的提示的位置很可能不对。

问题解决:

问题现在已经很明确了,我本地打版.class携带了行号信息。服务器版本没有携带。

你可能会问我是怎么读的二进制文件?     答案:反编译工具


我用的jd-gui      如果没有行号,左侧的数字就没了。(PS:11行我进行了注释,但注释被过滤了)

对比我将编译的命令改为: javac -g:none TestLineNumber.java     (-g:none   意思是:不生成任何的调试信息)

打开效果如下:

不仅不显示行号,而且注释行的空隙也给占了。   

注:调试信息不只包括行号信息,还有变量信息,源文件信息等   自己搜吧

言归正传,通过简单的javac的命令已经可以控制debug信息了。   RCP产品只是java语言的高级应用。所以找到相关配置区域就可以了。

Eclipse导出产品配置:window->preferences->java->Compiler  复选框:add line number attributes to generated class files   简单明了吧
人家还是默认勾选了  够体贴吧   当然你也可以看看其他的选项 间接在介绍调试信息有哪些

服务器配置:是通过ant来打出产品的,没有可视化。
位置为:build.properties文件中

# Whether or not to include debug info in the output jars  (体贴的注释)
javacDebugInfo=true              <-    这就是开关




0 0
原创粉丝点击