代码之家  ›  专栏  ›  技术社区  ›  JoaoFilipeClementeMartins

大型Java应用程序中的Eclipse远程调试.jar文件

  •  0
  • JoaoFilipeClementeMartins  · 技术社区  · 6 年前

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

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

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

    public static void main(string[] args)

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

    我试图只为嵌入的.jar文件设置eclipse远程调试。这意味着一旦调用.jar文件代码,EclipseIDE将启动其调试过程。

    我到目前为止所做的:

    我试图在调试模式下启动.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文件时调试该文件,即使不存在主类?

    2 回复  |  直到 6 年前
        1
  •  0
  •   the hand of NOD    6 年前

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

        2
  •  0
  •   Rafael Palomino    6 年前

    我认为有四点需要注意:

    1)如果没有代码,就不能在jar中调试。您可以反编译jar并尝试调试。见 How can we debug a file which is inside Jar file

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

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

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