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

时间:2018-10-30 15:01:40

标签: java eclipse debugging remote-debugging

与远程调试有关的大多数问题都是针对整个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文件时调试它吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我要注意四点:

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

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

3)如果只有一段代码(函数或某些类),则可以构建单元测试(使用JUnit或某些其他软件)或设置所有必要值的主要方法,以获取正确的值程序流程。然后,执行单元测试或调试即可解决问题。

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