各位XDJM发表看法啊!

解决方案 »

  1.   

    汗,在IDE里调试不就OK了……
    想打断点的地方那个打打断点……
    觉得断点麻烦就在关键位置加点打印……
      

  2.   

    log4j debug模式...
    不想调试就info error模式
    想调试就debug模式
      

  3.   

    你说的这个方法,只能看到debug的日志信息,功能有限;如果我想在eclipse远程调试该程序,
    详细了解这个程序执行的每一步,怎么办呢?
      

  4.   

    只说2点:
    1).如果从日志中还找不到错误,那说明程序不够健壮而且日志机制不够完善。
    2).想在eclipse远程调试该程序??随便一个普普通通的web程序,jar包都一大把。假设你部署在远程路径中,在本地使用eclpise,每次程序重新启动部署总要进行大量的数据传输。当然,从理论上来讲,如果仅仅在局域网中这样做也是OK的。可是广域网中的速度远比局域网速度要慢的多。综述:调试的主要目的是为了排除程序的可预知性错误。因此,提高程序的健壮性,以及完善的日志机制。才是上策。
      

  5.   

    对第二点补充:
    你本地的JVM与远程的WEB容器之间也需要通信,尤其是加了断点的程序,通信量也不可小觑。
      

  6.   

    呵呵,首先感谢你提的建议,但是我认为通信量应该不会太大吧,远程调试传递的只是对象的引用,不是对象本身,远程调试一般是在日志功能不能完全实现情况才用的,服务端不可能有那么详尽的日志,太多的日志也会影响到服务端正常运行。
    我现在不知道使用哪些Jar才能使自己的程序具有远程调试功能。
      

  7.   


    本地的JVM与远程的WEB容器之间的通信和你项目发布时的通信比起来,那是小巫见大巫!远程调试一般是在日志功能不能完全实现情况才用的,服务端不可能有那么详尽的日志,太多的日志也会影响到服务端正常运行。
    ================
    首先需要说明的是,日志输出一般都放在程序中,你想看到的或你认为可能会出现错误的地方,当然,以后者更多。平时咱们用的LOG4J已经很好了,至于详尽与否,则和你写程序的习惯有关了。当程序给别人使用后,如果出现错误,则马上能通过日志检查出来。
    为什么飞机、轮船等都有一个叫黑匣子的东西,那里装的都是数据以及详尽的日志。所以,当飞机、轮船出事时,都以打捞黑匣子为首要任务。绝大多数情况下,找到它就能找到失事原因。太多的日志也会影响到服务端正常运行
    ============
    不知道你这里说的“太多”究竟是多少。只要你不是有事没事(比如定义一个变量后)就搞个日志输出的话,那是多不到哪去的。或许是在下孤陋寡闻,长这么大,还未曾发现有哪个程序因为日志而影响了服务器运行。
      

  8.   

    你说的也对,但是有时候,你的应用运行环境(不限于WEB容器,其实有很多其它的容器或环境)跟你开发的环境不在一台主机上,这是很正常的,就需要用的远程调试功能了,而且在JVM上调试需要你把你的容器或环境先停掉,这是不合理的,因为并不需要这样。程序不可能把日志记录写的那么完善,总有些bug发现不了,这时必须通过调试来解决。
      

  9.   

    但是有时候,你的应用运行环境(不限于WEB容器,其实有很多其它的容器或环境)跟你开发的环境不在一台主机上。==================
    不是有时候,是基本所有的时候。除非你写的程序只给你自己用!
      

  10.   

    在JVM上调试需要你把你的容器或环境先停掉,这是不合理的,因为并不需要这样。
    ========================================================================
    在下不才,未通其意,愿闻其详?
      

  11.   

    只需要在执行程序前加入调试参数可以提供远程调试了,比如:
    jar -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,address=3999,suspend=y
    -jar oneJar.jar
    参考http://www.blogjava.net/yongbing/articles/221179.html
      

  12.   

    Java Platform Debugger Architecture(JPDA:Java平台调试架构)就支持远程调试
    服务器端启动服务带上参数
    -Xdebug -Xrunjdwp:transport=xxx,addressyyy,server=y,suspend=n
    具体可以参考tomcat的启动batch,看看是怎么使用这些参数的客户端
    jdb -connect com.sun.jdi.SocketAttach:port=xxxx,hostname=yyyy如果要自己另外开发,那估计要自己封装jdb和rmi