新接手的项目采用的是Maven作为编译管理工具,项目内容则是按子模块Module来划分。由于模块太多,且都比较大(基本上都能独立运行并负责处理一方面的业务),并采用Socket来进行模块之间的数据通信,结果就导致一个略显臃肿的系统产生了。最重要的是,不知道maven的pom.xml文件出了什么问题,Eclipse也一直无法成功加载部分重要模块(以致最后切换到JetBrain IDEA(Open Source)——这也算是一点收获),常用的调试方式也行不通了。过了好一段时间我才习惯,每次提交代码前都要小心翼翼地检查一遍。

昨天让同事帮我做CodeReview,讨论问题中,看着他演示一下Remote Debug。觉得很神奇,回来试了一下,又加了点资料,才发觉得我真的是Out了。以下内容是个简单的笔记,关于在JetBrain IDEA中使用Remote Debug的方式。

要想Debug,首先得需要在编译时打开debug选项,这样生成的class文件才能支持debug过程。其次,RemoteDebug过程是在两个不同的VM实例间进行了,这就得需要一个通信方式了。常用的是Socket了!因此设置中会涉及到一些端口设置的。

在启动程序时,将以下参数选项添加到自定义的命令行中,程序就会以支持RemoteDeubg的方式启动。

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=2345

例如:

JVM_OPTS="-server -Xss128k -XX:+UseParNewGC -XX:+HandlePromotionFailure -XX:+HeapDumpOnOutOfMemoryError"

DEBUG="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=2345"

JVM_OPTS="$JVM_OPTS $DEBUG"

$JAVA_HOME/bin/java $JVM_OPTS -cp $CP com.romebuild.Main

准备程序之后,再配置一下IDE,让它去访问远程的VM了。过程相当简单!

【Run】|【Edit Configuration】,选择【Add New Configuration】|【Remote】,便生成了一个RemoteDebug配置,其中的参数不用修改,但需要设置目标VM实例所在的主机与监听的端口。本例则为localhost:2345了。再选择与目标实例对应的模块代码就可以了。

点击调试按钮,IDEA就会连接到目标VM上去了,调试方法就不用多说了吧。下面来说明一下DEBUG选项参数的意思:

-XDebug 启用调试

-Xrunjdwp 加载JDWP的JPDA参考执行实例。

transport 用于在调试程序和 VM 使用的进程之间通讯。

dt_socket 套接字传输。

server=y/n VM是否需要作为调试服务器执行。

address=2345调试服务器监听的端口号。

suspend=y/n 是否在调试客户端建立连接之后启动 VM 。

关于suspend多说一句,如果设置为y,它会阻塞程序运行,直到有客户端连接到对应的监听端口(这里是9527),程序才真正开始执行。我们有时候会抱怨程序一闪而过,还没来得及在本地加载上代码程序就执行完了,这种情况就可以使用suspend参数。

还有一个细节是-jar参数不能写到-Xug参数前,像这样无法启用调试:

java -jar lib/Main.jar -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=y

要远程调试maven2启动的程序,例如mvn jetty:run,可以在启动程序时执行命令:export MAVEN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y"

java web远程调试工具_java远程调试 - Dendy的个人页面 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. java io 读取配置文件_java读取配置文件 - tomzhao2008的个人空间 - OSCHINA - 中文开源技术交流社区...

    对于要打包成jar文件来运行来说,用file是会有问题的,下面的程序可以解决这样的问题 1.ReadPropsUtil /** * */ package readproperties; import ...

  2. java动态变量名反射_Java动态性—反射 - Eclipse666的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.什么是动态语言? 程序运行时,可以改变程序的结构或者变量类型:如Python,javaScript function(){ var s="var a=3;var b=4;" e ...

  3. java枚举变量带括号_java枚举类型 - 墨梅的个人空间 - OSCHINA - 中文开源技术交流社区...

    public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般 ...

  4. java的异常解析_java异常解析 - liop的个人空间 - OSCHINA - 中文开源技术交流社区...

    抛出异常,捕捉异常,输出异常. /** * 自定义异常类 */ public class CustomerException extends RuntimeException { private St ...

  5. java自定义标签遍历_自定义标签 - CarlDing的个人页面 - OSCHINA - 中文开源技术交流社区...

    EL的不足,由JSTL来加强  -> 自定义标签来实现. 1:自定义标签 1:自定义标签也是类. 2:让用户在JSP页面使用,不引用Java代码的情况下,调用Java代码. 2:标签开的类的继承 ...

  6. java实现图像处理高通滤波,图像处理入门——滤波 - leo_de_macondo的个人页面 - OSCHINA - 中文开源技术交流社区...

    模糊 图像模糊的方法可以将每个像素的rgb值用周围像素的加权平均值来代替.比如用周围的9个像素来计算加权平均值,权值可以用一个3x3的矩阵来表示: | 1   2   1 | | 2   4   2 ...

  7. java知识理论_JAVA理论知识 - OSC_rnoszD的个人空间 - OSCHINA - 中文开源技术交流社区...

    1. final关键字可以用来修饰什么?分别起什么作用? a) final可以修饰类,这样的类不能被继承. b) final可以修饰方法,这样的方法不能被重写. c) final可以修饰变量,这样的变 ...

  8. java 锁的类型_Java锁的种类 - shawnplaying的个人页面 - OSCHINA - 中文开源技术交流社区...

    Java锁和并发需要结合在一块了理解,涉及到了多个话题. 本文主要参考了 http://ifeve.com/java_lock_see1/ 但是我认为原文中有某些错误,我在下面的代码中做了修改. 公平 ...

  9. java 的“mwq”_java的对象模型 - osc_mwqvsfzo的个人空间 - OSCHINA - 中文开源技术交流社区...

    java中的对象在内存中,究竟是怎样一种存在? 这篇随笔,我们就来一探究竟.可能不够深入,但是我们把理解到位,深入到我们需要的程度这样即可. 先来看下jvm的内存模型: 程序计数器 虚拟机栈和本地方法 ...

最新文章

  1. 一个常用的正则表达验证类
  2. bat 启动 不弹出对话框_CAD中转换出的PDF文件模糊要怎么办
  3. Android Studio之Instant Run requires ‘Tools | Android | Enable ADB integration‘ to be enabled解决办法
  4. 【LOJ6033】棋盘游戏【二分图博弈】
  5. C语言、嵌入式重点知识:回调函数
  6. (转载)spring配置hibernate 事务。
  7. python抽取指定url页面的title_Python新手写爬虫全过程记录分析
  8. 特殊的栈GetMin
  9. 小程序“成语猜题”部分答案,总共28667题
  10. 微软原版win10系统启动盘的使用
  11. 对抗神经网络(Adversarial Nets)的介绍[1]
  12. 全国计算机二级C语言过关要求,计算机二级考试c语言过关经验
  13. 智能传感器芯片行业下游市场应用前景分析预测及市场需求结构分析
  14. Mysql DOS界面进入
  15. 几个简约Jekyll主题推荐
  16. 【校招 --阶段一 操作系统基础】进程地址空间
  17. Python Numpy的数组array和矩阵matrix
  18. PS教程如何用Photoshop 创造奇幻的燃烧着的鹿
  19. Fireworks切图视频教程
  20. 微信电脑备份速度慢解决方法(亲测有效)

热门文章

  1. pythonrandint函数左闭右开_Python容器类型公共方法总结
  2. mysql 1524_MySQL不允许用户登录:错误1524
  3. java joda 获取utc时间_java – JodaTime – 如何获取UTC的当前时间
  4. Nordic Collegiate Programming Contest (NCPC) 2016
  5. java学习避免死锁
  6. Enze frist day
  7. 程序以html形式发送邮件注意问题
  8. ASP.NET入门教程:服务器控件
  9. [美丽的烦恼] SQL删除某些字段重复的记录(只保留一条)
  10. 澳大利亚新南威尔士大学 巩东博士 招收若干名计算机视觉和机器学习方向PhD...