IDEA远程调试

2023-11-17

1 概述

原理:本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息。

被调试程序的远程虚拟机:作为 Debug 服务端,监听 Debug 调试指令。jdwp是Java Debug Wire Protocol的缩写。

调试程序的本地虚拟机:IDEA 中配置的 Remote Server,指定 Debug 服务器的Host:Port,以供 Debug 客户端程序连接。

2 设置

2.1 IDEA 中指定 Debug 服务器

  • 点击主窗口菜单 Run / Edit Configurations,打开“Run/Debug Configurations”窗口;

  • 点击工具栏上的“+”按钮,下拉菜单中选择“Remote”;

  • 设置 Host 为远程服务器的域名或IP,保持 Port=5005 无需调整;

  • 复制命令行参数,形如 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

2.2 远程服务中开启 Debug 服务(对于个人项目部署到自己买的服务器上的情况,在职场基本不需要)

2.2.1 对于 SpringBoot

命令行添加选项,并重启:

## 注意新参数必须在 -jar 之前
jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar test.jar

2.2.2 对于 Tomcat

启动脚本中添加选项,并重启:

## sudo vim $CATALINA_HOME/bin/catalina.sh
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

2.3 远程服务器防火墙端口放行

### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5005 -j ACCEPT
### 重启生效: sudo systemctl restart iptables

3 开始调试

  • 要求:双方代码一致,否则远程调试无法启动;

  • 本地启动刚刚配置的 Remote Server,正常时会看到日志: Connected to the target VM, address: 'xxx:5005', transport: 'socket'

  • 本地 IDEA 代码中设置断点

  • 浏览器或手机 HTTP 访问服务器

  • IDEA 即可在断点暂停并跟踪

4 关闭调试

服务器上多开放个端口是不安全的,调试完毕后可恢复防火墙设置。

而 Java 服务器开启 Debug 服务器的功能可以保留,以便之后再次调试。

#k8s 查看服务的 pod的信息包括ip

kubectl get po -n namspace(命名空间) -o wide|grep 服务名

一般公司的远程debug只会开启测试环境的,生产是不允许远程debug,

因为远程debug是单线程的,如果你连接的是打了normal标签的pod,在你调试的过程中

会影响到测试环境其他人使用这个服务,如果想在测试环境远程debug,建议给自己要测的代码发布的时候打上一个特殊的标签,再连接这个pod进行远程debug。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IDEA远程调试 的相关文章

  • 为什么byteArray的长度是22而不是20?

    我们尝试从字符串转换为Byte 使用以下 Java 代码 String source 0123456789 byte byteArray source getBytes UTF 16 我们得到一个长度为 22 字节的字节数组 我们不确定这个
  • IntelliJ Ultimate 在 Play 2.3 (Java) 项目测试中找不到路由

    虽然我的测试运行得很好 但 IntelliJ 抱怨它找不到路由对象 并且代码自动完成无法工作 我已经查看了所有文档 这应该可以工作 这是 IntelliJ 的报告内容 关于我的项目配置可能有什么问题有什么想法吗 这很可能与以下事实有关 ro
  • 如何避免 Java 中的忙旋转

    我有一个多线程应用程序 其中一个线程向另一个线程发送消息 等待线程轮询消息并做出反应 处理锁 像这样 等待线程代码 while true if helloArrived System out println Got hello if bye
  • 如何让 HttpClient 返回状态码和响应正文?

    我试图让 Apache HttpClient 触发 HTTP 请求 然后显示 HTTP 响应代码 200 404 500 等 以及 HTTP 响应正文 文本字符串 重要的是要注意我正在使用v4 2 2因为大多数 HttpClient 示例都
  • IntSummaryStatistics的summaryStatistics方法

    为什么空 IntStream 上的 summaryStatistics 方法返回整数的最大和最小值作为流中存在的最大和最小 int 值 IntStream intStream IntStream of IntSummaryStatistic
  • 竞争性编码 - 以最低成本清除所有级别:未通过所有测试用例

    当我遇到这个问题时 我正在一个竞争性编码网站上解决问题 问题指出 游戏中有 N 个关卡和 M 种可用武器 等级编号从 0 到 N 1 武器编号从 0 到 M 1 您可以按任意顺序清除这些级别 在每个关卡中 需要这些 M 武器的某些子集才能通
  • 解密 TLS 1.2 AES-GCM 数据包

    我正在开发一个 Java 程序来解密TLS 1 2正在使用的会话TLS RSA WITH AES 128 GCM SHA256密码 我使用wireshark 录制了一个测试会话 这大师秘密是已知的 No Time Protocol Leng
  • 将 RequestBody json 转换为对象 - Spring Boot

    我是 java 开发的初学者 但之前有 PHP 和 Python 等编程语言的经验 对于如何进行 Spring Boot 的开发几乎没有什么困惑 我正在开发一个rest API 它有以下请求 key value key1 value1 pl
  • Tomcat - 多个 webapps 文件夹

    是否可以有多个文件夹来放置要部署的应用程序 这些是如何定义的 是否可以将一个文件夹限制为仅是 domain com 的应用程序 而不是其他域 Thanks 看一眼conf server xml
  • a4j:commandLink 重新渲染后停止工作

    我创建了这个测试用例来隔离我的问题 一旦轮询执行 ajax 更新 a4j commandLink 操作就不会执行 如果我们在轮询重新渲染之前关闭 modalPanel 则会执行它 有什么建议吗 提前致谢 测试 xhtml
  • “未找到 JAVA 路径。请检查 JAVA 是否已安装。”初始化 RSelenium 时出错

    我正在尝试启动一个 RSelenium 会话到 webscrape 但是 当运行此代码时 driver lt rsDriver browser c chrome chromever 76 0 3809 126 port 4444L 我收到此
  • Spring Boot 多部分文件始终为 null

    我正在使用 Spring Boot version 1 4 0 RC1 和 Spring Boot Stormpath 1 0 2 我正在尝试使用分段文件上传 但控制器中的 MultipartFile 始终为空 当我使用 RequestPa
  • 为什么java(>=7版本)不支持运行没有main方法的程序? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 class WithoutMain static System out println Without main class Sy
  • java:如何设置全局线程ID?

    是否有可能为线程设置唯一ID 在分布式系统中 线程是在许多不同的机器上创建的 例如通过 RMI 我需要它来创建日志消息 根据我的研究 我知道可以使用 log4j mdc ndc 来完成 但只能在单线程中完成 我的问题是 在创建线程时必须设置
  • Java 泛型:将 Object o 的类与 进行比较

    假设我有以下课程 public class Test
  • logcat 信息出现在 Android Studio 的“运行”选项卡中

    我的 android studio 运行选项卡很简单 然后它变得更难并给我更多信息 例如 logcat 中的信息 如何禁用或删除第二张图片中出现的更多信息并返回到第一张图片中的第一个外观 我只需要正在运行的 flutter 应用程序的日志输
  • Eclipse 在单独的窗口中打开代码

    我正在 eclipse 中编程 在两个显示器设置上运行 在其中一台显示器上 我只获得了项目资源管理器和编辑器作为自定义透视图 而在另一台显示器上 我获得了其他工具 例如控制台 调试 任务 变量 断点等 例如 当我单击任务视图中的任务时 这将
  • 有没有办法处理Java堆空间异常[重复]

    这个问题在这里已经有答案了 我正在寻找将文件输入流转换为大文件 文件大小为 100MB 并且抛出 java lang OutOfMemoryError Java Heap space import java io FileInputStre
  • 从数字列表中生成所有唯一对,n 选择 2

    我有一个元素列表 假设是整数 我需要进行所有可能的两对比较 我的方法是 O n 2 我想知道是否有更快的方法 这是我在java中的实现 public class Pair public int x y public Pair int x i
  • 如何从 jenkins 的现有项目生成 .hpi 插件

    我正在尝试使用 jenkins 的性能插件 但最新版本存在一些问题 如链接中所述 https issues jenkins ci org browse JENKINS 27100 https issues jenkins ci org br

随机推荐

  • Python基础教程:第一门编程语言 第6章习题3 写一个猜数字小游戏,要能提示大了还是小了,并且有轮数限制。

    import random number random choice range 101 随机抽出0 100中一个数 guess 102 n 10 while guess number if n 0 限制次数 print 游戏失败 brea
  • 课程作业1-简单课程设计作业——个人通讯录数据库系统(java,MySQL)

    总结介绍 本次个人通讯录数据库系统主要目的是为了做出一个功能齐全 简单易用的信息管理系统提高保存联系人效率 由于能力有限 界面做的有点不好看 还有在登录的编程只做到将登录名和密码设为固定的字符值 修改只能从代码处进行修改 未做到可注册多个用
  • 02-----关于Qt下报error: undefined reference to `__imp_WSAGetLastError‘(Windows环境)

    1 关于Qt下报error undefined reference to imp WSAGetLastError Windows环境 错误已经很明确了 就是我们在Windows下使用网络相关的接口时 必须初始化网络库 即socket库的编译
  • JDBC常用连接URL

    1 Oracle8 8i 9i数据库 thin模式 Class forName oracle jdbc driver OracleDriver newInstance String url jdbc oracle thin localhos
  • SpringBoot整合hibernate

    添加springboot依赖 先使用idea创建maven项目 创建过程可以参考下面的博客 http blog csdn net supervictim article details 53490046 创建完maven项目之后添加spri
  • 用例编号怎么规定_怎么看检测报告

    一 怎么看检测报告 1 无论是使用什么系统来检测论文 在检测完成之后都会出现有查看报告 下载报告的相关项目或者按钮 直接点击查看报告项就可以查看报告 点击下载报告项就会将检测报告用PDF的形式保存到本地 2 以知网的检测报告为例 在检测报告
  • (小白教程)anaconda安装配置及可能遇到的问题解决

    相信来搜索的都懂anaconda 的绝美优势 这里便不再赘述了 啥也不说 开干 第一步 下载并安装软件 https www anaconda com 选择适合你的版本 我这里是window10 以管理员身份运行 选择All Users 继续
  • APNS设置

    APNS设置 openssl x509 in aps development cer inform der out MobileCAPCert pem openssl pkcs12 nocerts out MobileCAPKey pem
  • 【javaScript面试题】2023前端最新版javaScript模块,高频24问

    博 主 初映CY的前说 前端领域 个人信条 想要变成得到 中间还有做到 本文核心 博主收集的关于javaScript的面试题 目录 一 2023javaScript面试题精选 1 js的数据类型 2 双等和三等的区别 3 js中布尔值为fa
  • css3选择器之:nth-child(n)和:nth-of-child(n)

    nth child n 和 nth of child n nth child n 选择器匹配属于其父元素的第 N 个子元素 不论元素的类型 通俗一点的用法就是 nth child n 表示谁的弟n个 比如li nth chidl 3 表示页
  • Llama 2: Open Foundation and Fine-Tuned Chat Models

    文章目录 TL DR Introduction 背景 本文方案 实现方式 预训练 预训练数据 训练细节 训练硬件支持 预训练碳足迹 微调 SFT SFT 训练细节 RLHF 人类偏好数据收集 奖励模型 迭代式微调 RLHF 拒绝采样 Rej
  • 触发器(删除操作)

    在删除xs时 把xscj中对应的记录删除 DELIMITER CREATE TRIGGER xs delete AFTER DELETE ON xs FOR EACH ROW BEGIN DELETE FROM xscj WHERE xh
  • 云效知识库 Thoughts,企业文档管理工具

    云效知识库 Thoughts 企业文档管理工具 云效知识库是一款企业 知识管理 工具 通过独立的知识库空间 结构化地组织在线协作文档 实现企业知识的积累和沉淀 促进知识的高度复用和流通 云效知识库是云效团队孵化的一个创新项目 从最早的构想到
  • git commit -m 'project initialized'报did not match any file known to git的错误的问题

    摘要 这两天需要将本地的代码和码云上的代码进行统一下 需将本地的代码上传到码云中 在使用git的时候报了错 实现过程 首先在控制台上输入命令行 查看本地的新的文件 git status 输入命令行 将新的文件新增到git的缓冲区 git a
  • 海量数据存储读后感

    海量数据存储系列读后感 读了淘宝的海量数据存储系列 感觉豁然开朗 见地提升了很多 现在简单用自己的话总结一下里边的 精髓 SQL与关系代数 第1 2章 第一 二章内容比较简单 第一章给了我们一个模型 他是一个三层结构 模型如下 用户API
  • Scratch和机器人编程有什么区别?

    Scratch编程和机器人编程的区别就是 Scratch是面向青少年的图形化简易编程软件 孩子们可以通过不同功能的指令方块组合 创作出交互式故事 动画 游戏 音乐 艺术和科学计算等作品 而机器人编程则是以机器人为载体 通过程序指令控制完成机
  • MySQL中的编码问题Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column '字段名' at row 1 问题的解决方法

    今天往mysql数据库中添加数据时出现了如标题的错误 因为刚刚把数据库版本从8 0换成了5 5 27版本 于是网上搜了一下答案 搜了很多修改了都没用 最后终于成功了之后总结了一下 一 修改mysql数据库的编码为uft8mb4 修改mysq
  • 特征工程介绍

    特征工程基础知识 文章目录 1 特征工程是什么 2 数据预处理 2 1 无量纲化 2 1 1 标准化 2 1 2 区间缩放法 2 1 3 归一化 2 2 特征二值化 2 3 独热编码 2 4 缺失值计算 3 特征选择 3 1 Filter
  • Python -- Numpy:添加一列

    np insert 指定位置添加一列 a np arange 12 reshsape 3 4 print a array 0 1 2 3 4 5 6 7 8 9 10 11 b np ones 3 print b array 1 1 1 n
  • IDEA远程调试

    1 概述 原理 本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信 传递调试指令和调试信息 被调试程序的远程虚拟机 作为 Debug 服务端 监听 Debug 调试指令 jdwp是Java Debug Wire