Eclipse中断点调试详解
小编是刚学习Java两个月,在学习视频中看到老师玩断点6到飞起,自己也就各种查资料,实施并总结了一下断点的调试。
找到需要设置断点的位置
你可能会问,我怎么知道在哪设置断点呢?
- 如果你实在不知道在哪设置断点,那你完全可以多设置几个断点,单步调试直到找到异常,这样会多花一点时间,但是却可以更加深入的了解程序的执行过程
- 如果你大致知道哪里出现了错误问题,或者异常信息报告类的位置,那么你就可以在这里设置断点
设置断点
断点大家都比较熟悉,在Eclipse Java 编辑区的行头,双击需要放置断点的程序左边的栏目上。如下图所示:
- 条件断点:顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止
在左边的栏目上,鼠标右键,选择"Breakpoint Properties......"
断点的属性界面以及各个选项的意思,如下图:
- 变量断点:将断点打在变量声明处
下图就是在一个变量上打的断点,在变量值的初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和 上面的介绍的条件断点的设置是一样的
- 方法断点:将断点打在方法的入口处
方法断点的特别之处在于它可以打在 JDK的源码里,由于 JDK 在编译时去掉了调试信息,所以普通断点是不能打到里面 的,但是方法断点却可以,可以通过这种方法查看方法的调用栈
断点调试
打开Debug模式的三种方式:
- 点击"打开透视图"按钮,选择调试透视图,则打开调试透视图界面,然后先设置断点,按调试按钮则可以调试程序
- 或者直接点击调试按钮,那个虫子样子的按钮,然后就会进入调试透视图的界面。前提你需要是要在程序中设置好断点
或者
- 或者右键单击该程序,选择debug as(调试方式) -> java application(Java应用程序),则可以调试程序了。前提你需要是要在程序中设置好断点
调试快捷键
以debug方式运行java程序后
(F5)单步执行程序,遇到方法时进入:按F5就是一层层深入的debug相当于剥葱样,会进入每个方法内部;
(F6)单步执行程序,遇到方法时跳过: 按F6就是在当前函数一步步debug,不理会深层次运作;
(F7)单步执行程序,从当前方法跳出: 按F7就是如果当前进入了某个方法内部,都跳转到该方法的结尾代码处;
(F8)直接执行程序。遇到断点时暂停: 按F8就是如果后面还有断点,则运行到下一断点处,否则运行完程序;
另外在debug时,会有很多有用信息显示在debug框里,如堆栈信息,需要自己实践;在程序界面里,鼠标移到变量上时会有当前变量的属性值。
进入调试界面之前看到的跳转窗口
改变变量的值
在变量窗口中右击变量,在弹出的菜单中选择[change value],弹出修改画面。 改变其值后,按下ok按钮;这时变量的值就改为修改后的值了。
第一步:点击"Change Value...."
第二步:插入值
第三步:修改值
检查代码段执行结果
下面按钮第一个是进入方法执行,比如你调用了其他方法,可以进入方法一步一步执行,如果点击第二个按钮,只会在本方法内一步一步执行,第三个按钮时你跳出此方法,继续执行调用这个方法的原方法,说明如下。
在程序运行的时候,想看看某段程序运行的结果是否正确,或者查看某个变量的值时:
- 选择一句或一段代码,右键单击在弹出的菜单中选择Watch(创建查看表达式)项,此时,代码的执行结果将显示在Expressions(表达式)窗口中。
- 选择一句或一段代码,右键单击在弹出的菜单中选择Inspect(检查)项,可以直接显示表达式的值
在eclipse程序中设置的断点上有一个斜杠,正常启动debug不能够跳转到debug页面,怎么解决?
在run菜单里面,把"skip all breakpoints"选项勾去即可,这个选项可能是你无意间选上的。
远程调试
远程调试分为两种方式:【使用远程调试的前提是服务器和客户端的代码是一致的】
- 本机作为客户端
- 本机作为服务端
属性解释:
- -Xdebug:启用调试特性。
- -Xrunjdwp:<sub-options>:在目标 VM 中加载 JDWP 实现。它通过传输和 JDWP 协议与独立的调试器应用程序通信。下面介绍一些特定的子选项。【从 Java V5 开始,您可以使用 -agentlib:jdwp 选项,而不是 -Xdebug 和 -Xrunjdwp。但如果连接到 V5 以前的 VM,只能选择 -Xdebug 和 -Xrunjdwp。下面简单描述 -Xrunjdwp 子选项。】
- transport:这里通常使用套接字传输。但是在 Windows 平台上也可以使用共享内存传输。
- server:如果值为 y,目标应用程序监听将要连接的调试器应用程序。否则,它将连接到特定地址上的调试器应用程序。
- address:这是连接的传输地址。如果服务器为 n,将尝试连接到该地址上的调试器应用程序。否则,将在这个端口监听连接。
- suspend:如果值为 y,目标 VM 将暂停,直到调试器应用程序进行连接。
示例1:显示如何在调试模式下启动 VM 并监听端口 8765 的套接字连接?
作为调试服务器的目标 VM:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8765
示例2: 显示如何使用位于 8000 端口的主机 127.0.0.1 上的套接字连接运行中的调试器应用程序?
作为调试客户机的目标 VM:
-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000
设置断点
在你认为可能出现问题的地方设置断点。
本机作为客户端
本机作客户端比较常用,需要在远端的服务器上的java程序在启动时打开远程调试开关。
服务器端需要加上虚拟机参数
1.5以前版本(1.5以后也可用):【-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 】
1.5及以上版本:【 -agentlib:jdwp=transport=dt_socket,server=y,address=8000】
F:\Study\eclipsepro\screensnap>java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000 -jar screensnap3.jar
连接时远程服务器时,需要在Eclipse中新建一个远程调试程序
这里有一个小地方需注意,连接上的时候貌似不能自动切换到Debug视图,不要以为本机的调试程序没有连接到服务器端。
本机作为服务端
同本机作为客户端相比,只需要修改一下“Connection Type”
这时Eclipse会进入到等待连接的状态
连接程序使用如下参数即可连接本机服务器,IP地址请用实现IP替换~~
【-agentlib:jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:8000】
F:\Study\eclipsepro\screensnap>java -agentlib:jdwp=transport=dt_socket,suspend=y,address=127.0.0.1:8000 -jar screensnap3.jar
远程调试时本地的代码修改可同步到远程,但不会写到远程的文件里,也就是说本地修改会在下次启动远程程序时就没有了,不会影响到下次使用时的远程代码。
Eclipse中断点调试详解相关推荐
- Eclipse Debug调试详解
目录 一.debug透视图: 1.进入方式:右上角点击添加框,选择"臭虫",再点击小虫. 2.debug调试下的一些常用一些透视图,如果没有自行添加,windows---> ...
- eclipse调试详解
eclipse调试详解 作者: 高州人家 来源: 网络转载 浏览: 1610 次 好评: 0分 [ 小 中 大 ] 2007-11-16 本地调试 Java 调试器具有客户机/服务器设计, ...
- Linux Bash命令关于程序调试详解
转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...
- PyCharm中Debug模式进行调试详解
参考博文: Pycharm Debug调试(纯干货)_小麦粒的博客-CSDN博客 pycharm下debug详解_诺一呦-的博客-CSDN博客_pycharm的debug怎么用 Pycharm Deb ...
- 【Android】 Android中Log调试详解
LOG类: public final class Log extends Object java.lang.Object android.util.Log Constants int ASSERT ...
- Eclipse 配置SSH 详解
最近看了很多招聘,其中很多我想去的公司都需要一些技能,其中熟练 Java SSH 等为必须技能. 因此,我就希望来探讨下SSH的深浅,当中也希望通过更了解它,以后能在SSH的对话中能有一丝丝见解. 下 ...
- 某个JAVA类断点无效_解决eclipse中断点调试不起作用的问题
最近几天,遇到了一个问题,就是在eclipse中进行断点调试程序到时候,跟踪不到我设置的断点.困惑了很久,在网上也查阅了很多资料,都没能解决我的问题.今天早上,我试着把eclipse的工作空间重新换了 ...
- VS2017远程调试详解(内网、外网)
远程调试可分为:附加到进程与远程Windows调试器两种方式 两种方式区别可简单理解为: (1)附加到进程:需将本地编译完成后的exe与相关dll拷贝至目标电脑:此方式前提被调试软件可正常打开 (2) ...
- Java本地远程服务器debug调试详解
日常我们debug是经常用的,但是本地还好说,远程debug就有点难度,而且有时候必须要在预演,测试环境的服务器去debug,举个例子,需要https,公网,域名之类的,测试服务器这些有些是配置的,但 ...
最新文章
- Mopaas 初体验
- 肿瘤相关甲基化预后分析数据库SurvivalMeth详细使用指南
- MyBatis 事务源码分析
- Rust 编程 前言
- CVE-2020-1472 域内提权利用(域提权)
- 开源 | CVPR 2021无需向量监督的矢量图生成算法
- Bootstrap3 栅格系统之列平移
- 11.11开启10分钟 达达承接的京东小时购首单已签收
- .html()与.text()区别与辨析
- 原生js和jquery常用的DOM操作
- Python 开发学习路线
- 设计模式-04-行为型模式详解
- Ruby 常用的正则表达式1
- MySQL中leftjoin和rightjoin的区别
- 计算机信息安全工程师教材,第三级 安全标记保护级-信息安全工程师教材
- 盘点 GitHub 年度盛会|附视频
- 我们不应该歧视任何的编程语言,因为他们都是萌娘
- Windows热键注册原理
- windos 启动redis服务端与客户端
- git log 详解
热门文章
- 理解Promise机制
- 解析:图像技术在直播中怎么用?聊一聊美女主播背后的美颜技术
- 【JAVA-WEB】HTML
- 中式红木整装,打造专属红木工艺的中式高定空间
- 如何使用Kali破解WIFI密码蹭网?
- 编程进阶之路,虽无捷径但有长短
- 本地白嫖AI绘画 ,Stable Diffusion 初探!
- oracle select @@identity,SQL区别@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT
- 使用SQL2008建立数据库,并在网页上实现对数据库的访问
- 第三周项目-委派任务