概述
远程调试简单的说就是通过运行在A机器上的debug客户端要调试一个运行在远程B机器上的应用程序。工作中我们常常需要把程序部署在服务器上(有时联调受对方源IP限制,或者应用程序有时必须运行在特定机器上),而源代码在本机,这时我们一般习惯通过日志调试,迫不得已时可能会在服务器上运行个代理来解决源IP限制的问题,从而在本机的IDE环境中调试。但是不管怎样,远程调试(Remote Debugging)常常也是重要的。Sun在设计JPDA(Java Platform Debug architecture)就留下了接口,我们只要在服务器上运行java程序时,给jvm传递几个参数,设定一个监听端口,然后用一个debug客户端(elipse内置)来访问这个端口,就可以进行远程调试了。操作比较简单就和使用jconsole进行远程性能分析一样,不过java自带的远程调试比自带的jconsole有价值得多,jconsole可展现的东西太少,没有太大的价值,远比不上一些第三方的profiler工具。
下面以一个简单的代码展现下远程调试的过程。
在eclipse里专门建立了个项目
其中RemoteDebugger.java的源代码如下
public class RemoteDebugger {
public static void main(String[] args) throws Exception {
System.out.println("prepare to call doBusinessLogic ...");
doBusinessLogic(); //此处设个断点
System.out.println("end the call");
}
private static void doBusinessLogic() {
System.out.println("start to execute business logic");
int i = 3; //此处设个断点
System.out.println("i = "+i);
int j = 4;
System.out.println("j = "+j);
int s = i+j;
System.out.println("s = i+j = "+s);
System.out.println("end business logic");
}
}
服务端设置
服务端运行脚本 ex.sh
#!/usr/bin/ksh
CLASSPATH=.
CLASSPATH=$CLASSPATH:./classes
export CLASSPATH
java -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y RemoteDebugger
参数 含义
Xdebug 告诉jvm运行在debug模式下
Xnoagent 不清楚
Xrunjdwp transport 指定连接方式(包括socket传输和内存传输两种,其中内存传输只支持windows,而且内存传输不支持远程调试)
address 监听端口,以接收debug客户端发起的TCP连接。
server =y 表示在remote debugging会话中作为服务端
suspend =y 表示在客户端建立连接前,服务端被挂起;=n 则不会被挂起。 专门调试时建议设置成y
客户端设置
(1) 打开eclipse工作台 (笔者用的是eclipse3.2)
(2) 选择“Run->Debug…”菜单项
(3) 选择“Remote Java Application”,在右键弹出菜单中选择“New”
(4) 在Connect标签项中配置连接方式,远程主机的IP和端口(由于在服务端我们设置的是8787,客户端则设置8787)
(5) 在Source标签项中配置好源代码,一般保留默认的就可以。
调试
(1) 在服务端(笔者实验是在10.10.41.182上)运行脚本ex.sh,会显示程序正监听8787端口,由于suspend设置成了=y,所以必须等到客户端连接上了服务端才会继续运行。
(2) 运行客户端,运行刚才建立的RemoteDebugger(1),注意到远程调试项图标下面有个“L”型的折线图标。
(3)此时可以看到程序会停在本机设的断点上,要提醒的是我们程序实际是跑在服务器上的,却能使用本机的断点,挺奇妙的!
参考资料 http://www.eclipsezone.com/eclipse/forums/t53459.html
转自:http://hi.baidu.com/zeorliu/blog/item/e0eb4be74e337629b9382095.html
分享到:
相关推荐
### Eclipse远程调试Tomcat知识点详解 #### 一、概述 在软件开发过程中,尤其是在Web应用...通过上述步骤,你可以轻松地在远程服务器上调试Java Web应用程序,从而提高开发效率和质量。希望这些内容对你有所帮助!
远程调试是指在一台机器上运行Java应用程序,并允许另一台机器上的IDE连接到该应用程序进行调试的过程。 ##### 3.1 配置应用程序 - **启动诊断工具**:在Linux服务器上,通过Xshell或其他SSH客户端,使用以下命令...
《软件调试:software debugging》这本书深入而系统地介绍了以调试器为核心的各种软件调试技术,旨在帮助读者提升软件调试的效率和能力。 软件调试技术的掌握需要对调试工具和方法有深刻的理解。调试器是一种专门...
《软件调试:Software Debugging》一书,由张银奎撰写,主要探讨了软件开发过程中不可或缺的调试技术。软件调试是解决程序错误、确保代码质量和提高软件可靠性的关键环节。以下将详细介绍书中涉及的一些核心知识点。...
以下将详细讲解如何在Eclipse中进行程序调试。 1. **设置断点**: 断点是调试中的关键元素,它允许我们在特定行暂停程序的执行。在源代码的左侧栏,点击某行号旁边的空白区域,会出现一个红点,表示该行设置了断点...
4. **配置Remote Debugging**:点击`Arguments`选项卡,在`VM arguments`中输入`-Xdebug -Xnoagent -Djava.class.path=your_classpath -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:9000`。...
远程调试的核心是Delphi的Remote Debugging Monitor(RDM),它是一个轻量级的服务器程序,负责在目标机器上接收和执行来自本地IDE的调试命令。在本地开发环境中,开发者可以像平常一样设置断点、查看变量值和调用...
总之,通过开发一个调试JSP的Eclipse插件,不仅可以深入了解Eclipse插件开发的过程,还可以掌握Java调试的基本原理以及如何应用JSR-45规范来支持非Java语言的应用程序调试。这对于提高JSP开发效率和质量具有重要意义...
通过本教程,您将学会如何配置服务器以支持远程调试、部署应用程序到服务器、使用自定义的 Eclipse 启动配置与服务器通信以及在所有服务器中调试 Java 代码和在 JSR-045 兼容服务器中调试 JSP。 #### 前言 本文档...
3. **远程调试代理(Remote Debugging Agent)**:这是安装在调试目标机器上的一小部分软件,它负责与调试器通信,使远程调试成为可能。 4. **日志(Log)**:日志文件记录了应用程序运行时的详细信息,包括错误、...
在本场景中,我们将探讨如何在Windows系统上使用VSCode进行远程调试Linux环境中的C++程序。远程调试允许开发者在本地环境中使用熟悉的工具来调试运行在远程服务器上的代码,这在跨平台开发或远程团队协作时非常有用...
在本课程“第121课:Rasa对话机器人Debugging项目实战之电商零售对话机器人运行流程调试全程演示”中,我们将深入探讨如何利用Rasa框架进行对话机器人的开发和调试,特别是在电商零售领域的应用。Rasa是一款强大的...
Rasa对话机器人Debugging项目实战之电商零售对话机器人运行流程调试全程演示-4 本节课是关于Rasa对话机器人Debugging项目实战之电商零售对话机器人运行流程调试的全程演示第四部分。通过本节课的学习,学生将了解...
在本课程“第122课:Rasa对话机器人Debugging项目实战之银行金融对话机器人全生命周期调试实战”中,我们将深入探讨如何使用Rasa框架构建一个完整的银行金融领域的对话机器人,并进行全生命周期的调试。Rasa是一款...
eclipse 远程 debug 是一种常用的 debugging 技术,用于在远程服务器上调试 Web 应用程序。今天我们将讨论如何使用 eclipse 远程 debug tomcat 和 websphere 的 web 应用。 首先,让我们了解一下 JPDA 的概念。JPDA...
在目标机上启动Visual Studio Remote Debugging Monitor,并运行待调试的程序。在调试机的VS2008中,点击“Debug”菜单 -> “Attach to Process…”(如果在Debug菜单中没有找到,可以尝试在“Tools”菜单中查找)...