elipse 调试jdk时候变量不现实值以及解决办法

今天以前的同事问我这个问题,我也不知道为什么。

问题是:当DEBUG自己程序的时候,调用了第三方的类库——比如JDK自己的类库——我们有这些类库的源码,进入随源码进入类库后,你会发现代码运行的行会在调试下一步步走,但鼠标指向变量时不再显示变量的值,选中->右键->watch也不能看到变量的值,什么原因?

我以前经常遇到这些问题,但从来没想过为什么不行,以为不是自己的类库就不显示,实际情况并非如此。

于是同事查了一下原因,发给了我,我就直接贴在这儿了。

Debug into rt.jar

August 4th, 2007

If you ever use Eclipse trying to debug into Java’s system APIs, such as java.lang.String or java.math.BigInteger, you may find that even you can step over or step in, or have the correct source file open and the correct line of codes highlighted, you still
could not see the local variables’ value and method’s parameters are shown in pattern of “arg0″, “arg1″ and so on.

Yes, you are already using JDK instead of JRE. But you still have the above problem. What’s wrong? It’s not a bug of Eclipse. It is all about the rt.jar along with the JDK (1.5 or 1.6). In Sun’s official JDK release, debug symbols are already packed into the
rt.jar. But local variables’ debug information is not packed. Sun may consider that it is not OK to includes those local variables’ debugging information. That is the source of problem.

To solve this problem, you may need to upgrade to JDK 1.6. Download DEBUG jar file from

http://download.java.net/jdk6/binaries/

Double click it to install a new JDK. And configure your Eclipse to use the new JDK.

For JDK 1.5, recompiling rt.jar by yourself, or other information, please visit

http://forums.java.net/jive/thread.jspa?threadID=399&tstart=0

for a detailed discussion.

这段描述只是针对rt.jar的:上面大概的意思是当rt.jar类库发布时,它们把调试标记打在了JAR包中,但局部变量的DEBUG信息并未打包。他们可能是出于“本地变量的调试信息包含在JAR包中并不好”的考虑,所以没有这么做,这就是问题的根源。

如果你想解决类似问题,你需要专门下载安装带这类信息的JDK......就是重装了JDK啦。

我觉得既然人家发布了,按一般的逻辑就认为它不会有BUG,如果你用了第三方类库,就认为你对它内部的运行方式已经了解,所以你不需要查找别人JAR包的BUG。如果真有BUG并且正好被你运行到了,那你就中奖喽。

----------------------------------------------------高兴的分界线--------------------------------------------------

1.把jdk中的src.zip解压缩

2.在elipse建立新的java项目

这时候会报很多错,不用鸟它就行。

3.将项目导出为jar格式

4.将新导出的jar包加入到Installed JRES

5.这个时候再调试就会有值了

时间: 2024-10-10 07:15:08

elipse 调试jdk时候变量不现实值以及解决办法的相关文章

vs调试时底部输出调试信息“无法查找或打开 PDB 文件”解决办法

用VS调试程序时,有时会在VS底部的“输出”框中提示“无法查找或打开 PDB 文件”.这该怎么解决呢? 下面,我们以VS2013为例,来教大家解决办法. 工具/原料 VS 方法/步骤 打开VS2013,点击菜单“工具”-“选项”.   在选项窗口中,展开“调试”-“常规”,然后在右边的窗格中勾选“启用源服务器支持”.   然后展开“调试”-“符号”,勾选“Windows符号服务器”.   这时,会弹出一个警告对话框,无视点击“确定”即可.   最后,点击“确定”关闭选项窗口.   下面,我们再来

调试wcf服务端口号自动变化的解决办法

调试调用wcf服务时报错,更新wcf服务时会发现端口号自动变了,比方说现在的端口号是54861: http://localhost:54861/XLTWCFService.svc 端口号会变成其他数字,于是就会报错.原因是WCFservice项目被设置成了自动分配端口号,解决办法如下: 右键WCFservice项目,选择属性(Properties) 进去后在web项下面找到Service,把Auto-assign Port(自动分配站点)切换成specific port,端口号记下来,这里为54

Linux x64 下 Matlab R2013a 300 kb 脚本文件调试的 CPU 占用过高问题的解决办法

(1) 系统+软件版本 CentOS 6.5 (Final), 64 位,内核initramfs-2.6.32-431.5.1.el6.x86_64, MATLAB Version: 8.1.0.604 (R2013a)     Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode (2) 问题描述 通常在这个环境下,小文件的代码都可以调试通过. 最近,把所有函数集合到一

关于“ORA-01483: DATE 或 NUMBER 绑定变量的长度无效”的解决办法(C#版)

昨天在给一个在线系统写一个新功能.写完放上去之后,发现原来的数据库访问层存在一个小bugger,决定将这个dll更新到最新使用版本,由于新版本dll使用的不是再是Oracle.DataAccess.dll,而是Oracle.ManagedDataAccess.dll了,所以也就将这个dll也一并更新了.更新上去发现一切正常.所以就没再去管了. 结果到了下午,问题来了.很多用户反应保存某业务的数据有问题.一保存就报 "ORA-01483: DATE 或 NUMBER 绑定变量的长度无效"

最新版STS因为JDK版本太低无法启动的解决办法

-startup plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.400.v20160518-1444 -product org.springsource.sts.ide --launcher.defaultAction openFile -vm C:/Java/jd

windbg+vm双机调试 waiting to reconnect 无法连接问题,解决办法

其它设置按网上教程不会有什么问题,可能存在的问题的地方有两处 1.multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=com1 /baudrate=115200 其中的com1处应根据虚拟机分配的com口来设置,我试的几台电脑,默认都是COM2,如下图,显示为串行端口2,就应输入COM2 2.有些虚拟机中com2应改为com

华为手机在开发Android调试时logcat不显示输出信息的解决办法

手机连接电脑RUN AS logcat 提示:Unable to open log device '/dev/log/main': No such file or directory 信息 本人华为C8812手机,获得ROOT权限(http://dl.vmall.com/c032h3j6dv 下载归一版,然后执行安装,按照提示操作即可) 华为C8812手机,获得root权限后 手机拨号*#*#2846579#*#*,进入projectmenu--后台设置--LOG设置--LOG开关--打开: 然

问题:webservice浏览后 无法输入参数;结果:调试Web Service时不能输入参数的解决办法

使用.NET 开发Web Service,有一个很方便的功能就是可以通过IE直接测试Web Service.当你的Web Service的参数都是元数据类型,那么只要你使用IE浏览Web Service就可以页面的输入框中输入必需的参数,点击调用,即可完成Web Service的测试调用.方便! 但是,在有些情况下,虽然我们开发的Web Service都使用元数据类型的参数,为什么死活都无法直接调用测试呢?点击方法链接也只是出现SOAP消息的格式定义?原来这个问题一直都没有解 决,google一

关于jdk配置正确但是tomcat服务器启动时一闪而过的解决办法

首先JDK配置没有问题,在控制台窗口下键入java或javac命令没有错误,然后排出tomcat服务器也没有放在有中文的文件夹下.但是tomcat服务无启动时候只是一闪而过.在命令行窗口下键入startup.bat时提示如下图: 提示JRE_HOME环境变量没有正确配置.解决办法在系统环境变量中加入jre_home环境变量,如下图:首先新建环境变量.变量名:jre_home,变量值:“jre所在路径” 然后再path变量中添加进刚刚新建的jre_home变量如下图: 好了再次启动tomcat启动