文档章节

Java 远程调试原理(学习笔记)

ND小龙
 ND小龙
发布于 2017/08/29 01:34
字数 678
阅读 67
收藏 3

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,恢复程序

本文转载自:http://blog.csdn.net/alli0968/article/details/42176721

共有 人打赏支持
ND小龙
粉丝 10
博文 45
码字总数 2295
作品 0
福州
weblogic debug配置

1.1. 软件环境 Eclipse 3.1 Weblogic 8.1 1.2. 工作原理 远程调试就是允许利用 java tools 里面的jdb 程序连接远程的JAVA虚拟机,进行远程debug ,同时远程的虚拟机启动时候需要开启 debug ...

ianLi
2012/11/02
0
0
eclipse远程debug,java项目

首先java项目要支付可远程调试得到启动时加入参数 启动远程调试 启用JMX,远程性能观察 eclipse配置 其中:host为远程java程序提供远程调试的IP,post为远程java程序提供远程调试的端口 使用 ...

有事没事
2014/12/05
0
0
Eclipse远程调试Tomcat

最近,一直在研究Tomcat的工作内幕,主要的方法就是参考《How Tomcat Works》 这本书和Tomcat 5.5.26的源代码。 Tomcat的代码结构还是比较清晰的,注释也比较全。但是代码毕竟是静态的,难以...

一枚Sir
2014/08/04
0
0
编写你的第一个HelloWorld

写在前面的话 因为Java基础是以后学习框架的基石,因此开个文集首先写写Java基础,本来想直奔基础知识的介绍,但是为了保证知识的完整性,因此从Java安装和运行“hello world”开始(虽然百度...

nanaFighting
06/15
0
0
远程调试运行在Resin上面的Web应用程序

有时候,我们不得不放弃在本地调试我们的程序,把我们的程序先布署到服务器,然后把调试信息都记在日志中,用眼睛瞅日志来调试程序。 不是用这种方式不行,只是效率太低,本来写程序是一件开...

古城痴人
2014/03/27
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringCloud SpringBoot mybatis分布式Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用...

itcloud
16分钟前
0
0
c++ std::bind和std::function

定义于头文件 <functional> std::bind 函数绑定,https://zh.cppreference.com/w/cpp/utility/functional/bind // bind 用例#include <iostream>#include <functional> // 自定义的一......

SibylY
18分钟前
0
0
SecureCRT的安装与破解(过程很详细!!!)

SecureCRT的安装与破解(过程很详细!!!) SecureCRT的安装与破解(过程很详细!!!) 使用SecureCRT可以方便用户在windows环境下对linux主机进行管理,这里为大家讲一下SecureCRT的破解方...

DemonsI
23分钟前
0
0
介绍几款可用的web应用防火墙

目前有两款,基于软件和基于应用程序的web应用防火墙。基于软件的产品布置在Web服务器上,而基于应用程序的产品放置在Web服务器和互联网接口之间。两种类型的防火墙都会在数据传入和传出web...

上树的熊
29分钟前
1
0
用Visual Studio开发以太坊智能合约

区块链和以太坊 自从我熟悉区块链、以太坊和智能合约以来,一直失眠。 我一直在阅读,阅读和阅读,最后我能够使用一些工具,他们建议使用以太坊网站官方客户端应用程序(Ethereum Wallet)也...

geek12345
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部