博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jvm远程调试
阅读量:2492 次
发布时间:2019-05-11

本文共 2831 字,大约阅读时间需要 9 分钟。

实例java_opts:

export JAVA_OPTS="-Djava.library.path=/usr/local/lib -server -Xms512m-Xmx512m  -XX:PermSize=256m-XX:MaxPermSize=256m -verbose:gc -Xloggc:/export/home/tomcat/logs/oss.play.360buy.net/appstore_oss_gc.log-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC-XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError-Dfile.encoding="GBK"-Djava.awt.headless=true-Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000-Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300-Dsun.net.inetaddr.ttl=300 -server -Xdebug -Xnoagent -Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,address=8090,server=y,suspend=n"

 

 

JAVA的远程调试方法- -

Tag                                                  

首先,JAVA自身支持调试功能,并提供了一个简单的调试工具--JDB,类似于功能强大的GDBJDB也是一个字符界面的调试环境,并支持设置断点,支持线程线级的调试。

 

JAVA的调试方法如下:

1。首先支持JVM,并设置参数,使之工作在DEBUG模式下,加入参数:-Xdebug-Xrunjdwp,transport=dt_socket,server=y,address=5432,suspend=n,onthrow=java.io.IOException,launch=/sbin/echo

其中,-Xdebug是通知JVM工作在DEBUG模式下,-Xrunjdwp是通知JVM使用(javadebug wire protocol)来运行调试环境。该参数同时了一系列的调试选项:

transport指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台。

server参数是指是否支持在server模式的VM.

onthrow指明,当产生该类型的Exception时,JVM就会中断下来,进行调式。该参数可选。

launch指明,当JVM被中断下来时,执行的可执行程序。该参数可选

suspend指明,是否在调试客户端建立起来后,再执行JVM

onuncaught(=yn)指明出现uncaught exception 后,是否中断JVM的执行.

 

2。启动调试工具。

最简单的调试工具就是上面提到的JDB,以上述调试用JVM为例,可以用下面的命运行启动JDB

jdb-connect com.sun.jdi.SocketAttach:port=5432,hostname=192.168.11.213

另外,还有好多的可视化调试工具,如eclipse,jsawt等等。Eclipses可用 ant debug来建立一个调试方法。

 

 

其实就是使用了JDK的JPDA,在启动服务器(Jboss或者Tomcat等)的命令行参数里面加上:

-Xdebug-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n

 

 

Java远程调试

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

-XDebug              启用调试。

-Xnoagent            禁用默认sun.tools.debug调试器。

-Djava.compiler=NONE  禁止 JIT 编译器的加载。

-Xrunjdwp            加载JDWPJPDA参考执行实例。

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

dt_socket            套接字传输。

dt_shmem             共享内存传输,仅限于 Windows

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

address=3999          调试服务器的端口号,客户端用来连接服务器的端口号。

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

Resin:

RESIN_HOME\bin\httpd.exe-Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n

Tomcat:

catalina.sh/bat 的最上面加上:SETCATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 即可。

Weblogic:

startWebLogic.bat加上:setJAVA_OPTIONS=-Xdebug -Xnoagent -Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

启动App server后,在ide下通过debugremote java application并侦听相应的debug端口

EclipseRcp:

java-Xdebug -Xnoagent -Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,suspend=y,server=y,address=8000 -cpF:/rcp/plugins/org.eclipse.equinox.launcher_1.0.0.v20070606.jarorg.eclipse.equinox.launcher.Main -application rcp.application -dataF:/rcp/workspace -os win32 -ws win32 -arch x86 -nl en_US

-Xdebug -Xnoagent等参数需要放在main class前面

转载地址:http://vzrrb.baihongyu.com/

你可能感兴趣的文章
vc获取特殊路径(SpecialFolder)
查看>>
单例模式
查看>>
int(3)和int(11)区别
查看>>
201521123061 《Java程序设计》第十一周学习总结
查看>>
代码小思考
查看>>
【NOI 2018】归程(Kruskal重构树)
查看>>
Axure原型制作规范
查看>>
Finereport集群配置
查看>>
Introspector内省和反射的区别.
查看>>
php-fpm配置笔记
查看>>
[转]解读ASP.NET 5 & MVC6系列(7):依赖注入
查看>>
[转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...
查看>>
[转]VS2010中的单元测试
查看>>
前端面试每日 3+1(每日三问)
查看>>
HC-05底层驱动
查看>>
Ruby on Rails Tutorial 第六章 用户模型
查看>>
Flex与Javascript交互
查看>>
构建之法阅读笔记03
查看>>
IOS https抓包及10.3.3版本证书不生效问题解决
查看>>
Tyvj 1921 Freda的烦恼
查看>>