myeclipse可通过jpda协议远程调试sun application server:先用asadmin命令添加-agentlib:jdwp参数启用调试,再在myeclipse中配置remote java application连接对应ip和端口,确保源码一致且防火墙放行。

MyEclipse 本身不原生支持 Sun Application Server(即 GlassFish 的前身,现已被 Oracle GlassFish 取代),但可通过标准 Java 远程调试协议(JPDA)实现远程调试。关键不是“MyEclipse 配置 Sun 服务器”,而是让 Sun App Server 启动时启用 JDWP 调试代理,再用 MyEclipse 以 Remote Java Application 方式连接。整个过程分三步:改服务器启动参数、确保端口可达、在 MyEclipse 中正确配置连接。
1. 修改 Sun Application Server 启动参数启用调试
Sun Application Server(如 8.x 或早期 9.x 版本)使用 asadmin 管理,其域(domain)的 JVM 选项需显式添加 JPDA 参数。不建议修改脚本文件(如 startserv),而应通过 asadmin 命令安全配置:
- 进入 domain 目录(例如:
$AS_HOME/domains/domain1/config/) - 编辑
domain.xml,定位到<jvm-options></jvm-options>节点,在其中插入以下参数(注意:必须在同一行,无换行):-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 - 或更推荐方式:使用 asadmin 命令动态添加(重启后生效):
asadmin create-jvm-options "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000" - address=8000 可替换为任意空闲端口(如 9009),确保该端口未被占用且防火墙放行
2. 启动服务器并验证调试端口监听
完成配置后,正常启动 domain:
- 执行:
asadmin start-domain domain1 - 检查端口是否监听:
netstat -an | grep 8000(Linux/macOS)或netstat -ano | findstr :8000(Windows) - 成功时应看到类似:
tcp 0 0 *:8000 *:* LISTEN - 若无响应,请确认 domain 是否真正启动成功,并检查日志中是否有 JDWP 加载失败提示(如 “JDWP agent failed”)
3. MyEclipse 中创建 Remote Java Application 配置
本地 MyEclipse 不需要安装额外插件,直接使用内置调试器:
- 菜单栏选择:Run → Debug Configurations…
- 左侧双击 Remote Java Application 创建新配置
- 填写关键字段:
• Project:选择与远程部署代码完全一致的 MyEclipse 项目(源码必须匹配,否则断点无效)
• Host:Sun App Server 所在机器的 IP 地址(非 localhost,即使同机也要填实际 IP 或 127.0.0.1)
• Port:与上面配置的address=8000保持一致 - 切换到 Source 标签页,点击 Add… → Java Project,选中当前项目,确保能正确解析类名和行号
- 点击 Apply,再点 Debug
4. 注意事项与常见问题
调试建立后,MyEclipse 底部会显示 Debug 视图,控制台输出“Connected to the target VM”。但需警惕以下典型问题:
- Connection refused:多数因防火墙拦截(服务器端需开放调试端口)、IP 填错、或服务器未真正加载 JDWP(检查 domain 日志是否有 “Listening for transport dt_socket…”)
- Source not found:源码版本与远程 class 不匹配,或 Source Path 未包含对应 module;务必确认 WAR/EAR 中未打包带调试信息的 class,优先以编译输出目录为准
-
Suspend=n 是关键:若设为
suspend=y,服务器会卡在启动阶段等待调试器连接,导致服务无法响应 HTTP 请求 - Sun App Server 9.1+ 推荐使用
-agentlib:jdwp替代旧式-Xdebug -Xrunjdwp,后者在较新 JVM 上已弃用











