Eclipse调试方法

http://blog.jobbole.com/93421/

一、Eclipse调试介绍

二、Eclipse中和Debug相关的视图

  • 2.1 Debug View
  • 2.2 Variables View
  • 2.3 Breakpoints View
  • 2.4 Expressions View
  • 2.5 Display View

三、Debug

3.1 设置断点

3.2 调试程序

3.2.1 调试本地 Java 语言程序

3.3.2 远程调试

一、Eclipse调试介绍

使用过Eclipse的人都知道,Eclipse都是自带Java调试器的,可以提供很多基本的调试功能。 Eclipse 平台工作台及其工具是围绕 JDT 组件构建的,该组件为 Eclipse 提供了下列特性:

项目管理工具 透视图和视图 构造器、编辑器、搜索和构建功能 调试器

二、Eclipse中和Debug相关的视图

图 1. Eclipse Debug 透视图的一般视图(该视图可以在Eclipse界面的右上角位置点击Debug按钮进入)

DebugView


Debug View:

debug

Debug视图允许您在工作台上管理正在调试和运行的程序,他显示了你正在调试的程序中挂起的线程的堆栈帧,程序中的每个线程作为树的节点出现。他展示了正在运行的每个目标的进程。如果线程被挂起,它的堆栈帧以子元素的形式展示。以下是一些常用的debug按钮:

skip_brkp

Skip All Breakpoints::将所有断点设置为被跳过的,设置了Skip All Breakpoints之后,所有断点上都会有一个斜线,表示断点将被跳过,线程不会在该断点处被挂起。

drop_to_frame

Drop to Frame:这个命令可以让程序回到当前方法的开头第一行重新开始执行,可以重新执行这个java堆栈帧,可以选择一个指定的堆栈帧,然后点击 Drop to Frame,这样就可以重新进入指定的堆栈帧。使用Drop to Frame时候需要注意:

1.不能drop到已经执行过的方法栈中的方法中。

2.drop到stack frame中时,不会改变全局数据原有的值,比如,一个包含元素的vertor并不会被清空。

stepbystep_co

Step Filters:这个功能比较简单,就是当我们在debug的时候想要忽略一些我们不关注的类时,可以开启Step Filters进行过滤,程序会一直执行直到遇到未经过滤的位置或断点。Step Filters功能由Use Step FiltersEdit Step FiltersFilter TypeFilter Package四项组成。具体操作如下:

步骤 1: Windows -> Preferences -> Java -> Debug -> Step Filtering.

步骤 2:选择‘Use Step Filters’.

步骤 3:在屏幕上选中所需的选项。你可以添加你自己代码库中的部分代码。

步骤 4:点击‘Apply’.

原理上,Edit Step Filter命令用于配置Step Filter规则,而Filter TypeFilter Package分别指的是过滤的Java类型与Java Package。

stepreturn_co

Step Return:跳出当前方法,在被调用方法的执行过程中,使用Step Return会在执行完当前方法的全部代码后跳出该方法返回到调用该方法的方法中。

stepover_co

Step Over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完在停止,也就是把子函数整个作为一步。

stepinto_co

Step Into:单步执行,遇到子函数就进入并且继续单步执行

resume_co

Resume:恢复暂停的线程,直接从当前位置跳到下一个断点位置。

suspend_co

Suspend:暂停选定的线程,这个时候可以进行浏览或者修改代码,检查数据等。

Eclipse通过Suspend与Resume来支持线程的暂挂与恢复。一般来讲,Suspend适用于多线程程序的调试,当需要查看某一个线程的堆栈帧及变量值时,我们可以通过Suspend命令将该线程暂挂。Resume用于恢复。有两种Resume需要注意:第一是当在调试过程中修改程序代码,然后保存,点击Resume,此时程序会暂挂于断点。第二是当程序抛出异常时,运行Resume,程序也会暂挂于断点。

terminate_co

Terminate:Eclipse通过Terminate命令终止对本地程序的调试。

disconnect_co

Disconnect:Eclipse使用Disconnect命令来终止与远程JVM的socket连接。


Variables View :

velue

Variables View显示与Debug View中选定的堆栈帧相关的变量信息,调试Java程序时,变量可以选择将更详细的信息显示在详细信息窗格中。此外,Java对象还可以显示出其包含的属性的值。在该窗口中选中变量鼠标右键点击可以进行许多操作,主要操作有以下这些:

All Instances:打开一个对话框来显示该java类的所有实例,使用该功能需要java虚拟机支持实例的检索。

All References::打开一个对话框来显示所有引用了该变量的java对象,

Change Value::更改变量的值,该功能可以和Drop to Frame联合使用进行程序的调试。使用这两个功能就可以代替重新debug

Copy Variables:复制变量的值,尤其在变量值很长(比如json数据)的时候,这个功能就派上用场了。

Find:有的时候一个类中变量特别多的时候,可以进行查找。


Breakpoints View :

break

Breakpoints View将列出你在当前工作区间里设置的所有断点,双击断点可以进入到程序中该断点的位置。还可以启用或禁用断点,删除,添加新的,根据工作组或点命中计数给他们分组。在使用断点是有以下两个技巧是十分有用的:

Hit Count: 是指定断点处的代码段运行多少次,最典型的就是循环,如果要让一个循环执行10次就线程挂起,则指定Hit Count值为10,那么当前的循环执行到第九次的时候就会挂掉。

Conditional:顾名思义,就是条件判断,例如我们需要循环变量i==10时,线程挂起,则条件设定为i==10,选择Suspend when “true”。

那如果上面的Hit Count和Conditional都选择的话,如果表达式和值设置不合理则会失效。如果选择Suspend when value changes,那么可能在Conditional在变量值发生改变的时候就挂起。

Expressions View :

express

要在 Debug 透视图的编辑器中求表达式的值,选中设置有断点的一整行,并在上下文菜单中选择 Inspect 选项。表达式是在当前堆栈帧的上下文中求值的,其结果显示在 Display 窗口的 Expressions 视图中。 比如我想要计算变量a+b的值,那么就可以在表达式视图中加一个表达式:a+b


Display View :

disp

可以使用这个视图,输入或者演算一些新的代码。这些代码在当前的调试位置的上下文环境中被执行,这意味着,你可以使用所有变量甚至是内容助手。要执行你的代码的话,只需标记它,并使用右键菜单或者CTRL+U(执行)或者 CTRL+SHIFT+I (检查).

三、Debug

设置断点

在源代码文件中,在想要设置断点的代码行的前面的标记行处,双击鼠标左键就可以设置断点,在相同位置再次双击即可取消断点。有的时候我们还有这样的需要,就是我并不想一行一行的执行代码,比如一个for循环会循环1000多遍,我只想在第500遍的时候让线程挂起进行调试,这个时候我们可以使用条件断点。 设置条件断点:我们可以给该断点设置触发条件,一旦满足某条件是才开始调试,可以在断点处点击鼠标右键,选择Breakpoint Properties进入断点设置页面,刚刚在讲断点视图的时候我们学到过Hit CountConditional的用法,这里可以设置条件和执行次数。

调试程序

1、调试本地 Java 语言程序

在所有调试中,调试一个Java程序是最简单的,主要有设置断点启动调试单步执行结束调试几步。

设置断点:前面已经说过。

启动调试:Eclipse提供四种方式来启动程序(Launch)的调试,分别是通过菜单(Run –> Debug)、图标(“绿色臭虫”)、右键->Debug As以及快捷键(F11),在这一点上,与其他命令(例如Run)类似。

单步执行:主要使用前面讲过的几个视图进行调试,其中debug视图中的几个按钮有快捷键:

Step Retuen(F7)

Step Over (F6)

Step Into (F5)

结束调试:通过Terminate命令终止对本地程序的调试。

2、远程调试

远程调试主要用于调试非本地Java程序,这里的非本地并不是只在其他人的机器上才叫非本地。运行在本机上的Web服务器上的程序在调试时也需要使用远程调试。远程调试的大致步骤和调试本地Java语言程序基本一直,只是在设置上有些不同。

Eclipse 调试器可以调试远程应用程序。它可以连接到一个运行 Java 应用程序的远程 VM,将自己连接到该应用程序上去。使用远程调试会话与使用本地调试会话大致相同。但是,远程调试配置需要在 Run > Debug 窗口中配置一些不同的设置。需要在左侧视图中先选择 Remote Java Application 选项,然后单击 New。这样就创建了一个新的远程启动配置,会显示出三个选项卡:ConnectSource 和 Common

QQ截图20150314215010

 

在 Connect 选项卡的 Project 字段,选择在启动搜索源代码时要引用的项目。在 Connect 选项卡的 Host 字段,输入运行 Java 程序的远程主机的 IP 地址或域名。在 Connect 选项卡的 Port 字段,输入远程 VM 接收连接的端口。通常,该端口在启动远程 VM 时指定。如果想让调试器决定在远程会话中 Terminate 命令是否可用,可以选择 Allow termination of remote VM 选项。如果希望可以终止连接的 VM,则选择该选项。现在,在选择 Debug 选项时,调试器会尝试连接到指定地址或端口的远程 VM,结果会在 Debug 视图中显示出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聊聊 Docker Swarm 部署 gRPC 服务的坑

gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,也是目前流行的微服务架构中比较突出的跨语言 RPC 框架。一直以来,我们的微服务都是基于 gRPC 来开发,使用的语言有 .NET、JAVA、Node.js,整体还比较…

动手造轮子:实现一个简单的依赖注入(零)

动手造轮子:实现一个简单的依赖注入(零)Intro依赖注入为我们写程序带来了诸多好处,在微软的 .net core 出来的同时也发布了微软开发的依赖注入框架 Microsoft.Extensions.DependencyInjection,大改传统 asp.net 的开发模式,asp.ne…

【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(2)

上一章《回忆一下我们的登录逻辑,主要有以下4点:当"用户名"或"密码"为空时, 是不允许登录的("登录"按钮处于禁用状态).用户名或密码不正确时, 显示"用户名或密码不正确"的消息框.用户名输入"waku", 并且密码输入"123&q…

gRPC 流式调用

gRPC 使用 Protocol buffers 作为接口定义语言(IDL)来描述服务接口和输入输出消息的结构,目前支持 4 种定义服务方法类型:类型说明简单 RPC客户端传入一个请求对象,服务端返回一个结果对象客户端流式 RPC客户端传入多个…

模型压缩案例-SSDYou only look once

http://write.blog.csdn.NET/postedit 在上一篇文章中,介绍了以regionproposal来检测的框架,这一系列速度和精度不断提高,但是还是无法达到实时。存在的主要问题为:速度不够快,主要原因是proposal比较多,特…

.NET如何将字符串分隔为字符

前言如果这是一道面试题,答案也许非常简单:.ToCharArray(),这基本正确……我们以“AB吉??????”作为输入参数,首先如果按照“正常”处理的思路,用 .ToCharArray(),然后转换为 JSON(以便方…

Orleans 知多少 | 3. Hello Orleans

1. 引言是的,Orleans v3.0.0 已经发布了,并已经完全支持 .NET Core 3.0。所以,Orleans 系列是时候继续了,抱歉,让大家久等了。万丈高楼平地起,这一节我们就先来了解下Orleans的基本使用。2. 模板项目讲解在…

.NET Core 3.0之深入源码理解ObjectPool(二)

写在前面前文主要介绍了ObjectPool的一些理论基础,本文主要从源码角度理解Microsoft.Extensions.ObjectPool是如何实现的。下图为其三大核心组件图:核心组件ObjectPoolObjectPool是一个泛型抽象类,里面只有两个抽象方法,Get和Retu…

VC维学习

http://www.flickering.cn/machine_learning/2015/04/vc维的来龙去脉/ 说说历史Hoeffding不等式Connection to Learning学习可行的两个核心条件Effective Number of HypothesesGrowth FunctionBreak Point与ShatterVC BoundVC dimension深度学习与VC维小结参考文献 VC维在机器学…

.NET Core 3.0 一个 jwt 的轻量角色/用户、单个API控制的授权认证库

作者:痴者工良(朋友合作原创)来源:https://www.cnblogs.com/whuanle/p/11743406.html目录说明一、定义角色、API、用户二、添加自定义事件三、注入授权服务和中间件三、如何设置API的授权四、添加登录颁发 Token五、部分说明六、验…

.NET Core 3.0 构建和部署

Default Executables 默认可执行文件 在 dotnet build 或 dotnet publish 期间,将创建一个与你使用的 SDK 的环境和平台相匹配的可执行文件。 和其他本机可执行文件一样,可以使用这些可执行文件执行相同操作,例如: 可以双击可执行…

为什么我会了SOA,你们还要逼我学微服务?

菜菜哥,我最近需要做一个项目,老大让我用微服务的方式来做那挺好呀,微服务现在的确很流行我以前在别的公司都是以SOA的方式,SOA也是面向服务的方式呀的确,微服务和SOA有相同之处面向服务的架构(SOA&#xf…

面对万物互联的智能世界,你是否也想分一杯羹

第六届世界互联网大会于10月20日至22日在浙江乌镇顺利举行。作为世界互联网大会“13”架构的重要组成部分,“互联网之光”博览会以“智能互联网、开放合作——携手共建网络空间命运共同体”为主题,集中展示了全球范围内的互联网新技术、新成果、新产品、…

你必须知道的容器监控 (2) cAdvisor

# 实验环境:阿里云ECS主机(两台),CentOS 7.401—cAdvisor简介为了解决容器的监控问题,Google开发了一款容器监控工具cAdvisor(Container Advisor),它为容器用户提供了对其运行容器的…

代码阅读

http://alanse7en.github.io/caffedai-ma-jie-xi-4/ 三. 从一个比较宏观的层面上去了解caffe怎么去完成一些初始化的工作和使用Solver的接口函数,本文将主要分为四部分的内容: Google Flags的使用Register Brew Function的宏的定义和使用train()函数的…

动手造轮子:实现一个简单的依赖注入(一)

动手造轮子:实现一个简单的依赖注入(一)Intro在上一篇文章中主要介绍了一下要做的依赖注入的整体设计和大概编程体验,这篇文章要开始写代码了,开始实现自己的依赖注入框架。类图首先来温习一下上次提到的类图服务生命周期服务生命周期定义&am…

Qt 调试Caffe

http://blog.csdn.net/xg123321123/article/details/52817658 1.下载并安装Qt Creator 下载页面,推荐使用4.x版本,比如: Qt Creator 4.1.0 for Linux 64-bit下载的是run包,安装方法: cd到下载目录 chmod x xxx.run …

.NET Core 3.0 本地工具

.NET Core从最早期的版本就开始支持全局工具了。如果仅仅需要在某个项目中或某个文件夹中使用特定的工具,那么.NET Core 3.0就允许您这样做。 使用.NET Core 3.0,您可以在特定的文件夹下安装“本地”工具,它的作用范围仅限于该文件夹及其子文…

Nsight 调试 Caffe

http://blog.csdn.net/u014114990/article/details/47723877 右键属性菜单的General->Code Analysis->Paths and Symbols下进行加入: Includes下加入程序需要用到的头文件的路径: Library Path下添加需要用到库文件的路径: 具体用到的…

张高兴的 .NET Core IoT 入门指南:(五)PWM 信号输出

什么是 PWM在解释 PWM 之前首先来了解一下电路中信号的概念,其中包括模拟信号和数字信号。模拟信号是一种连续的信号,与连续函数类似,在图形上表现为一条不间断的连续曲线。数字信号为只能取有限个数值的信号,比如计算机中的高电平…