zoukankan      html  css  js  c++  java
  • 转:远程调试

    做个备忘. 平时经常忘记放到那个文件夹下面了.目前只用到这三种,以后用到在追加.

    注意:这是java命令的参数,不能换行,博客文章里面一行写不下,所以有换行,tomcat和resin3各一行,weblogic 两行"-"号后面紧跟字母"-"号前面是空格

    tomcat
    SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE  -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
    weblogic8
    set DEBUG_OPTS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=7000,suspend=n
    %JAVA_HOME%/bin/java %DEBUG_OPTS% %JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS% -Dweblogic.Name=%SERVER_NAME% -Dweblogic.ProductionModeEnabled=%PRODUCTION_MODE% -Dweblogic.management.username= %WLS_USER% -Dweblogic.management.password= %WLS_PW% -Djava.security.policy="%WL_HOME%/server/lib/weblogic.policy" weblogic.Server
    resin3
    httpd.exe -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9000
    
    ===============================================================================================
    
     
    什么是远程调试,就是在A机器上利用Eclipse单步跟踪调试B机器上的Web应用,当然调试A机器上Web应用也是没有问题的,90%我都是调试本机的Web应用,远程调试的意义我想我不用说了,大家都会想到它的好处,你可以在本地调试非本地测试环境上的应用,这是件多么美妙的事,所以我就不说它的好处了,那么本地调试呢,我喜欢本地调试也采用下面要介绍的方法,为什么不用myeclipse,WTP,TomcatPlugin等。
             下面我阐述下在eclipse中启动Web应用的缺陷:
    我本身是非常喜欢使用Myeclipse 做WEB部署的,但是我不喜欢使用Myeclipse启动tomcat,当然WTP,TomcatPlugin等也不喜欢,使用Myeclipse做部署的好处就是非常灵活,不仅可以部署到Web应用里面还可以任意部署到某一指定路径下。但是使用Myeclipse启动tomcat的话,有如下问题:
             a.卡,比较慢,尤其是同时启动多个应用.
             b.如果断点比较多的时候例如100多个,必须把每个不需要使用的断点先禁用掉或干脆删掉,也就是说web应用启动的时候就已经决定了是debug模式还是run模式。中间不可以切换。
    c.一旦eclipse死掉了,web应用也就断掉了。
    d.对于程序来说相对路径,类加载路径都是和系统正式运行的情况下完全不同的(要视具体插件而论,每个插件的部署方式都不太一样),即和Web应用独立运行的相对路径和类加载环境有差异,当然熟练的老手可以轻松搞定,但是就目前国内情况看,很多初学者在这个问题上还是很苦恼的。
    e.顺便说一句和本话题无关的,eclipse的console并不能完全模拟cmd控制台,一些流操作会有问题。例如:PushbackInputStream
    那么使用远程调试的方法做本地调试有什么好处呢?
    a.       运行速度比较好。
    b.       运行期间可以使用eclipse连接web应用做调试,调试完成后可以断开连接,需要调试的时候可以再重新进行连接,断点的禁用功能可能就很少派上用场了,因为相对于在debug模式和run模式间自由切换。
    c.       Web应用是独立运行的,不用担心eclipse死掉即玩完了。
    d.       从开发到上线运行,环境一直可以保持一致。
    说了半天,没有使用过的人可能还是不了解,没关系,可以看完下面的,再回过头看上面的。
    下面我举一个小例子介绍如何进行远程调试.
    环境:tomcat,Eclipse,做远程调试不需要任何插件。当然可以使用MyEclipse把Web应用部署到tomcat上面,注意只是部署,一般来讲使用远程调试就不需要配置MyEclipse的Web Server了,MyEclipse在这里只起到一个copy文件的作用,好在现在Myeclipse可以随意指定目录copy了。即 Deployment 对话框中的Custom Location,在这里推荐大家一个copy文件的小插件,有了这个插件就不需要Myeclipse部署了。
    FileSync plugin for Eclipse http://andrei.gmxhome.de/filesync/index.html 这个插件的作者还写了很多其他好用的插件,大家可以顺便看下。
           这次例子的源码很简单:
    Jsp 源码如下index.jsp
    <%com.syj.test.DebugTest.test("sunyujia test");%>
    Hello Remote Debug
    在DebugTest类的test方法中做个断点既可测试
     
    下面按步骤进行讲解
    1.    将web应用部署到Tomcat的webapp目录下
    2.    修改Tomcat/bin/startup.bat文件,在最前面加上如下代码
    SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
    注意上面命令必须写成一行中间不能有换行,-前是空格-后是非空格,由于显示器分辨率不同,该文章在显示的时候可能会有换行的情况。
    更多Web服务器远程调试参数可参见
    3.必须先启动Tomcat启动tomcat/bin/startup.bat
    4.在com.syj.test.DebugTest.test方法中设置断点
    5.在eclipse中配置debug,配置完成后点击debug按钮。如图:
     
    6.打开浏览器访问在第1步部署的web应用,访问index.jsp
    7.当浏览器访问index.jsp时,由于调用了com.syj.test.DebugTest.test,又因在test方法中设置了断点,所以程序会被断点拦截,如图:
    8.不需要调试的时候点击断开,需要调试的时候再点击debug,非常方便,当调试过程中出现引用非本project的源码时(例如跟踪到tomcat里面或spring,hibernate里面),会提示找不到源码,点击相应提示的按钮(到时候editor区只有一个按钮,所以大家就不要问哪个按钮了)可以添加源码继续调试,或在配置debug前就把需要的源码都添加上,在source选项卡里面,因为具体的基本调试这方面知识不属于本话题讨论范围内,就不过多介绍了。
  • 相关阅读:
    Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
    初探Java设计模式5:一文了解Spring涉及到的9种设计模式
    初探Java设计模式4:一文带你掌握JDK中的设计模式
    初探Java设计模式3:行为型模式(策略,观察者等)
    初探Java设计模式2:结构型模式(代理模式,适配器模式等)
    初探Java设计模式1:创建型模式(工厂,单例等)
    [转] <context-param>与<init-param>的区别与作用
    [转]servlet配置中init-param
    [转]Spring 中的p标签
    [转]Spring Security学习总结二
  • 原文地址:https://www.cnblogs.com/jinloooong/p/7337523.html
Copyright © 2011-2022 走看看