datax(24):远程调试datax

datax(24):远程调试datax一、datax开启远程debug1、环境本地:win10,idea专业版2020.3,datax3.0远程:CentOS6.5,datax3.02、效果3、步骤3.1远程开启debug/apps/datax/bin/datax.py/apps/datax/job/job.json-d即在后面添加-d即可,默认端口为9999,也可以自行修改datax.py文件第35行REMOTE_DEBUG_CONFIG=”-Xdebug-Xrunjdwp:transport=dt

大家好,又见面了,我是你们的朋友全栈君。

一、datax开启远程debug

1、环境

本地:
win10,idea专业版2020.3,datax3.0
远程:
CentOS6.5,datax3.0

2、效果

在这里插入图片描述

3、步骤

3.1 远程开启debug
/apps/datax/bin/datax.py /apps/datax/job/job.json -d

即在后面添加-d 即可,默认端口为9999,也可以自行修改datax.py文件第35行

 REMOTE_DEBUG_CONFIG = "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9999"
3.2 本地idea设置远程

在这里插入图片描述


二、远程debug原理

1、原理

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

我们知道,Java 程序都是运行在 Java 虚拟机上的,我们要调试 Java 程序,事实上就需要向 Java 虚拟机请求当前运行态的状态,并对虚拟机发出一定的指令,设置一些回调等等,那么 Java 的调试体系,就是虚拟机的一整套用于调试的工具和接口。

对于 Java 虚拟机接口熟悉的人来说,您一定还记得 Java 提供了两个接口体系,JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface),而它们,以及在 Java SE 5 中准备代替它们的 JVMTI(Java Virtual Machine Tool Interface),都是 Java 平台调试体系(Java Platform Debugger Architecture,JPDA)的重要组成部分。 Java SE 自 1.2.2 版就开始推出 Java 平台调试体系结构(JPDA)工具集,而从 JDK 1.3.x 开始,Java SDK 就提供了对 Java 平台调试体系结构的直接支持。顾名思义,这个体系为开发人员提供了一整套用于调试 Java 程序的 API,是一套用于开发 Java 调试工具的接口和协议。本质上说,它是我们通向虚拟机,考察虚拟机运行态的一个通道,一套工具。理解这一点对于学习 JPDA 非常重要。

换句话说,通过JPDA 这套接口,我们就可以开发自己的调试工具。通过这些 JPDA 提供的接口和协议,调试器开发人员就能根据特定开发者的需求,扩展定制 Java 调试应用程序,开发出吸引开发人员使用的调试工具。前面我们提到的 IDE 调试工具都是基于 JPDA 体系开发的,区别仅仅在于它们可能提供了不同的图形界面、具有一些不同的自定义功能。另外,我们要注意的是,JPDA 是一套标准,任何的 JDK 实现都必须完成这个标准,因此,通过 JPDA 开发出来的调试工具先天具有跨平台、不依赖虚拟机实现、JDK 版本无关等移植优点,因此大部分的调试工具都是基于这个体系的。

  1. JPDA模块层次
    在这里插入图片描述
  2. JPDA层次比较

在这里插入图片描述

更加深入的介绍文档可以参见 https://developer.ibm.com/zh/articles/j-lo-jpda1/


2、idea 和eclipse的远程debug原理

客户端(idea 、eclipse 等)之所以可以进行调试,是由于客户端 和 服务端(程序端)进行了 socket 通信,通信过程如下:

1、先建立起了 socket 连接

2、将断点位置创建了断点事件通过 JDI 接口传给了 服务端(程序端)的 VM,VM 调用 suspend 将 VM 挂起

3、VM 挂起之后将客户端需要获取的 VM 信息返回给客户端,返回之后 VM resume 恢复其运行状态

4、客户端获取到 VM 返回的信息之后可以通过不同的方式展示给客户;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145600.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java配置环境变量

    Java配置环境变量Java配置环境变量要想配置环境变量先要下载好JDK点击这里可以下载可以通过鼠标下滑找到以前的版本,网页最前面的部分是最新版本,一般来说用的都是jdk1.8这个版本。点击箭头位置下载根据自己需要下载,如何知道自己是x86还是x64呢?windows电脑右键点击此电脑—>属性知道了这个,就可以点进去下载了!如果需要账户就创建账户,然后就可以下载了,因为步骤简单,不放出来了!好的,现在默认JDK已经下好了,但是笔者的JDK版本不一致,但是配置环境变量是一样的下载好之后会得到这样

    2022年6月12日
    23
  • 做测试的一定要知道EFI Shell 命令参考

    做测试的一定要知道EFI Shell 命令参考EFIShell命令参考命令说明引导命令—EFIShell 与nPartition引导有关的命令。

    2022年7月19日
    24
  • 递归数列求极限的方法证明_归纳法证明数列极限

    递归数列求极限的方法证明_归纳法证明数列极限高等数学是理工科考研都需要考的科目之一,不管是数一、数二、数三都是考纲中的内容。而极限又是高数中的基础,是微分学的基础。所以,我们一定要打好基础,才能在考试中拿到高分。冷月总结了递归数列极限的求法和证明,希望能够帮助到各位小伙伴。本文为李正元数一全书为参考。

    2025年10月31日
    1
  • 深入理解C++11_c++ string char

    深入理解C++11_c++ string char1.语法decltype(expression)decltype(declaretype)用于查询表达式的类型,即编译时期进行自动类型推导。如上所示,该语句返回expression表达式的类型。注意:decltype仅仅是查询表达式的类型,并不会对表达式求值。2.推导规则1)如果expression是一个不被括号()包围的表达式,或者是一个类成员访问表达式,或者是一个单独的变量,那么decltype(exp)的类型就和exp一致,这是最普遍最常见的情况。2)

    2025年10月12日
    2
  • 建立数据库连接费时吗_数据库连接错误是什么原因

    建立数据库连接费时吗_数据库连接错误是什么原因相信很多朋友都遇到过WordPress提示“建立数据库连接时出错”这个问题,英文为“Errorestablishingadatabaseconnection”。[原创文章:www.777y.com]“建立数据库错误时出错”意味着由于某种原因,您的站点PHP代码无法与MySQL数据库连接以获取显示该页面所需的数据。[本文来自:www.777y.com]数据库连接出错的原因和处理方案数据库连接…

    2022年9月24日
    3
  • AutoEventWireup 的意义

    AutoEventWireup 的意义AutoEventWireup指:如果Page指令的AutoEventWireup属性被设置为true(或者如果缺少此属性,因为它默认为true),该页框架将自动调用页事件,即Page_Init和Page_Load方法。在这种情况下,不需要任何显式的Handles子句或委托。

    2022年5月28日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号