Java的远程debug

本文介绍Java远程调试的基础知识,详细解析-Xdebug等参数的作用,并演示如何使用Eclipse进行远程调试的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中的远程debug调试
java -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
参数 含义
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”型的折线图标。
在debug Perspective模式下就可以看到阻塞于断点的jvm了
例如Java HotSpot(TM) 64-Bit Server VM[datanode-2:8088]
Thread [main] (Suspended (breakpoint at line 282 in DataNode))
DataNode.startDataNode(Configuration, AbstractList<File>) line: 282
DataNode.<init>(Configuration, AbstractList<File>) line: 232
DataNode.makeInstance(String[], Configuration) line: 1363
DataNode.instantiateDataNode(String[], Configuration) line: 1318
DataNode.createDataNode(String[], Configuration) line: 1326
DataNode.main(String[]) line: 1448

2011.12.08
1. tomcat debug
/usr/java/default/bin/java -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8082 -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

2011.12.13
1. /usr/java/default/bin/jstat -gcutil pid 500 100
2. strace jps
3. /usr/java/default/bin/jstack -F 9107(pid) 堆栈信息

2012.05.17
1. Eclipse 中打断点, debug时, 提示 "Unable to install breakpoint due to missing line number attributes. Modify compiler options to generate line number attributes" 是因为被debug的jar包,没有行信息, 要在javac里加 debug="true" 参数重新编译jar文件, 再debug就可以了.
### 配置远程调试的步骤 远程调试是一种非常实用的调试方法,尤其适用于本地环境无法复现的问题或部署在服务器上的应用程序。以下是如何在不同环境中配置远程调试的详细步骤。 #### 配置 Tomcat 远程调试 在使用 Tomcat 作为服务器时,可以通过修改启动脚本的方式启用远程调试功能。 1. **修改 Tomcat 启动脚本** 打开 `Tomcat/bin/startup.bat` 文件,在文件开头添加以下配置: ```bash SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 ``` 其中,`address=8000` 表示远程调试端口为 8000,可以根据需要修改为其他端口。 2. **启动 Tomcat** 启动 Tomcat 后,检查控制台输出,确认配置已生效。正常情况下会看到类似以下的输出: ``` Listening for transport dt_socket at address: 8000 ``` 3. **配置 Eclipse** 在 Eclipse 中进行远程调试,需要配置一个远程调试任务。 - 点击 Eclipse 上方的 **Debug** 图标,选择 **Debug Configurations**。 - 在左侧找到 **Remote Java Application**,双击创建一个新的远程调试任务。 - 配置目标主机的 IP 地址和调试端口(如 8000)。 - 点击 **Debug** 按钮,进入调试模式。 4. **验证调试** 在 Eclipse 的源码项目中设置断点,然后通过访问服务器上的应用触发断点。如果配置正确,Eclipse 将进入调试模式,并允许逐步执行代码、查看变量等操作。 #### 配置 WebSphere 远程调试 WebSphere 的远程调试方式与 Tomcat 类似,主要区别在于 JVM 参数的配置。 1. **修改 WebSphere 的 JVM 参数** 在 WebSphere 的管理控制台中,导航到 **Servers > Server Types > WebSphere application servers**,选择目标服务器并进入 **Java and Process Management > Process Definition > Java Virtual Machine**。 添加以下 JVM 参数: ```bash -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 ``` 2. **配置 Eclipse** Eclipse 的配置与 Tomcat 相同,只需确保 IP 地址和端口与 WebSphere 的调试端口一致即可。 3. **验证调试** 与 Tomcat 类似,在 Eclipse 中设置断点并触发请求,即可进入调试模式。 #### 配置 IntelliJ IDEA 远程调试 IntelliJ IDEA 也支持远程调试,适用于如 Hive 等场景。 1. **启动带调试参数的应用** 例如,在启动 Hive 时添加调试参数: ```bash bin/hive --debug -hiveconf hive.root.logger=DEBUG,console ``` 2. **配置 IntelliJ IDEA** - 打开 **Run > Edit Configurations**。 - 点击 **+** 号,选择 **Remote JVM Debug**。 - 配置主机 IP 和调试端口(默认 5005)。 - 应用配置并启动调试。 3. **验证调试** 在 IntelliJ IDEA 的源码中设置断点,并在控制台输入命令(如 `show databases`),触发断点后即可进入调试模式。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值