【问题标题】:Eclipse not stopping at java breakpoints during remote debugEclipse 在远程调试期间未在 java 断点处停止
【发布时间】:2022-01-19 00:13:49
【问题描述】:

在尝试调试部署到码头 (9.4) 服务器的应用程序时,我遇到了一个非常奇怪的错误。我按照这里的说明进行操作:https://www.eclipse.org/jetty/documentation/jetty-9/index.html#advanced-debugging 用于使用 eclipse 设置远程调试。我将调试参数添加到我的启动脚本中,如果我在码头上进行状态调用,我可以看到它们被列出:

RUN_CMD = /opt/java/8/bin/java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9999 -Djetty.home=/opt/ jetty/9.4 -Djetty.base=/opt/web/jetty -Djava.io.tmpdir=/opt/jetty/temp -jar /opt/jetty/9.4/start.jar jetty.http.host=我的 ip adr jetty.http.port=我的端口 jetty.spdyPort=我的 spd 端口 jetty.state=/opt/web/jetty/jetty.state jetty-开始.xml

如果我运行我的启动脚本,它将暂停并等待我启动 Eclipse 调试器,然后再继续。如果我在浏览器中导航到我的应用程序,我可以从日志输出中看到我的方法正在运行。但是,这些方法中的断点永远不会被命中,执行也永远不会暂停。

我已经尝试了所有我能想到的东西,但我只是看不出我在这里做错了什么。我以前做过这个并且它有效,所以我只能假设这是关于我的应用程序部署到码头的方式。任何建议将不胜感激。

更新: 我已经缩小了我认为是问题根源的范围,但我仍然不知道如何解决它。我最近将 jetty 的日志记录模块从 log4j 切换到 logback。一旦我禁用了 logback 模块,调试就会再次起作用。不幸的是,简单地禁用日志记录并不是一个长期的解决方案。我仍然需要一些能够调试和启用日志记录的方法。

【问题讨论】:

  • 你能在方法本身上创建一个中断(在面板中右键单击它)吗?
  • 自上次工作以来,你有什么改变?
  • @ThorbjørnRavnAndersen 我尝试添加一个方法断点,但结果是一样的。我能想到的唯一重大变化是将日志记录实现从 log4j 切换到 logback,但我不明白为什么这会干扰 eclipse 断点。
  • 只是现有断点的问题,还是在正确连接后添加的断点停止?

标签: java eclipse debugging logback jetty-9


【解决方案1】:

感谢码头社区,我终于能够找到答案。有关更多详细信息,请参阅此线程:https://github.com/eclipse/jetty.project/issues/7299,但简短的回答是这是一个 jvm 分叉问题,类似于 murtiko 建议的问题。

使用除基本 slf4j-impl 之外的任何日志框架都会导致 jvm 分叉,并且需要不同的方法来进行调试。与其在设置脚本中指定调试参数(-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9999),不如在 start.ini 中设置它们以及 --exec 标志. 类似:

# --------------------------------------- 
# Module: logging-logback
# Configure jetty logging to use Logback Logging.
# SLF4J is used as the core logging mechanism.
# --------------------------------------- 
--module=logging-logback

--exec
-Xdebug
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9999 

如果您不想每次打开或关闭调试时都编辑 start.ini,您可以创建一个自定义的 jetty 模块。我在 $JETTY_HOME/modules 中创建了一个名为 remote-debug.mod 的文件,其内容

[exec]
-Xdebug
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9999

要启用调试,我只需将参数 --module=remote-debug 添加到启动命令。

【讨论】:

    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2012-02-16
    • 2010-11-25
    • 2019-08-16
    • 2021-04-20
    • 1970-01-01
    相关资源
    最近更新 更多