背景

有的时候你想debug调试Java的源代码,就想试图在Java源代码中设置断点,在Eclipse中常常会出现Unable to insert breakpoint Absent Line Number Information错误。导致这个错误的原因是Eclipse默认使用了JRE环境,而事实上只有JDK环境才包含有Debug信息。接下来我们介绍如何为你的项目设置JDK环境,从而让你可以调试Java源代码。
 
解决办法
1. 在Eclipse中,Window->Preferences->Java->Compiler,确保以下选项都勾选上:

2. 在Eclipse中,Window->Preferences->Java->Installed JREs,选择Add,在JRE Home中选择JDK路径(因为只有JDK支持源码调试),并且给它合适的命名。退出保存后,选择JDK路径。

3. 右键你的工程项目,Properties,Java Build Path->Libraries,找到JRE System Library,选择Edit。使用Alternate JRE中你创建的JDK。


4. 应该就大功告成了 。
 
如何debug断点可以查看jdk源码的变量?
  这时候虽然可以debug打断点可以进入源码,但是这时候源码的变量值是没法看到的,为什么呢?因为在JDK中,sun对rt.jar中的类编译时,去除了调试信息。那么是否有解决办法呢?答案是肯定的。

解决方案
1.在你的D:盘新建jdk文件夹,然后在文件夹里面分别创建两个文件夹jdk_src(存放源码)和jdk_debug(存放编译结果文件)。

2.从%JAVA_HOME%路径下找到src.zip源码源码压缩包,解压至D:/jdk/jdk_src目录中,并只保留java,javax,org三个文件夹。

3.从%JAVA_HOME%\jre\lib找到rt.jar,将它拷贝到D:/jdk文件夹。

4.打开DOS命令窗口,用命令cd命令进入D:/jdk文件夹,然后执行命令  dir /B /S /X .\jdk_src\*.java > .\filelist.txt     完成后会在D:/jdk目录生成filelist.txt文件,里面为待编译的文件路径*/*.java。

5.执行命令   javac -J-Xms16m -J-Xmx1024m -sourcepath .\jdk_src -cp .\rt.jar -d .\jdk_debug -g @.\filelist.txt >> .\log.txt 2>&1   会编译filelist.txt文件中列出的*.java源文件,编译的*.class文件会放入D:/jdk/jdk_debug文件夹,同时编译过程中会在D:/jdk生成log.txt文件。

6.执行cd命令切换到D:/jdk/jdk_debug,然后执行  jar cf0 rt_debug.jar *     将*.class文件打成jar,打包完成后会在D:/jdk/jdk_debug目录中生成rt_debug.jar。

7.把这个生成的rt_debug.jar包复制到%JDK_HOME%\jre\lib\endorsed下。如果没有endorsed目录,自己创建一下。

8.在eclipse里面找到Window->Installed JRES,选择jdk,点击Edit,然后点击Add External jars,选择刚才创建的rt_debug.jar导入,然后把rt_debug.jar移动到rt.jar的前面,最后选中rt_debug.jar,点击Source Attachment选择%JAVA_HOME%/jdk/src.zip添加源文件,并把rt.jar的源文件删除(不用删除,本人测试不删除可以成功),最最后,重启eclipse。

其实这里把rt.jar的源文件可以保留,不用删除,本人保留rt.jar的源文件测试后没问题

如何在Eclipse中Debug调试Java代码的更多相关文章

  1. Eclipse中debug调试java代码一直报Source not found的解决办法

    今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...

  2. Eclipse 中 Debug 调试 java 代码一直报 Source not found

    今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...

  3. 远程debug调试java代码

    远程debug调试java代码 日常环境和预发环境遇到问题时,可以用远程调试的方法本地打断点,在本地调试.生产环境由于网络隔离和系统稳定性考虑,不能进行远程代码调试. 整体过程是通过修改远程服务JAV ...

  4. Eclipse中更改默认java代码格式【转】

    在写代码时常常有2种代码样式习惯,如下图.由于一直习惯了第一种代码格式,而看第二种代码格式时感觉代码很乱,总找不到“{ }”对称的感觉.Eclipse自动格式化代码的快捷方式是Ctrl+Shift+F ...

  5. 沉淀再出发:如何在eclipse中查看java的核心代码

    沉淀再出发:如何在eclipse中查看java的核心代码 一.前言   很多时候我们在eclipse中按F3键打算查看某一个系统类的定义的时候,总是弹出找不到类这样的界面,这里我们把核心对应的代码加进 ...

  6. Eclipse远程调试Java代码的三种方法

    Eclipse远程调试Java代码的三种方法, 第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试, 第2种方法可以调试Java程序启动过程,但是Ecli ...

  7. java如何在eclipse编译时自动生成代码

    用eclipse写java代码,自动编译时,如何能够触发一个动作,这个动作是生成本项目的代码,并且编译完成后,自动生成的代码也编译好了, java编辑器中就可以做到对新生成的代码的自动提示? 不生成代 ...

  8. 调试Java代码(Eclipse)汇总

    Java 10个调试技巧(基础❤❤❤❤❤) Eclipse断点调试(和上一篇基本类似,补充❤❤) 使用Eclipse开发和调试java程序(从安装eclipse开始,特别细,有设置条件断点,回退的具体 ...

  9. [安卓][转]Android eclipse中程序调试

    一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...

随机推荐

  1. 使用DataSet與DataAdapter對數據庫進行操作

    1.定義連接字符串 var source = "server=(local); integrated security=SSPI; database=test"; var conn ...

  2. C#实现窗体全屏

    方法一:设置窗体属性 //程序启动路径,与生成程序的exe文件在同一目录下 public String exePath = Application.StartupPath; //定义窗体宽高 ; ; ...

  3. Php导出百万数据的优化

    导出数据量很大的情况下,生成excel的内存需求非常庞大,服务器吃不消,这个时候考虑生成csv来解决问题,cvs读写性能比excel高.测试表student 数据(大家可以脚本插入300多万测数据.这 ...

  4. EditPlus提示错误:找不到或无法加载主类

    问题:EditPlus提示错误:找不到或无法加载主类. 原因:换了另外一台电脑,忘了什么时候,环境变量被误删了. 解决问题: 1.检查文件名和public修饰的类名是否一致. 2.文件查看时,有没有隐 ...

  5. C# 消息队列-Microsoft Azure service bus 服务总线

    先决条件 Visual Studio 2015或更高版本.本教程中的示例使用Visual Studio 2015. Azure订阅. 注意 要完成本教程,您需要一个Azure帐户.您可以激活MSDN订 ...

  6. 折腾Java设计模式之命令模式

    博客原文地址 折腾Java设计模式之命令模式 命令模式 wiki上的描述 Encapsulate a request as an object, thereby allowing for the pa ...

  7. 作为开发人员,这四类Code Review方法你都知道吗?

    本文翻译自:https://dzone.com/articles/4-types-of-code-reviews-any-professional-developer 转载请注明出处:葡萄城官网,葡萄 ...

  8. getDimension与getDimensionPixelOffset与getDimensionPixelSize的区别

    getDimension()                       返回float型px值     精确  getDimensionPixelOffset()     返回int型px值     ...

  9. Android 解析标准的点击第三方文件管理器中的视频的intent

    解析标准的第三方视频intent private List<String> mCurPlayList = new ArrayList<String>(); private in ...

  10. AndroidTV端的requestFocus()问题

    每次开机盒子或者电视的时候,发现给某些控件设置请求焦点 requestFocus 会失效 最终的解决办法就是延时请求 view.postDelayed(new Runnable() { @Overri ...