【问题标题】:debug java jar file from command line?从命令行调试java jar文件?
【发布时间】:2018-07-30 23:39:12
【问题描述】:

我无法使用 jdb 进行命令行调试以处理 Cucumber/Java jar 文件。例如,我查看了this SO question,到目前为止没有任何效果。

  • 当我从 IntelliJ 运行黄瓜功能文件时,它运行良好。
  • 我按照当地的指示编译了程序,顺利完成。
  • 当我使用java -jar runJar.jar 运行编译后的 jar 文件时,一切正常。
  • 当我运行 jdb runJar.jar 时,我得到 jdb 提示:

    正在初始化 jdb ...

但是当我尝试运行 Main-Class 时,它失败了:

> run MainRunner
run  MainRunner
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
>
VM Started: Error: Could not find or load main class MainRunner

The application exited

我知道“MainRunner”是正确的类,因为这是 IntelliJ 中“主类:”的名称,还因为我使用以下命令解压缩了 jar 文件:

unzip -c MyJar.jar META-INF/MANIFEST.MF | grep 'Main-Class

它会将Main-Class: com.XXXXX.sdt.framework.runner.MainRunner 报告为主类。

  • 如果改为run MainRunner 我输入run com.XXXXX.sdt.framework.runner.MainRunner,那么我会收到错误:

    VM 已启动:错误:无法找到或加载主类 com.XXXXX.sdt.framework.runner.MainRunner

  • 如果我启动一个 JVM 然后附加到它:

    java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044 -jar runJar.jar

jdb -attach 1044

在 main1 提示符后继续,我得到错误

Exception occurred: java.lang.StringIndexOutOfBoundsException (uncaught)"thread=main", java.lang.String.charAt(), line=658 bci=21

jdb 上的 Java 文档暗示这应该可以正常工作,所以我不确定从这里去哪里。

【问题讨论】:

    标签: java command-line cucumber-java


    【解决方案1】:

    您是否注意到您正在运行 runJar.jar 但检查了 MyJar.jar 中的 Main 类?

    如果您使用 JAR 文件作为应用程序打包,则需要该 jar 文件中的 Main-Class,而不是路径中的某个 jar 文件。

    【讨论】:

      猜你喜欢
      • 2015-06-13
      • 2010-10-31
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2012-06-29
      • 1970-01-01
      相关资源
      最近更新 更多