elipse远程debug
- 格式:doc
- 大小:120.00 KB
- 文档页数:2
Eclipse 调试器和Debug 视图编者注:Pawel Leszek 最初于 2003 年 5 月撰写了下文,后来由 Chris Aniszczyk 于 2007 年 4 月进行了更新。
Eclipse SDK 是针对 Java™开发工具(Java™ Development Tools,JDT)的项目,它具有一个内置的 Java 调试器,可以提供所有标准的调试功能,包括分步执行、设置断点和值、检查变量和值、挂起和恢复线程的功能。
除此之外,还可以调试远程机器上运行的应用程序。
Eclipse 平台很健壮,因为其他编程语言可以将该平台提供的调试工具用于各自的语言运行时。
正如下文所示,同一个Eclipse Debug 视图也可以用于 C/C++ 编程语言。
Eclipse 平台工作台及其工具是围绕 JDT 组件构建的,该组件为 Eclipse 提供了下列特性:∙项目管理工具∙透视图和视图∙构造器、编辑器、搜索和构建功能∙调试器Eclipse 调试器本身是 Eclipse 内的一个标准插件集。
Eclipse 还有一个特殊的 Debug 视图,用于在工作台中管理程序的调试或运行。
它可以显示每个调试目标中挂起线程的堆栈框架。
程序中的每个线程都显示为树中的一个节点,Debug 视图显示了每个运行目标的进程。
如果某个线程处于挂起状态,其堆栈框架显示为子元素。
在使用 Eclipse 调试器之前,假定您已经安装了合适的 Java SDK/JRE(我推荐使用 Java VM V1.4)和 Eclipse Platform SDK V3.3,而且两者的运行都没问题。
一般来说,先用 Eclipse 示例测试一下调试选项比较好。
如果想开发和调试 C/C++ 项目,还需要获得并安装 C/C++ 开发工具(C/C++ Development Tools,CDT)。
关于 Java SDK/JRE、Eclipse 平台和示例以及 CDT,请参阅参考资源。
Eclipse快捷键:作为一个编程人员来说必须熟悉一些开发软件的快捷键。
这样既提高了工作效率和使自己变轻松还让别人觉得有经验的技术人员。
(1)Ctrl+M切换窗口的大小(2)Ctrl+Q跳到最后一次的编辑处(3)F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip Description。
F3跳到声明或定义的地方。
F5单步调试进入函数内部。
F6单步调试不进入函数内部,如果装了金山词霸2006则要把“取词开关”的快捷键改成其他的。
F7由函数内部返回到调用处。
F8一直执行到下一个断点。
(4)Ctrl+Pg~对于XML文件是切换代码和图示窗口(5)Ctrl+Alt+I看Java文件中变量的相关信息(6)Ctrl+PgUp对于代码窗口是打开“Show List”下拉框,在此下拉框里显示有最近曾打开的文件(7)Ctrl+/ 在代码窗口中是这种//~注释。
Ctrl+Shift+/ 在代码窗口中是这种/*~*/注释,在JSP文件窗口中是<!--~-->。
(8)Alt+Shift+O(或点击工具栏中的Toggle Mark Occurrences按钮) 当点击某个标记时可使本页面中其他地方的此标记黄色凸显,并且窗口的右边框会出现白色的方块,点击此方块会跳到此标记处。
(9)右击窗口的左边框即加断点的地方选Show Line Numbers可以加行号。
(10)Ctrl+I格式化激活的元素Format Active Elements。
Ctrl+Shift+F格式化文件Format Document。
(11)Ctrl+S保存当前文件。
Ctrl+Shift+S保存所有未保存的文件。
(12)Ctrl+Shift+M(先把光标放在需导入包的类名上) 作用是加Import语句。
Ctrl+Shift+O作用是缺少的Import语句被加入,多余的Import语句被删除。
Eclipse远程调试Tomcat1.应用场景通过Java的JPDA远程调试将本地源码与部署服务器连接起来实现调试,其中要注意的是:1)程序源码与服务器上发布的编译过的代码版本保持一致,保证调试定位准确。
2)调试的过程中,部署在应用服务器上的项目是出于DEBUGE模式的。
2. 配置步骤2.1. 配置Tomacat调试模式1) 方式一启动Tomcat远程调试功能的另一种方法:打开apache-tomcat\bin 目录下的catalina.bat 文件,通过设置CATALINA_OPTS参数即可;同时还可以设置Java_home,JVM参数等…set CATALINA_OPTS=-server -Xdebug -Xnoagent piler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000启动jdpa.bat ,JVM会使用socket方式,打开8000端口并挂起,等待客户端接入。
如图:Windows系统: apach/bin/startup.bat开始处中增加如下内容:1.SET CATALINA_OPTS=-server -Xdebug -Xnoagent piler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address =8788Linxu系统: apach/bin/startup.sh开始处中增加如下内容:declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent piler=NONE -Xrunjdwp:transp ort=dt_socket,server=y,suspend=n,address=8788"2.linux打开端口命令的使用方法。
nc -lp 8788 &(打开8788端口)4.查看是否打开8788端口netstat -an | grep 87882) 方式二复制startup.bat 为jpda.bat并做如下配置:set JPDA_TRANSPORT=dt_socket --连接方式set JPDA_ADDRESS=8000 --监听端口set JPDA_SUSPEND=y --是否挂起call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS%2.2. 配置Eclipse远程接入1)打开Eclipse,导入项目源码(与被调试的代码一致)2)打开Debug Configuration选中New—打开debug配置页面Project: 选择被调试的项目Connection Type: 使用SocketAttachHost:tomcat服务器所在IP地址Port:8000(前面配置的监听端口)设置完成后,记得点击Apply按钮。
java debug 参数Java Debug参数在软件开发过程中,调试是一个非常重要的环节。
当程序出现问题时,我们需要通过调试来找出问题所在并进行修复。
Java作为一种广泛使用的编程语言,提供了丰富的调试工具和参数来帮助开发人员进行调试。
本文将介绍一些常用的Java Debug参数,帮助读者更好地理解和使用它们。
一、-Xdebug参数-Xdebug参数用于开启Java的远程调试功能。
在IDE中使用调试功能时,通常需要在程序启动时指定该参数,并指定调试器监听的端口号。
例如,可以使用以下命令行启动程序并开启调试功能:java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address= 5005 Main其中,-Xrunjdwp参数用于指定调试器的相关配置,transport参数指定调试器与程序之间的通信方式,server参数指定调试器是否作为服务器等待调试器连接,suspend参数指定程序启动后是否等待调试器连接,address参数指定调试器监听的端口号。
二、-Xnoagent参数-Xnoagent参数用于关闭Java的默认调试代理。
在某些情况下,我们可能不希望使用Java默认的调试代理,而是使用其他调试工具。
通过指定-Xnoagent参数,可以禁用Java的默认调试代理,从而使用其他调试工具进行调试。
三、-Xrunjdwp参数-Xrunjdwp参数用于指定Java调试代理的相关配置。
通过-Xrunjdwp参数,可以指定调试代理与调试器之间的通信方式、端口号等。
例如,可以使用以下命令行启动程序并开启调试代理:java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address= 5005 Main其中,transport参数指定调试代理与调试器之间的通信方式,server参数指定调试代理是否作为服务器等待调试器连接,suspend参数指定程序启动后是否等待调试器连接,address参数指定调试代理监听的端口号。
java命令--jmap命令使⽤jdk安装后会⾃带⼀些⼩⼯具,jmap命令(Java Memory Map)是其中之⼀。
主要⽤于打印指定Java进程(或核⼼⽂件、远程调试服务器)的共享对象内存映射或堆内存细节。
jmap命令可以获得运⾏中的jvm的堆的快照,从⽽可以离线分析堆,以检查内存泄漏,检查⼀些严重影响性能的⼤对象的创建,检查系统中什么对象最多,各种对象所占内存的⼤⼩等等。
可以使⽤jmap⽣成Heap Dump。
java memory = direct memory(直接内存) + jvm memory(MaxPermSize +Xmx)1)直接内存跟堆直接内存则是⼀块由程序本⾝管理的⼀块内存空间,它的效率要⽐标准内存池要⾼,主要⽤于存放⽹络通信时数据缓冲和磁盘数据交换时的数据缓冲。
DirectMemory容量可以通过 -XX:MaxDirectMemorySize指定,如果不指定,则默认为与Java堆的最⼤值(-Xmx指定)⼀样。
但是,在OSX上的最新版本的 JVM,对直接内存的默认⼤⼩进⾏修订,改为“在不指定直接内存⼤⼩的时默认分配的直接内存⼤⼩为64MB”,可以通过 -XX:MaxMemorySize来显⽰指定直接内存的⼤⼩。
2)堆(Heap)和⾮堆(Non-heap)内存按照官⽅的说法:“Java 虚拟机具有⼀个堆,堆是运⾏时数据区域,所有类实例和数组的内存均从此处分配。
堆是在 Java 虚拟机启动时创建的。
”“在JVM中堆之外的内存称为⾮堆内存(Non-heap memory)”。
可以看出JVM主要管理两种类型的内存:堆和⾮堆。
简单来说堆就是Java代码可及的内存,是留给开发⼈员使⽤的;⾮堆就是JVM留给⾃⼰⽤的,所以⽅法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运⾏时常数池、字段和⽅法数据)以及⽅法和构造⽅法的代码都在⾮堆内存中。
3)栈与堆栈解决程序的运⾏问题,即程序如何执⾏,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪⼉。
Eclipse的Debug调试技巧作为开发⼈员,掌握开发环境下的调试技巧⼗分有必要。
我们在编写java程序的过程中,经常会遇到各种莫名其妙的问题,为了检测程序是哪⾥出现问题,经常需要增加⽇志,看变量的值,这样调试很⿇烦。
假设我每天花费1⼩时在调试我的应⽤程序上的话,那累积起来的话也是很⼤量的时间。
由于这个原因,⽤这些时间来重视并了解所有使我们调试更⽅便的功能。
那能为你省下⼀些时间,也将会使你的⽣活更安逸、轻松。
⾸先我们需要注意三个点:不要使⽤System.out.println作为调试⼯具\使⽤⼀个⽇志分析器来阅读⽇志\启⽤所有组件的详细的⽇志记录级别⼀个关于调试的疯狂声明作为开头。
但它必须是要说的!尝试切分⼀下你那复杂的逻辑成多个独⽴的单元,并编写单元测试来检测你代码的正确性。
我想像如下这样的流程应该是发⽣得⾮常频繁的—-⼀些Debug模式的界⾯,共分为5个区域(1)Debug(调试)区域,显⽰当前正在调试代码是什么,在第多少⾏(2)Variables(变量)区域,显⽰变量的值。
(3)代码编辑区(4)代码结构区,显⽰代码中的各个⽅法。
(5)Console(控制台)区域。
⼀、条件断点我们通常调试断点的时候⼀般就是点击⾏号的左边,这个时候就会有断点被打起来。
在debug视图中,BreakPoint View将所有断点都列出来,但是我们可以添加⼀个boolean类型的条件来决定断点是否被跳过。
如果条件为真,在断点处程序将停⽌,否则断点被跳过,程序继续执⾏。
如果你只对应⽤中的某部分感兴趣的话,这个功能⾮常有⽤。
例如,如果你要在第13次循环的时候检查程序,或者在⼀个抽象⽗类中调试某些功能,⽽你只关注其中⼀个具体的实现。
你可以在断点视图中设置条件,或者通过代码旁边的蓝⾊断点标记的右键菜单(”Breakpoint Properties”)设置。
你可以在条件代码⽚段为true的时候暂停程序,或者当代码⽚段的值改变的时候挂起程序。
Eclipse调试常用技巧1、条件断点断点大家都比较熟悉,在Eclipse Java编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。
条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。
在断点处点击鼠标右键,选择最后一个"Breakpoint Properties"断点的属性界面及各个选项的意思如下图,2、变量断点断点不仅能打在语句上,变量也可以接受断点,上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。
3、方法断点方法断点就是将断点打在方法的入口处,方法断点的特别之处在于它可以打在JDK的源码里,由于JDK在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。
4、改变变量值代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确?在Debug视图的Variables小窗口中,我们可以看到mDestJarName变量的值为"F:\Study\eclipsepro\JarDir\jarHelp.jar"我们可以在变量上右键,选择"Change Value..."在弹出的对话框中修改变量的值,或是在下面的值查看窗口中修改,保用Ctr+S保存后,变量值就会变成修改后的新值了。
5、重新调试这种调试的回退不是万能的,只能在当前线程的栈帧中回退,也就说最多只能退回到当前线程的调用的开始处。
回退时,请在需要回退的线程方法上点右键,选择"Drop to Frame"6、远程调试用于调试不在本机上的程序,有两种方式,1、本机作为客户端2、本机作为服务端使用远程调试的前提是服务器端和客户端的代码是一致的。
Tomcat配置修改Tomcat\config.properties找到mode=prod,对比内容,如果没有以下3行,进行追加,同时注释掉mode=prodmode=dev**********设置tomcat远程调试***********jpdaAddress=8002//表示要远程调试连接的端口号jpdaTransport=dt_socketshell中进入Tomcat目录cd..cd Tomcat执行以下命令ant-f config.xml configureScripts#ant-f config.xml-projecthelp无用执行完毕后,打开Tomcat/bin目录下的wttomcat_start.bat,查找以下内容,如果没有则追加*********************启用JPDA*********************************rem Un-rem next line to enable debugger attaching to this instance of Tomcatset JAVA_OPTS=%JAVA_OPTS%-Xnoagent-Xdebug-Xrunjdwp:transport=dt_socket,address=8002,server=y,suspend=n重启Tomcat目的:使本机和target服务器连接起来说明:JPDA简介顾名思义,JPDA为Java平台上的调试器定义了一个标准的体系结构。
该体系结构包括3个主要组成部分:JVM TI、JDI和JDWP。
JVM TI的全称是Java Virtual Machine Tool Interface,它定义了JVM为了支持调试而必须提供的功能及相应的访问接口。
这些访问接口是以本地语言的形式提供的,由JVM(比如Sun公司的HotSpot VM)负责实现。
不过,JVM TI只是JVM提供的一系列函数,调试器(特别是远程的调试器)如何调用呢?其实啊,JVM TI的直接客户端并不是调试器,而是一个称为“JPDA back-end”的东东。
Android 开发之Eclipse Debug调试详解1.在程序中添加一个断点如果所示:在Eclipse中添加了一个程序断点在Eclipse中一共有三种添加断点的方法第一种:在红框区域右键出现菜单后点击第一项 Toggle Breakpoint 将会在你右键代码的哪一行添加一个程序断点(同样的操作方可取消程序断点)第二种:在红框区域双击鼠标左键将会在你双击代码的哪一行添加一个程序断点(同样的操作方可取消程序断点)第三种:在光标停留的地方使用快捷键 Ctrl + Shift + B 将会在光标停留的这一行添加一个程序断点(同样的操作方可取消程序断点)2.运行Debug 调试让程序停留在添加的断点上如下图所示,在红框内点击下拉菜单选中需要调试的项目则开始运行Debug调试如果不在下拉表中选直接点击表示Debug运行默认项目(默认项目为上一次运行的项目)Debug调试快捷键为单击F11分析一下如何科学的添加程序断点,上图中我为了加断点查看生成出来随机数的值我一共添加了6个程序断点,绿框表示最为科学的断点位置,红框表示不科学的位置。
我们分析一下为什么,如果switch case 中的代码片段过长或者 case 的数量过多如果采用红框的方式来添加程序断点,程序员须要添加很多程序断点万一有疏漏所以会很难快速定位代码执行到了那里,如果使用绿框的方式添加程序断点,程序员只须要在断点出按 F6 单步跳过这一行代码就会走进正确的case中方便继续调试。
Debug调试运行后,程序停在了红框处,按F6单步跳过发现随机数为4 程序停留在了绿框中,程序员可以迅速定位random的值为43.程序停留后查看变量的数值蓝框中的内容表示为断点的入口方法,就好比你的断点是从那个方法进来的,学会看这个真的非常重要,好比我现在明确知道我的一个方法在被调用的时候方法中会出现错误,但是这个方法在程序中100个地方都在调用,我可能断定实在那里调用的时候出的错误,我不可能在100个调用它的地方都加一个断点,我可以在方法中添加程序断点然后在篮框中查看程序是从那个地方走进这个方法的,便可以快速定位问题所在。
4.4 在Eclipse中进行调试(1)4.4 在Eclipse中进行调试Eclipse为调试运行中的Java应用程序提供了完善的环境。
当在主机模式下运行GWT应用程序时,Eclipse会将它作为一个Java应用程序来运行,而且开发者可以在Eclipse中调试这个GWT应用程序。
对于Ajax开发过程来说,能够调试基于浏览器的Web应用程序的确是一种巨大的进步。
本章前面,我们看到使用applicationCreator脚本和-eclipse选项来创建应用程序时,会自动地创建一个Eclipse启动配置文件。
然后,通过Eclipse就能在主机模式下用Run或Debug命令来启动该应用程序。
启动以后,主机模式浏览器仍然与Eclipse保持连通,并且能够使用Eclipse的调试命令。
首先,我们从断点讲起。
断点是指在代码中设置的一个位置,当执行到该位置时,应用程序会中断运行并将控制权转交给调试器。
这样,我们就能够观察变量的状态或者逐行地执行代码以便于分析程序流。
为了示范断点的应用,可以在HelloWorld应用程序中按钮的ClickListener.onClick方法的第一个行添加一个断点。
设置方法是在编辑器中该行的左侧边空区域单击右键,选择Toggle Breakpoint,如图4-24所示。
这时,我们能够在左侧边空区域上看到由一个蓝色圆点图标表示的断点。
而通过在该边空区域上双击同一个点可以切换断点。
现在,当调试应用程序时,Eclipse会在程序执行到断点时接管调节器。
对于HelloWorld这个例子而言,就是在单击按钮的时候程序会发生中断。
下面,单击工具栏上的Bug图标,打开Debug菜单,从中选择HelloWorld,如图4-25所示。
当在主机模式浏览器中打开HelloWorld时,单击Click Me按钮,就能够看到Eclipse显示的调试器。
此时,应该看到Eclipse处于Debug透视图模式,如图4-26所示。
Eclipse远程debug设置
概述
远程debug可用于开发环境和运行环境不用时,进行调试。
1.参数设置
在tag的启动脚本中加入下面红色的参数。
其中蓝色的为远程debug端口。
set JA V A_DEBUG=-Xdebug -Xrunjdwp:transport=dt_socket,address=3999,server=y,suspend=n
java -Xmn64m -Xms128m -Xmx512m -cp LH;../lib/tag-front-linghai-1.0.jar;../lib/tag-1.1.jar;../lib/tag-communicate-2.0.jar;../lib/commons-be anutils-1.6.jar;../lib/commons-dbcp-1.2.1.jar;../lib/commons-lang-2.0.jar;../lib/commons-logging-1 .0.3.jar;../lib/commons-pool-1.3.jar;../lib/log4j-1.2.9.jar;../lib/classes-12.jar;../lib/spring-2.0.7.jar;../ lib/xercesImpl-2.0.2.jar;../lib/xml-apis-1.0.b2.jar %JA V A_DEBUG% com.neusoft.leaf.server.Startup -home .. -config classpath:linghai-startpoint.xml
2.Eclipse配置
在debug设置中,新建一个远程debug。
选择Remote Java Application 右键选择New,如下图:
设置工程名称,IP和端口号。
其中3999为在启动脚本中设置的远程debug端口号。
最后点击右下方的Debug即可。
如下图:
注意:需要先启动应用程序,再用eclipse远程挂上去.。