java - 从命令行调试java jar 文件?

标签 java command-line cucumber-java

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

  • 当我从 IntelliJ 运行 Cucumber 功能文件时,它工作得很好。
  • 我按照本地指示编译了程序,并且成功完成。
  • 当我使用 java -jar runJar.jar 运行编译后的 jar 文件时,一切正常。
  • 当我运行 jdb runJar.jar 时,我收到 jdb 提示:

    正在初始化 jdb ...

但是当我尝试运行主类时,它失败了:

> 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 中“Main class:”的名称,也因为我使用以下命令解压缩了 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

并在主 1 之后恢复提示,我收到错误

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

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

最佳答案

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

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

关于java - 从命令行调试java jar 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48888146/

相关文章:

java - 无法创建android onListItemClick 方法

python - 多个 -m 命令行参数 (Python)

java - Cucumber Java如何更新DataTable中的元素

java - 我可以创建一个 spring bean 作为我的 cucumber 步骤定义的一部分吗?

java - 为什么 java.sql.Statement 是接口(interface)而不是抽象类?

java - amd 64 位平台上的 unowinreg.dll : can't load ia 32-bit . dll

java - Python 通过异步递增变量运行 Java 命令行参数。

spring-boot - Spring Boot 主作用域中的 cucumber : Autowire not working

Java HashSet 与数组性能

linux - 将 Linux 系统时钟同步到 Windows NTP 服务