与远程调试有关的大多数问题都是针对整个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文件时调试它吗?
答案 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远程调试,而不是代码调试。意味着您不能在代码块中停下来,而是基本上可以检查变量,性能规格等。