使用Eclipse进行测试环境的远程调试

转载请注明出处

作者:晓渡
文章地址:https://greatestrabit.github.io/2016/06/23/debug/

对于使用Eclipse进行日常编程工作的工程师来说,调试是每天都在进行的工作.针对一般意义上的调试过程,相信每一位工程师朋友都熟练掌握了.这里介绍几个调试中比较实用的高级功能.

远程调试

由于部署环境的差异性,相信很多朋友都碰到过开发环境正常测试过的功能在测试环境甚至生产环境下出现bug的情况.一般情况下,生产环境可以采取的手段比较单一,即通过日志的方式获取运行中的环境上下文,分析日志文件并尝试重现bug.这会带来的问题还是不少的.首先,日志的分析是一项比较耗时的工作;其次,现有的日志记录不一定能反映出问题,你可能需要多次重复这个过程(分析日志->猜测问题->加日志->部署->获取日志)来慢慢逼近问题.倘若是测试环境,我们还多了一项可供选择的手段,即远程调试:将程序在测试环境中以debug模式启动,在本机使用Eclipse在工程中设置断点进行调试.

1.将测试环境中的程序以debug模式启动

倘若是独立JavaSE程序,只需要在启动时增加几个参数即可.
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=11111,suspend=y -jar calc.jar
若正常启动,你将看到以下画面:

2.使用Eclipse进行远程调试

在Eclipse中的对应工程中配置调试属性,如下:

3.开始远程调试

点击上一步中图中的Debug按钮开始调试.
一切正常的话,你就可以像调试本地程序一样开始调试测试环境上的程序了.

4.需要注意的问题

  1. 如果程序需要接收来自控制台的输入,应该在测试环境中的控制台中输入.
  2. 需要注意测试环境的代码和开发环境中不一致的情况.如果Eclipse中设置的断点的行数刚好对应测试环境程序中的空行,将无法跳入断点,看上去就像调试并没有成功一样.这种情况并不会发生在本地调试中,因为本地调试无法在空行上设置断点.下面是一个代码不一致的例子.
    实际代码对比:

    运行后的效果如下:

    注意对比2处和3处,在3处本应该有的变量index在2处并没有出现.

    5.tomcat远程调试

    对tomcat进行远程调试是需要将tomcat以debug模式启动,启动命令为(假定用户已经在tomcat/bin目录下):
    ./catalina.sh jpda start
    需要注意的是,最新版本的tomcat对调试的监听地址进行了限制,只允许127.0.0.1访问,所以如果在非本地机器上调试的话,需要修改设置:

    将图中的JPDA_ADDRESS变量由原来的127.0.0.1:8000修改为8000.
    Eclipse端的设置和第2步中的设置没有区别.

    条件断点

    如果需要对循环中的数据进行调试,使用条件断点是个不错的选择.将断点设置在指定的位置上,右键进一步设置断点属性,如下:

    调试时,程序会中断在符合条件处.

    异常断点

    断点不仅可以设置在某一行,也可以针对整个工程进行设置.典型的,假设你知道程序会在某个地方抛出NullPointerException,可是并不是每一次运行都会出现,就可以为工程设置异常断点,如下:

    程序会中断在出现抛出NullPointerException的地方.

本文中用到的代码见: github

时间: 2024-11-10 13:06:06

使用Eclipse进行测试环境的远程调试的相关文章

可以用命令行控制eclipse断点增加删除、远程调试创建与启动的插件

java # 创建断点(支持条件断点) curl -X PUT -H "Content-Type:application/json" --data '{"language":"java","condition":"i == 1","charStart":283,"charEnd":307,"lineNumber":16,"typeName

Windows远程调试Linux上的C++程序:Eclipse+MingW+Samba+GDBserver

转自:http://www.heimizhou.com/windows-remote-debug-linux-c-plus-plus.html 最近有一个需求,就是需要在Windows上远程调试Linux上的C++程序,然后我就从网上搜集各种方法,但是发现很多方法中是先在Windows上编译程序,然后再从Linux上编译程序,最后进行远程调试,这种方法使我的调试不能进入源代码,后来经过尝试发现只需要在Linux上编译程序即可.下面从三个方面:需要安装的软件.安装与配置.配置远程调试,来介绍一下我

使用IDEA进行远程调试

虽然很早以前就只有Eclipse和IDEA都支持远程调试功能的,但是基本没怎么使用过,今天因为紧急处理一个问题,而本地环境搭建起来比较麻烦,所以就使用了IDEA的远程调试功能.因此写一篇文章记录一下. 步骤: 1. 首先在IDEA中check出来你要调试的工程的代码,假设工程的名字为A.然后在IDEA打开这个工程. 2. 因为我们用的是Tomcat,所以在IDEA中点击右上角那个"Edit Configurations"按钮,然后在弹出的界面中点击左上角的加号,选择tomcat ser

利用Eclipse对Flume进行远程调试分析环境搭建

准备工作: 1.到Flume官网下载apache-flume-1.8.0-bin.tar.gz 2.下载代码:https://github.com/javabigdataxin/FlumeExtend 在Flume的conf目录新建一个RollingFileSink.conf文件 a1.sources = r1 a1.sinks = k1 a1.channels = c1   # 配置sources a1.sources.r1.type = netcat a1.sources.r1.bind =

使用Eclipse进行远程调试

转自:http://blog.csdn.net/sunyujia/article/details/2614614 今天决定做件有意义的事,写篇图文并茂的blog,为什么要图文并茂?因为很多事可能用语言也说不明白,从以前我发表的一篇文章可以看得出来,  我的朋友们普通反应看完后觉得不知所云,可能是我写的太简单,下面步入正题. 什么是远程调试,就是在A机器上利用Eclipse单步跟踪调试B机器上的Web应用,当然调试A机器上Web应用也是没有问题的,90%我都是调试本机的Web应用,远程调试的意义我

tomcat启动debug模式,使用eclipse远程调试

生产环境和测试环境可以将tomcat启动设置为debug模式,开始远程监听端口,然后在本地的eclipse中对项目远程调试,即可对指定的服务器中的tomcat进行远程调试. 一.打开tomcat/bin/Catalina.bat文件,在下面位置输入:SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=800

【Java】使用Eclipse进行远程调试,Windows下开启远程调试

原博链接:http://blog.csdn.net/sunyujia/article/details/2614614 今天决定做件有意义的事,写篇图文并茂的blog,为什么要图文并茂?因为很多事可能用语言也说不明白,从以前我发表的一篇文章可以看得出来,http://blog.csdn.net/sunyujia/archive/2008/03/23/2211109.aspx 我的朋友们普通反应看完后觉得不知所云,可能是我写的太简单,下面步入正题. 什么是远程调试,就是在A机器上利用Eclipse单

Eclipse远程调试(远程服务器端监听)

前提:远程服务器上运行的WEB项目class对应的源码与本地项目中必须保持一致,也就是远程tomcat部署的项目就是本机项目打包过去的,而本机项目没有发生变动. 远程服务器端 服务器端配置eclipse调试器监听端口,有两种方式,任选其一 第一种方式: 环境变量 export JPDA_ADDRESS=9999 启动tomcat 使用sh catalina.sh jpda start启动 注意:不要用startup.sh 通过这条命令启动tomcat,会监听JPDA_ADDRESS设置的端口,等

Eclipse 远程调试 WebSphere Application Server (WAS)

我们用 Eclipse 开发 Web 项目时,多会用某个插件(如 MyEclipse) 来对 Tomcat 中的应用进行单步调试.而要调试 WAS 下的应用,MyEclipse 也是可以的,但在 MyEclipse 中启动 WAS 比较慢,且需要在本地安装一个 WAS.再有便捷点的方法是用 WSAD (Websphere Studio Application Developer) 或它的升级版 RAD (Rational Application Developer),它们内置了对 WAS 很好的