`
haiziwoainixx
  • 浏览: 415028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

远程调试Web应用程序

 
阅读更多

有时候,我们不得不放弃在本地调试我们的程序,把我们的程序先布署到服务器,然后把调试信息都记在日志中,用眼睛瞅日志来调试程序。

不是用这种方式不行,只是效率太低,本来写程序是一件开心的事情,却变得令人心烦。

其实,Java本身支持远程调试,只要增加一些JVM的启动参数,就可以远程调试了,JVM启动参数就像下面的样子:

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

 

下面是参数的说明:

-XDebug               启用调试。
-Xnoagent             禁用默认sun.tools.debug调试器。
-Djava.compiler=NONE  禁止 JIT 编译器的加载。
-Xrunjdwp             加载JDWP的JPDA参考执行实例。
transport             用于在调试程序和 VM 使用的进程之间通讯。
dt_socket             套接字传输。
dt_shmem              共享内存传输,仅限于 Windows。
server=y/n            VM 是否需要作为调试服务器执行。
address=9988          调试服务器的端口号,客户端用来连接服务器的端口号。
suspend=y/n           是否在调试客户端建立连接之后启动 VM 。

写出来的样子大概是这样的:

1 java  -Xdebug -Xnoagent -Djava.compiler=NONE 
2 -Xrunjdwp:transport=dt_socket,server=y,address=9988,suspend=n test.package.Main

 

 

配置远程服务器

如果我们想要调试一个Web应用程序,那么在启动Web服务器时需要增加上面的JVM参数。

由于最近我在使用Resin,所以就以Resin 4.0作为例子来说明一下(主要原因是网上说的都不管用)。

  • 环境:CentOS 6.3

  • 应用服务器:Resin4.0

  • JDK版本:JDK6

01 # 进入Resin的配置文件目录
02 # cd /usr/local/resin/conf
03 # ll
04 total 80
05 -rw-r--r-- 1 root root 12620 Oct 24 22:42 app-default.xml
06 -rw-r--r-- 1 root root 6447 Oct 24 22:42 cluster-default.xml
07 -rw-r--r-- 1 root root 21594 Oct 24 22:42 health.xml
08 drwxr-xr-x 2 root root 4096 Oct 24 22:42 keys
09 drwxr-xr-x 2 root root 4096 Oct 24 22:42 licenses
10 -rw-r--r-- 1 root root 5119 Oct 24 22:42 resin.properties
11 -rw-r--r-- 1 root root 12404 Mar 27 18:08 resin.xml

 

 

Resin启动时的JVM参数在resin.xml里面配置。

# vim resin.xml

01 <cluster id="app-youyuan">
02     <root-directory>.</root-directory>
03     <server-default>
04       <http address="*" port="8080" />
05         <jvm-arg>-Xms1024m</jvm-arg>
06         ... ... ...
07         <jvm-arg>-Xdebug</jvm-arg>
08         <jvm-arg>-Xrunjdwp:transport=dt_socket,address=9988,server=y,suspend=n</jvm-arg>
09     </server-default>
10   </cluster>

 

 

cluster -> server-default 结点里面设置JVM参数。

设置完成后重启resin:

1 /usr/local/resin/bin/resin.sh restart -server youyuan

 

启动完后,检查端口:

1  # netstat -apn | grep 9988
2 tcp 0 0 你机器的IP:9988 这里是IP:51840 ESTABLISHED 30130/java

 

可以看到,已经正常启动了。剩下的就是在本地连到服务器上进行调试了。

 

如果使用的是TOMCAT

在windows系统中:
打开%CATALINE_HOME%/bin下的文件catalina.bat,加入下面这行:
set CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address= 8000
其中 address=8000是没被使用的端口号。连接方式有两种,为dt_shmem和dt_socket,分别表示本机调试和远程调试。
 
在非windows系统中:
打开% CATALINE_HOME %/bin/下的文件catalina.sh加入下面这行:
declare -x CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"
输入命令startup.sh jpda start就可启动tomcat。

 

 

本地使用Eclipse连接服务器进行远程调试

  • Eclipse版本:4.3

1. 右击要调试项目,在弹出的菜单中点击 Debug AS -> Debug Configurations...

    如图所示,右击Remote Java Application,新建一项,

 

在Project中选中要远程调试的项目,在Connection Type中选择Socket Attach,在Connection Propertyies中设置远程调试的应用的IP地址及端口。

 

然后点击Apply,Debug就可以连接了。

 

如果遇到端口被占用,应用服务器启动不了,可以先查找端口

 命令: lsof -i:8001

然后杀掉相应进程即可

分享到:
评论

相关推荐

    使用 Eclipse 远程调试 Java 应用程序

    在开发Java应用程序时,远程调试是一项非常重要的技能,特别是在处理无法直接访问的远程服务器或资源有限的设备上运行的应用程序。Eclipse作为一个强大的Java集成开发环境(IDE),提供了丰富的远程调试功能。本篇...

    Visual Studio 2012/2010/2008 远程调试 web

    【Visual Studio 远程调试 ASP.NET 应用程序】 在软件开发过程中,尤其是在 ASP.NET 开发环境中,远程调试是一项至关重要的技能。它允许开发者在不同的机器上调试代码,特别是当开发机器与服务器分离时,远程调试能...

    在Web浏览器中远程调试您的iOS应用程序.zip

    本文将详细介绍如何使用Web浏览器远程调试您的iOS应用程序,这将极大地提高开发效率,特别是在处理网络请求、JavaScript代码或者进行跨平台调试时。 首先,我们需要了解这个开源项目——"HttpServerDebug-master"。...

    eclipse中远程调试tomcat应用

    Tomcat是Apache软件基金会的开源项目,是一个流行的Java Servlet容器,常用于部署和运行Java Web应用程序。本文将详细讲解如何在Eclipse中进行远程调试Tomcat应用,以帮助开发者高效地定位和解决问题。 首先,确保...

    IDEA,Eclipse远程调试应用

    在开发和维护Java Web应用时,远程调试是一种极为重要的技术手段。它允许开发者在本地IDE(集成开发环境)中直接调试运行在远程服务器上的应用程序。当出现难以复现的问题时,这一技术尤其有用。本文将详细探讨在两...

    NET分布式应用程序 集成XML Web服务与.NET远程处理

    此外,还会讨论性能优化、安全性以及调试远程应用程序的技巧。 在阅读本书的过程中,你将学习到如何利用.NET Framework提供的工具和类库,如System.Web.Services和System.Runtime.Remoting,来构建高效、可靠的...

    Tomcat远程调试

    远程调试允许开发者在不直接访问服务器机器的情况下,通过网络连接到运行中的应用程序,并设置断点、查看变量值和调用堆栈,这对于分布式系统和跨地域的团队协作尤其重要。 为了开启Tomcat的远程调试功能,我们需要...

    VS 远程调试

    在开发Web应用程序时,经常会遇到一些问题,例如数据库连接错误等。这些问题可能是由于服务器端的配置问题或代码问题引起的。为了快速定位和解决这些问题,需要在远程服务器上进行调试。VS 远程调试提供了一种便捷的...

    eclipse远程调试最完整教程

    **远程调试**是指开发者能够通过特定工具在一台机器上(通常称为客户端)对另一台机器(服务端)上正在运行的应用程序进行调试的过程。这种方式使得开发者能够在不改变服务端环境的前提下进行调试,尤其适用于生产...

    售后服务无法在W服务器上启动调试.pdf

    当“售后服务无法在W服务器上启动调试”时,这通常意味着开发者在尝试远程调试Web应用程序时遇到了问题。以下是一些可能导致这种情况的具体原因和解决方法: 1. **集成Windows身份验证未启用**:调试失败的常见原因...

    C#Web应用程序入门经典电子书1

    本书将介绍如何在本地IIS服务器或远程服务器上发布和配置ASP.NET Web应用程序。 通过《C# Web应用程序入门经典电子书1》,读者不仅可以学习到C#语言的基础知识,还能掌握使用C#进行Web开发的核心技术,为今后深入...

    vs2010远程调试XP需要的库

    在IT行业中,Visual Studio 2010(简称VS2010)是一款强大的集成开发环境,被广泛用于创建Windows应用程序、Web应用以及移动应用等。远程调试是开发者常用的功能,它允许程序员在不同的计算机上运行和调试代码,这...

    eclipse远程调试tomcat

    ### Eclipse远程调试Tomcat知识点详解 #### 一、概述 在软件开发过程中,尤其是在Web应用...通过上述步骤,你可以轻松地在远程服务器上调试Java Web应用程序,从而提高开发效率和质量。希望这些内容对你有所帮助!

    myeclipse远程调试(web project)附说明文档

    通过以上步骤,你可以在MyEclipse中成功进行远程调试Web项目。这份“remote_debug2”说明文档应该会包含更详细的步骤和技巧,帮助你更深入地理解和操作远程调试。记得在实际操作中,根据实际情况调整配置,遇到问题...

    ASP.NET Web应用程序开发新思维(英文版)

    ASP.NET是微软公司推出的一种用于构建Web应用程序的框架,它基于.NET Framework,为开发者提供了丰富的功能和工具,简化了Web应用的开发流程。本资源"ASP.NET Web应用程序开发新思维(英文版)"是一本深入探讨ASP.NET...

    idea的远程调试和一键部署

    Idea 远程调试是指服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态。下面是使用 Idea 进行远程调试和一键部署的...

    实现WEB的C、JAVA程序编辑与调试c#程序

    3. **Web应用程序结构**:提到的文件如`Global.asax`、`Default.aspx`、`About.aspx`等是ASP.NET Web应用程序的标准组成部分。`Global.asax`是全局应用程序文件,用于处理应用程序级事件;`Default.aspx`通常是网站...

    使用Eclipse远程调试Linux服务器Tomcat项目

    在开发Java Web应用程序时,需要在远程服务器上进行调试,以便更好地了解程序的执行过程。使用Eclipse远程调试Linux服务器Tomcat项目可以帮助开发者更好地解决问题。本文将介绍使用Eclipse远程调试Linux服务器Tomcat...

    ExtJS+Web应用程序开发指南(第2版).pdf

    但是,可以从标题“ExtJS+Web应用程序开发指南(第2版)”中提取相关的知识点。 ExtJS是一款使用JavaScript语言编写的开源前端框架,特别适用于创建单页面应用程序。它为开发者提供了丰富的组件库,使得开发者可以...

Global site tag (gtag.js) - Google Analytics