Eclipse中断点调试详解

2023-10-30

小编是刚学习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

远程调试时本地的代码修改可同步到远程,但不会写到远程的文件里,也就是说本地修改会在下次启动远程程序时就没有了,不会影响到下次使用时的远程代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Eclipse中断点调试详解 的相关文章

随机推荐

  • case class

    case class scala里的case class和普通class有几点不同 1 初始化的时候可以不用new 当然你也可以加上 普通类一定需要加new 2 toString的实现更漂亮 3 默认实现了equals 和hashCode
  • BUUCTF-Crypto--一眼就解密 writeup分享

    题目描述 给定密文 ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30 通过解密得出明文 并将结果包上flag 提交 题目求解 我们首先观察密文 类似于章节中的一道题 上面的都是小写的 我们用的是MD5的方法求解
  • 如何使用Eclipse

    1 安装好Eclipse双击进去使用 会先跳出来一个Workspace的工作环境路径选择 自己选好要保存的路径即可保存 如果不小心勾了下面的 设置为默认并不在询问 的窗口 进入Eclipse之后 点击最上方菜单栏 Window Prefer
  • Hyperledger Fabric 入门笔记(五)项目fabric-samples简介

    文章目录 前言 一 特定场景的链码 应用示例 1 1 资产转移asset transfer系列 1 2 拍卖auction系列 1 3 代币token系列 1 4 其它 二 测试网络 三 其它用途 四 过时的内容 五 未知用途 前言 本文对
  • wsl访问Win10中MySQL_在 Windows 10 上安装适用于 Linux 的 Windows 子系统 (WSL)

    适用于 Linux 的 Windows 子系统安装指南 Windows 10 Windows Subsystem for Linux Installation Guide for Windows 10 09 15 2020 本文内容 安装适
  • 腾讯云轻量应用服务器性能测评(全网超详细)

    腾讯云轻量应用服务器性能如何 CPU型号主频 内存 公网带宽和系统盘存储多维对比 轻量应用服务器会不会比云服务器CVM性能差 相对于CVM云服务器轻量服务器更适合轻量级的应用 轻量服务适合中小企或个人开发者用于搭建We网站b应用 小程序 A
  • Base64FileUtils工具类

    package com ruoyi common utils import org apache commons codec binary Base64 import java io public class Base64FileUtils
  • 报错注入的原理分析

    SQL报错注入就是利用数据库的某些机制 人为地制造错误条件 使得查询结果能够出现在错误信息中 这种手段在联合查询受限且能返回错误信息的情况下比较好用 01使用报错注入的前提 页面上没有显示位但是有sql语句执行错误信息输出位 使用mysql
  • android 标题栏,状态栏和导航栏的区别

    http blog csdn net baidu 26352053 article details 53025912 标题栏是手机左上最顶上 显示中国移动 安全卫士 或者当前运行软件的地方 手机的顶部 右边显示信号 电量 网速等等是状态栏
  • linux docker常用命令

    docker ps 显示当前正在运行的容器 docker ps a 显示所有状态的容器 docker images 列出本地镜像 docker port 容器Id 查看容器端口 lsof i 容器端口 检查容器端口是否可用 docker s
  • Prometheus 安装部署监控JMX

    系统环境 系统版本 centos7 Prometheus版本 2 20 1 服务器ip 192 168 0 226 客户端ip 192 168 10 62 一 服务器端系统安装 192 168 0 226 1 将下载好的包文件上传到服务器并
  • 前端学习之原生JS实现attr方法的封装

    HTML代码 img src images 1 jpg alt JS代码 功能 1 参数为2个 设置 2 参数为1个 设置批量属性 获取属性 function attr property value console log property
  • ubuntu18.04配置Swin Transformer环境

    1 安装pytorch pip install torch 1 8 1 i https pypi douban com simple pip install torchvision 0 9 1 i https pypi douban com
  • 电脑打开计算机显示远程过程调用失败,win7系统电脑弹出提示“远程过程调用失败且未执行”的解决方法...

    win7系统使用久了 好多网友反馈说win7系统电脑弹出提示 远程过程调用失败且未执行 的问题 非常不方便 有什么办法可以永久解决win7系统电脑弹出提示 远程过程调用失败且未执行 的问题 面对win7系统电脑弹出提示 远程过程调用失败且未
  • java 原始套接字编程_套接字编程原理

    6 多路复用 select 功能 用来检测一个或多个套接字状态 格式 int PASCAL FAR select int nfds fd set FAR readfds fd set FAR writefds fd set FAR exce
  • android里面layer-list中的inset和clip到底有什么作用

    Inset Drawable 用于通过指定的间距把图片插入到XML中 它在View需要比自身小的背景时常用 有些像padding的作用 例子 第一步 drawable文件中建立inset drawable xml
  • DB与缓存一致性

    一般方案中的设计均有其缺陷 要么会产生脏数据 要么会产生不一致 不同的是代价和概率 更新数据时 是先删除缓存再更新DB 还是先更新DB再删除缓存 https blog csdn net qq 33999844 article details
  • unity 如何获取到屏幕中间_Unity UGUI获取鼠标在屏幕的准确点击位置

    想要获取鼠标在屏幕的准确点击位置 千万不要胡乱写 什么转化坐标系 什么Ray射线检测都是浮云 1 转化坐标系只是相对而言 并不能准确实现当前鼠标点击在屏幕的位置 2 Ray检测 hit是需要碰撞的 没碰撞 获取的是什么 0 0 0 所以 请
  • css的选择器

    一 基本标签 标签选择器 格式 标签名 h1 文本内容 h1 类名选择器 格式 类名
  • Eclipse中断点调试详解

    小编是刚学习Java两个月 在学习视频中看到老师玩断点6到飞起 自己也就各种查资料 实施并总结了一下断点的调试 找到需要设置断点的位置 你可能会问 我怎么知道在哪设置断点呢 如果你实在不知道在哪设置断点 那你完全可以多设置几个断点 单步调试