Eclipse远程Debug

JPDA简介

JPDA(JavaTM Platform Debugger Architecture ),是为Java平台上的调试器定义了一个标准的体系结构,使您能够在各种环境中轻松调试 Java 应用程序,该体系结构包括3个主要组成部分:JVM TI、JDI和JDWP。

JDWP是什么?

JDWP的全称是Java Debug Wire Protocol,它定义了JPDA front-end和JPDA back-end之间通讯信息的二进制格式。这里的通讯信息主要包括两种:调试器发送给JVM的请求信息和JVM发送给调试器的调试信息。

 

总结一下,调试器 调用JDK提供的JDI实现 (JPDA front-end),经由JDWP协议 ,和JVM自带的JPDA back-end (jdwp.dll, jdwp.so, ...)进行通讯。JPDA back-end 通过调用JVM TI接口 ,从而获知调试信息,或发送控制命令。然后,JPDA back-end 将调试信息或命令执行结果,通过JDWP协议 ,返回给调试器 。

 

如何启用JPDA

默认情况下,JVM并没有启用JPDA back-end。需要在启动JVM的命令行加载以下参数:

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

 

-Xdebug

启用调试特性

-Xrunjdwp

启用JDWP实现,它包含若干子选项:

transport=dt_socket

JPDA front-end和back-end之间的传输方法。dt_socket表示使用套接字传输。

address=8000

JVM在8000端口上监听请求。

server=y

y表示启动的JVM是被调试者。如果为n,则表示启动的JVM是调试器。

suspend=y

y表示启动的JVM会暂停等待,直到调试器连接上。

 

suspend=y这个选项很重要。如果你想从Tomcat启动的一开始就进行调试,那么就必须设置suspend=y。


一、远程调试Tomcat参数设置

修改 Tomcat/bin/startup.bat 文件,在最前面加上如下代码
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
注意上面命令 必须写成一行中间不能有换行, - 前是空格 - 后是非空格,由于显示器分辨率不同,该文章在显示的时候可能会有换行的情况。
二、远程调试Hadoop参数设置

$HADOOP_HOME/etc/hadoop/hadoop-env.sh文件的最后添加需要debug的进程

#远程调试NameNode
export HADOOP_NAMENODE_OPTS="-agentlib:jdwp=transport=dt_socket,address=8888,server=y,suspend=y"

#远程调试DataNode
export HADOOP_DATANODE_OPTS="-agentlib:jdwp=transport=dt_socket,address=8889,server=y,suspend=y"

#远程调试ResourceManager
export YARN_RESOURCEMANAGER_OPTS="-agentlib:jdwp=transport=dt_socket,address=8890,server=y,suspend=y"

#远程调试NodeManager
export YARN_NODEMANAGER_OPTS="-agentlib:jdwp=transport=dt_socket,address=8899,server=y,suspend=y
三、在Eclipse中远程调试NameNode示例

1、在Eclipse中导入Hadoop的源码,找到NameNode的main方法,打一个断点


2、右键Debug AS进入配置界面,并点击Debug


三、在远程主机的$HADOOP_HOME/etc/hadoop/hadoop-env.sh中添加

export HADOOP_NAMENODE_OPTS="-agentlib:jdwp=transport=dt_socket,address=8888,server=y,suspend=y"
四、启动NameNode

五、进入调试模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值