远程调试运行在Resin上面的Web应用程序

2023-11-02

有时候,我们不得不放弃在本地调试我们的程序,把我们的程序先布署到服务器,然后把调试信息都记在日志中,用眼睛瞅日志来调试程序。

不是用这种方式不行,只是效率太低,本来写程序是一件开心的事情,却变得令人心烦。

其实,Java本身支持远程调试,只要增加一些JVM的启动参数,就可以远程调试了,JVM启动参数就像下面的样子:

-Xdebug -Xnoagent -Djava.compiler=NONE 
-Xrunjdwp:transport=dt_socket,server=y,address=9988,suspend=n

下面是参数的说明:

-XDebug               启用调试。
-Xnoagent             禁用默认sun.tools.debug调试器。
-Djava.compiler=NONE  禁止 JIT 编译器的加载。
-Xrunjdwp             加载JDWP的JPDA参考执行实例。
transport             用于在调试程序和 VM 使用的进程之间通讯。
dt_socket             套接字传输。
dt_shmem              共享内存传输,仅限于 Windows。
server=y/n            VM 是否需要作为调试服务器执行。
address=9988          调试服务器的端口号,客户端用来连接服务器的端口号。
suspend=y/n           是否在调试客户端建立连接之后启动 VM 。

写出来的样子大概是这样的:

java  -Xdebug -Xnoagent -Djava.compiler=NONE 
-Xrunjdwp:transport=dt_socket,server=y,address=9988,suspend=n test.package.Main


配置远程服务器

如果我们想要调试一个Web应用程序,那么在启动Web服务器时需要增加上面的JVM参数。

由于最近我在使用Resin,所以就以Resin 4.0作为例子来说明一下(主要原因是网上说的都不管用)。

  • 环境:CentOS 6.3

  • 应用服务器:Resin4.0

  • JDK版本:JDK6

# 进入Resin的配置文件目录
# cd /usr/local/resin/conf
# ll
total 80
-rw-r--r-- 1 root root 12620 Oct 24 22:42 app-default.xml
-rw-r--r-- 1 root root 6447 Oct 24 22:42 cluster-default.xml
-rw-r--r-- 1 root root 21594 Oct 24 22:42 health.xml
drwxr-xr-x 2 root root 4096 Oct 24 22:42 keys
drwxr-xr-x 2 root root 4096 Oct 24 22:42 licenses
-rw-r--r-- 1 root root 5119 Oct 24 22:42 resin.properties
-rw-r--r-- 1 root root 12404 Mar 27 18:08 resin.xml


Resin启动时的JVM参数在resin.xml里面配置。

# vim resin.xml

<cluster id="app-youyuan">
    <root-directory>.</root-directory>
    <server-default>
      <http address="*" port="8080" />
        <jvm-arg>-Xms1024m</jvm-arg>
        ... ... ...
        <jvm-arg>-Xdebug</jvm-arg>
        <jvm-arg>-Xrunjdwp:transport=dt_socket,address=9988,server=y,suspend=n</jvm-arg>
    </server-default>
  </cluster>


cluster -> server-default 结点里面设置JVM参数。

设置完成后重启resin:

/usr/local/resin/bin/resin.sh restart -server youyuan

启动完后,检查端口:

 # netstat -apn | grep 9988
tcp 0 0 你机器的IP:9988 这里是IP:51840 ESTABLISHED 30130/java

可以看到,已经正常启动了。剩下的就是在本地连到服务器上进行调试了。


本地使用Eclipse连接服务器进行远程调试

  • Eclipse版本:4.3

1. 右击要调试项目,在弹出的菜单中点击 Debug AS -> Debug Configurations...

195033_oeNM_114016.png

    如图所示,右击Remote Java Application,新建一项,

195034_2A8u_114016.png


在Project中选中要远程调试的项目,在Connection Type中选择Socket Attach,在Connection Propertyies中设置远程调试的应用的IP地址及端口。

然后点击Apply,Debug就可以连接了。





转载于:https://my.oschina.net/gccr/blog/213523

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

远程调试运行在Resin上面的Web应用程序 的相关文章

  • Android PhoneGap 插件,UI 选项卡栏,调整 WebView 大小

    我正在创建一个美味的 PhoneGap 插件 希望一旦它能被打开 准备好了 插件基本完成了 我只需要一个漂亮的用户界面 相互作用 简而言之 我想创建一个 本机 android 工具栏组件 如果您实现 PhoneGap UIControls
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • 使用 HttpUrlConnection Android 将 base64 编码的图像发送到服务器

    我正在尝试使用 HttpUrlConnection 将 base64 编码的图像发送到服务器 我遇到的问题是大多数图像均已成功发送 但有些图像会生成 FileNotFound 异常 我的图像编码代码可以在下面找到 public static
  • 无法使用 json 架构验证器根据预定义的 yaml 文件验证查询参数

    我需要根据预定义的 yaml 文件架构验证查询参数的架构 因此我使用 json 架构验证器 验证如何失败 我正在执行以下步骤 填充参数和相应的架构 final List
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • Java 正则表达式 - 字母数字,最多一个连字符,句点或下划线,七个字符长

    我是 Java 正则表达式工具的新手 尽管它们潜力巨大 但我很难完成这项任务 我想编写一个正则表达式来验证遵循以下语法的输入字符串 小写字母和数字的任意组合 仅一个下划线 一个破折号或一个句号 无其他特殊字符 最小长度为 5 我想出了以下解
  • 正则表达式获取字符串中的第一个数字和其他字符

    我是正则表达式的新手 想知道如何才能只获取字符串中的第一个数字 例如100 2011 10 20 14 28 55 在这种情况下 我希望它返回100 但该数字也可以更短或更长 我在想类似的事情 0 9 但它单独获取每个数字 100 2001
  • 如何导入 org.apache.commons.lang3.ArrayUtils;进入 Eclipse [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我如何导入 org apache commons lang3 ArrayUtils 将库添加到 Ecl
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • Java-如何将黑白图像加载到二进制中?

    我在 FSE 模式下使用 Java 和 swing 我想将完全黑白图像加载为二进制格式 最好是二维数组 并将其用于基于掩码的每像素碰撞检测 我什至不知道从哪里开始 过去一个小时我一直在研究 但没有找到任何相关的东西 只需将其读入Buffer
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • 发生错误。请参阅日志文件 - eclipse juno

    每当我启动 Eclipse Juno 时 都会出现错误 发生错误 请查看日志文件 C Program Files eclipse configuration 1362989254411 log 有的网站说卸载jdk重新安装 我这样做了 但没
  • 我想在java中使用XQuery进行Xml处理

    我想用XQuery用于从 java 中的 Xml 获取数据 但我没有得到需要为此添加哪个 Jar 我在谷歌上搜索了很多 但没有得到任何有用的例子 例如我得到以下链接 https docs oracle com database 121 AD
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • JavaFX - 为什么多次将节点添加到窗格或不同的窗格会导致错误?

    我现在正在学习基本的 JavaFX 我不明白我正在阅读的书中的这一说法 不 诸如文本字段之类的节点只能添加到一个窗格中一次 将节点添加到多次窗格或不同的窗格将导致运行时错误 我可以从书中提供的UML图看出它是一个组合 但我不明白为什么 库类
  • 为什么我的代码会产生错误:该语句没有返回结果集[重复]

    这个问题在这里已经有答案了 我正在从 Microsoft SQL Server Studio 执行以下查询 该查询工作正常并显示结果 SELECT INTO temp table FROM md criteria join WHERE us
  • 为什么这个私人浮动字段变为零?

    我有一些奇怪的行为 我很难向自己解释 称为 textureScale 的浮点字段变为零 如果某些代码正在更改该值 则可以解释这一点 然而 我希望能够通过将其设置为 私有最终浮点 来导致构建失败 或者至少是运行时异常 那么无论更改该值都将失败
  • 失败时石英重试

    假设我有一个这样配置的触发器
  • 防止Java实例化的正确方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么范围为“provided”的依赖项会隐藏 Maven 中的传递依赖项?

    我的 Maven 项目中有三个模块 这稍微简化了 model包含JPA注释的实体类 坚持实例化一个实体管理器并调用它的方法 应用创建类的实例model 设置一些值并将它们传递给坚持 model and 坚持显然取决于javax persis

随机推荐

  • 路由工作原理以及eNSP静态路由配置实验

    文章目录 一 路由器 1 1 什么是路由器 1 2 路由器工作原理以及功能 1 3 路由表 1 4 路由的种类 二 静态理由 三 eNSP静态路由实验 一 路由器 1 1 什么是路由器 路由器 Router 是连接两个或多个网络的硬件设备
  • 对el-table只做升降排序,去除中间默认状态

    概述 大家都知道 el table 排序存在升序 降序 默认不排序的状态 本次做项目时遇到了需要对表格进行排序的功能 要求排序时只对数据进行升序 降序排序 本次开发使用了 el table 组件 且去除了中间默认不排序状态 本次排序功能是后
  • windows下python3.9安装pycrypto成功总结

    用pip install pycrypto会提示 Microsoft Visual C 14 0 or greater is required 看了一些文章说要去下载安装vc 的运行环境 实测后 没什么用 有2个方法是可行的 1 pip i
  • [数据分析与可视化] Python绘制数据地图3-GeoPandas使用要点

    本文主要介绍GeoPandas的使用要点 GeoPandas是一个Python开源项目 旨在提供丰富而简单的地理空间数据处理接口 GeoPandas扩展了Pandas的数据类型 并使用matplotlib进行绘图 GeoPandas官方仓库
  • 刷脸支付利用线下流量是至关重要的

    微信刷脸 刷脸支付带出的新颖 便捷 有效以及安全的支付体验 是能够大大提高客户对刷脸商品的认可度和信赖度 刷脸收款不仅仅在收款过程中缩小时间 还将吸引消费者注意力的时间延长了5秒到8秒右左 这几秒就有很大的商业价值 是让顾客跟商家的经营生成
  • 分布式任务-数据批量新增数据库

    分布式 数据批量新增数据库 0 pojo package com mall order pojo import org apache commons lang3 builder ToStringBuilder import javax pe
  • vue3 transition 隐藏过渡,折叠过渡效果实现

    隐藏过渡 可以直接使用官方给出的例子 隐藏过渡效果 fade enter active fade leave active transition opacity 0 5s ease fade enter from fade leave to
  • Python使用pyechart绘制3d散点图

    代码 import numpy as np import pyecharts options as opts from pyecharts charts import Scatter3D if name main a np arange 1
  • Python 之pandas库的安装及库安装两方法总结

    如果你连续看了博主的各类Python的库引用 你会发现这都是套路 先上正儿八经的流程 后面一句话总结一下这些库的安装套路 不知道安装库的你们用的什么操作 请耐心看到最后哦 保证未来的安装一举成功 一 pandas库的安装 1 打开cmd窗口
  • 扩展Ribbon支持Nacos权重的三种方式

    Nacos支持权重配置 这是个比较实用的功能 例如 性能差的机器权重设低 性能好的机器权重设高 让请求优先打到性能高的机器上去 某个实例出现异常时 把权重设低 排查问题 问题排查完再把权重恢复 想要下线某个实例时 可先将该实例的权重设为0
  • Vue - 将页面内容下载为 pdf 格式文件(html2canvas + jspdf)

    Vue 将页面内容下载为 pdf 格式文件 html2canvas jspdf 一 安装所需依赖 二 htmlToPdfNew js 核心文件 三 组件使用方法 四 组件使用实例 一 安装所需依赖 npm install html2canv
  • Apache Beam的特点

    不多说 直接上干货 Apache Beam 有两大特点 1 统一了数据批处理 batch 和流处理 stream 编程范式 2 能在任何执行引擎上运行 它不仅为模型设计 更为执行一系列数据导向的工作流提供了统一的模型 这些工作流包括数据处理
  • unity游戏开发入门——加载场景的方式

    unity加载场景的四种方式分别是 1 Application LoadLevel 同步载入 如果当前场景为A 我们要切换到场景B unity会在切换场景的时候将场景B中的全部内容 场景B中全部的静态物体 不包含兴许代码中Instantia
  • unity C# 使用 action实现函数回调和 委托(Delegate)

    一 C 使用 action实现函数回调 1 1 声明一个方法 这个方法需要传递进去一个函数 并且这个传递进去的函数也是需要参数的 我们把它声明为Action
  • unity 计时器

    unity 计数器 计时器就是在游戏界面的时间 可以是一个正计时 也可以是倒计时 现在简单分享一下简单的计时代码 private void Update totalTime Time deltaTime if totalTime lt 0
  • SpringCloud的搭建

    SpringCloud的搭建 源码 Eureka的创建步骤 最终版为2021 5 23版本 每次提交对应下面的一个步骤 1 Eureka保证AP 2 Eureka的使用 Ribbon的使用步骤 最终版为2021 5 24版本 每次提交对应下
  • Hive SQL中的lateral view explode

    公众号后台回复 图书 了解更多号主新书内容 作者 胖里 来源 胖里的日常 标题中直接写lateral view explode是我鲁莽了 毕竟这俩不是法定cp 也并不是不能分开各自生活 其中explode可以放在select从句中单独使用
  • android ScrollView 嵌套RecyclerView 解决滑动冲突

    为了解决滑动事件的冲突需要重写ScrollView Copyright 2014 Soichiro Kashima Licensed under the Apache License Version 2 0 the License you
  • 【Linux

    目录 一 判断文件是否存在 1 1 判断目录是否存在 1 2 判断文件是否存在 1 3 其他文件类型判断 二 字符串截取 去掉文件后缀 2 1 获取文件后缀 2 2 获取文件前缀 在Linux编程过程中 设计到对文件的处理时常常需要判断某个
  • 远程调试运行在Resin上面的Web应用程序

    为什么80 的码农都做不了架构师 gt gt gt 有时候 我们不得不放弃在本地调试我们的程序 把我们的程序先布署到服务器 然后把调试信息都记在日志中 用眼睛瞅日志来调试程序 不是用这种方式不行 只是效率太低 本来写程序是一件开心的事情 却