【问题标题】:Eclipse remote debug .jar files inside a larger java application大型 Java 应用程序中的 Eclipse 远程调试 .jar 文件
【发布时间】:2019-04-03 16:02:53
【问题描述】:

大多数与远程调试相关的问题都是针对整个 Java 应用程序的,您的 IDE 中的代码来自该应用程序。

在这种情况下,我无法访问完整的应用程序,只能访问代码片段、.jar 文件,这些文件稍后会嵌入到更大的应用程序中,最终将调用它们并执行它们的代码。

与大型应用程序不同,我开发的这些.jar文件不包含方法:

public static void main(string[] args)

.jar 文件实现了骆驼处理器接口,当每个配置需要一段特定代码时调用该接口。

我正在尝试仅为嵌入式 .jar 文件设置 Eclipse 远程调试。这意味着一旦 .jar 文件代码被调用,eclipse IDE 就会开始它的调试过程。

到目前为止我尝试了什么:

我尝试在调试模式下启动 .jar 文件:

java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y -jar mycode.jar

在此之后它开始:

Listening for transport dt_socket at address: 8000

尽管如上所述,这不是一个完整的 java 应用程序,但一旦我尝试将 eclipse 上的远程配置连接到它,我就会收到错误:

no main manifest attribute, in mycode.jar

如前所述,这对我来说很有意义,因为我没有主课。

现在,即使没有主类存在,是否也可以仅在调用 .jar 文件时对其进行调试?

【问题讨论】:

  • 您必须在调试模式下启动整个应用程序,如果您必须在应用程序内部运行时调试您的代码,则不仅是您的代码。
  • @Robert 但除此之外,我仍然必须在我的 IDE 中拥有整个应用程序才能对其进行调试。至少在远程 Java 应用程序调试配置中我需要引用一个项目。
  • AFAIR 您不必在本地开设所有课程。您甚至可以使用空项目连接到远程进程。当然调试会变得有点复杂。但是您可以将相关库添加到项目的构建路径中。安装反编译插件:marketplace.eclipse.org/content/enhanced-class-decompiler

标签: java eclipse debugging remote-debugging


【解决方案1】:

说实话,我认为这是不可能的。 如果您想知道您的骆驼处理器正在做正确的事情,请编写单元测试。 Junit 是一个很好的框架:https://junit.org/junit5/

【讨论】:

    【解决方案2】:

    我看到四点需要注意:

    1) 如果您没有代码,则无法在 JARS 中进行调试。您可以反编译 JAR 并尝试调试。见How can we debug a file which is inside Jar file

    2) 当然,如果您的应用程序不是桌面独立应用程序(Web 服务、基于队列的应用程序等),您可以不使用 main 方法进行调试。在这种情况下,您必须调用服务并且(IDE 已知)代码将被调用,从而允许调试。这仅适用于您拥有项目的完整代码(可能是更大应用程序的一部分)的情况。

    3) 如果你只有一段代码(函数或一些类),你可以构建一个单元测试(使用 JUnit 或其他一些软件)或一个设置所有 NECESSARY 值的主方法,以获得正确的程序流。然后,执行单元测试或调试就可以了。

    4) --Xdebug 允许 JVM 远程调试,而不是代码调试。意味着您不能停留在代码块中,但基本上允许检查变量、性能规格等。

    【讨论】:

    • 您能否提供有关选项 2) 的详细信息。我没有完整的 java 应用程序的代码,但我有嵌入其中的非可执行 .jar 文件的代码。
    • 我确实有 .jar 文件的代码,它是较大应用程序的一部分。
    猜你喜欢
    • 2013-11-21
    • 2012-08-04
    • 2013-01-29
    • 2014-08-13
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多