Java 远程调试原理(学习笔记)
博客专区 > ND小龙 的博客 > 博客详情
Java 远程调试原理(学习笔记)
ND小龙 发表于3个月前
Java 远程调试原理(学习笔记)
  • 发表于 3个月前
  • 阅读 18
  • 收藏 3
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

Java远程调试的原理

JDWP(Java Debug Wire Protocol)

两个VM之间通过debug协议进行通信,然后以达到远程调试的目的。两者之间可以通过socket进行通信。

其中,调试的程序常常被称为debugger, 而被调试的程序称为 debuggee。

 

应用场景

当你的开发环境在Window,又在远端linux Server或者移动平台上运行Java应用程序,Java提供了一系列的接口和协议让本地Java文件于远端JVM建立联系和通信。

 

Java 调试器架构

从下往上读架构,大致可以解读为: 用于调试的程序使用UI,通过Protocol,调用远端JVM进程。

实质还是JVM,只要确保本地Java 源代码与目标应用程序一致,本地的Java源码就可以用socket连接到远端的JVM,进而执行调试。

 

在Socket Attach模式下,本地只需要有源码,Java应用程序根本不用启动。

Socket Attach方式:

 

实际操作

首先被debug程序的虚拟机在启动时要开启debug模式,启动debug监听程序。

 

在启动程序时,将以下参数选项添加到自定义的命令行中,程序就会以支持RemoteDeubg的方式启动。

wrapper.java.additional.1=-Xdebug
wrapper.java.additional.2=-Xrunjdwp:transport=dt_socket,server=y,address=7899,suspend=n

 

DEBUG选项参数的意思

-XDebug 启用调试;
-Xrunjdwp 加载JDWP的JPDA参考执行实例;
transport 用于在调试程序和VM使用的进程之间通讯;
dt_socket 套接字传输;
server=y/n VM是否需要作为调试服务器执行;
address=7899 调试服务器监听的端口号;
suspend=y/n 是否在调试客户端建立连接之后启动 VM 。

 

然后用一个debug客户端去debug远程的程序,如:用Eclipse自带的debug客户端,填写运行被debug程序的虚拟机监听的端口号和地址,选择connect方式为attach。

在程序中打好断点,打开Eclipse配置

Run-->Debug Configurations…-->Remote java Application-->右键New-->填写Host和Port(例如,Host:10.75.0.103,Port:7899)-->Debug

 

注意,如果 Java 源代码与目标应用程序不匹配,调试特性将不能正常工作。

选择 Allow termination of remote VM 选项 可以在应用程序调试期间终止连接

这样远程调试连接上之后,就可以像在本地调试Java程序一样来调试远端的Java应用程序。

 

 

IDE快捷键

Eclipse debug快捷键

F5 Step into

F6 Step over

F7 Step out

F8 continue to the next breakpoint

 

Intellij debug的快捷键

F7,Step into

F8,Step over

Shift+F8, Step out

Alt+F9,运行至光标处

F9,恢复程序

共有 人打赏支持
粉丝 10
博文 45
码字总数 2295
×
ND小龙
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: