转自:http://blog.csdn.net/mhmyqn/article/details/49209541

版权声明:本文为博主原创文章,未经博主允许不得转载。

在日常开发中,有时需要对远程服务器上的应用进行远程调试,对于tomcat,要进行远程调试其实很简单,只需要在启动tomcat时开启jpda服务即可。

什么是JPDA呢?

JPDA(JavaPlatform Debugger Architecture) 是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序。JPDA 主要由三个部分组成:Java 虚拟机工具接口(JVMTI),Java 调试线协议(JDWP),以及 Java 调试接口(JDI)。而像Eclipse和IDEA这种开发工具提供的图形界面的调试工具,其实就是实现了JDI。关于JPDA的详细信息,可以查看developerWorks上的系列文章——深入Java调试体系

tomcat使用如下方式进行启动jpda:

  1. ./catalina.sh jpda start

默认情况下,远程调试的默认端口为8000,可以通过JPDA_ADDRESS进行配置,指定自定义的端口,另外,还有两个可以配置的参数

  • JPDA_TRANSPORT:即调试器和虚拟机之间数据的传输方式,默认值是dt_socket
  • JPDA_SUSPEND:即JVM启动后是否立即挂起,默认是n

可以在catalina.sh中进行配置:

  1. JPDA_TRANSPORT=dt_socket
  2. JPDA_ADDRESS=5005
  3. JPAD_SUSPEND=n

或者通过JPDA_OPTS进行配置:

  1. JPDA_OPTS='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005’

这样启动之后 ,就可以通过Eclise或IDEA进行远程调试了,IDEA具体如何进行远程调试,请参考另一篇文章

网上有很多文章提供了另一种开启远程调试功能的方式,即通过JAVA_OPTS指定相应的JPDA参数:

  1. JAVA_OPTS="$JAVA_OPTS -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005”

使用这种方式开启远程调试功能,在启动时没有什么问题,也能够正常的进行远程调试,但是在停止tomcat时:

  1. ./catalina.sh stop

会出现如下错误:

  1. ERROR: transport error 202: bind failed: Address already in use
  2. ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
  3. JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
  4. FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)

导致不能正常终止java进程,需要手动的kill掉,所以还是应该使用前面的方式开启远程调试功能。

tomcat如何正确的开启远程调试功能(转)的更多相关文章

  1. tomcat如何正确的开启远程调试功能

    在日常开发中,有时需要对远程服务器上的应用进行远程调试,对于tomcat,要进行远程调试其实很简单,只需要在启动tomcat时开启jpda服务即可. 什么是JPDA呢? JPDA(JavaPlatfo ...

  2. 开启flume的远程调试功能

    各种组件,比如tomcat.storm.flume,我们都可以通过JMX方式开启远程调试,主要可以用来跟踪源码,了解程序内部的运行机制,其次,也有利于你修改源码. 首先,本质上是要修改flume本身启 ...

  3. tomcat开启远程调试

    tomcat开启远程调试模式: 需要在启动脚本中的 JAVA_OPTS='-server -Xms1024m -Xmx1024m -Xmn384m -Xss256k -XX:PermSize=128m ...

  4. Java项目开启远程调试(tomcat、springboot)

    当我们运行一个项目的时候,一般都是在本地进行debug.但是如果是一个分布式的微服务,这时候我们选择远程debug是我们开发的利器. 环境apache-tomcat-8.5.16 Linux 如何启用 ...

  5. [转] 在安卓设备上使用 Chrome 远程调试功能

    你的网页内容在移动设备上的体验可能和电脑上完全不同.Chrome DevTools 提供了远程调试功能,这让你可以在安卓设备上实时调试开发的内容. 安卓远程调试支持: 在浏览器选项卡中调试网站. 在原 ...

  6. [转载]eclipse的远程调试功能配置

    原文地址:eclipse的远程调试功能配置作者:我的 用途:web应用部署并运行于外部(区别于eclipse环境中启动的)应用服务器中,当出现问题时,可以使用eclipse工程的源代码进行跟踪调试. ...

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

    原博链接:http://blog.csdn.net/sunyujia/article/details/2614614   今天决定做件有意义的事,写篇图文并茂的blog,为什么要图文并茂?因为很多事可 ...

  8. springboot开启远程调试

    远程调试maven设置 The run goal forks a process for the boot application. It is possible to specify jvm arg ...

  9. 惊呆了!Spring Boot 还能开启远程调试?

    持续原创输出,点击上方蓝字关注我 目录 前言 什么是远程调试? 为什么要远程调试? 什么是JPDA? 如何开启调试? transport server suspend address onthrow ...

随机推荐

  1. procixx地址

    \\192.168.35.7\Download\Builds\procixx_psoc

  2. jquery 小知识

    $("p:eq(0)") :表p标签的第一个元素 $("p:eq(1)") :表p标签的第二个元素

  3. Gene Ontology (GO) 注释

    Gene Ontology (GO) 注释  Posted on 2017-06-11 |  In 生信 相似的基因在不同物种中,其功能往往保守的.显然,需要一个统一的术语用于描述这些跨物种的同源基因 ...

  4. iOS系统日历选择问题

    参考:https://blog.csdn.net/lg_sun/article/details/78913064 -(NSString *)getTimeToken{ NSDateFormatter ...

  5. PHP curl_close函数

    说明 void curl_close ( resource $ch ) 关闭一个cURL会话并且释放所有资源.cURL句柄ch 也会被释放. 参数 ch 由 curl_init() 返回的 cURL ...

  6. tree 解题报告

    tree 对于 \(n\) 个点带标号的无根森林,计算所有森林的树的个数的 \(k\) 次方,对 \(998244353\) 取模. 自闭,错了一堆关于长度的问题,这里以后一定要注意 比如需要 \(n ...

  7. 线性规划(Simplex单纯形)与对偶问题

    线性规划 首先一般所有的线性规划问题我们都可以转换成如下标准型: 但是我们可以发现上面都是不等式,而我们计算中更希望是等式,所以我们引入这个新的概念:松弛型: 很显然我们最后要求是所有的约束左边的变量 ...

  8. scipy与sklearn下载与安装

    一.scipy下载与安装 scipy下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv提供各种包whl文件 下载之后放到Scripts文件中 ...

  9. 【BZOJ3052&UOJ58】糖果公园(树上带修莫队)

    题意:给定一个n个点的树,每个结点上有一种颜色c[i] 定义一条简单路径的偷税指数为simga (sigma w[i](i=0..a[j]))*v[j](j=0..m),其中a[i]为第i种颜色在路径 ...

  10. mybatis批量生成

    使用了mybatis-generator后,寻找只写一个table标签就可以全部生成的方法 下载mybatis-generator-core-1.3.2-bundle.zip 解压后打开docs 发现 ...