51

我处于一个非常奇怪的位置(从我的 java 新手的角度来看):

  1. 使用 Eclipse,我编写了一个“java 程序”(一些带有类的 .java 文件),它基本上(批量)读取文本 *.csv 文件,“评估”其内容,并将结果写入 *_out.csv 文本文件。要找到输入文件,它使用“文件选择器”(从此处获取示例:http: //docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html

  2. 我调试了所有代码,并且使用调试器,它可以工作

  3. 我运行了代码(主类,它依次调用所有其他类)并且在 Eclipse 中运行。

  4. 我将所有项目的内容导出到一个“可运行的 jar”文件中。

请注意,除了文件选择器,这主要是一个读写的“批处理”:几乎没有用户界面。在进入 Eclipse 时,我使用类似“ if(debug) System.out.print("something to print"); ”的方法展示了一些内部结果,在调试时设置“ debug ”为 TRUE,在生产环境中设置为 FALSE。

以上所有工作!

现在,启动可运行的 jar(在 Win/XP 中双击 jar 文件),我可以看到文件选择器,我可以使用它,但是,在选择输入文件后......仅此而已:(没有用户界面)我不知道文件是否被读取,我没有看到任何生成的输出文件,我什至没有“控制台”来列出任何中间调试消息,以查看 jar 是否正常工作,即使我重新- 将调试变量设置为 TRUE 以导出它。

有没有办法“运行时调试”正在运行的 jar(如 VB 的 MsgBox 或其他)?我可以“启用”或查看某种“日志文件”?(显然,由于我的 jar 没有写入结果文件,所以我也无法尝试编写 *.log)我还必须说我无法在我的机器上安装除 Eclipse 以外的其他设备(幸运的是它运行了),因此没有通常的开发人员工具、实用程序和其他有用的东西。

4

4 回答 4

121

http://www.eclipsezone.com/eclipse/forums/t53459.html

基本上运行它:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044

该应用程序在启动时将等待您从另一个来源连接。

所以 CLI 命令将是:

java -jar yourJarFileName.jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044
于 2013-11-07T17:16:30.660 回答
66

java您可以在使用特殊选项启动命令时激活 JVM 的调试功能:

java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y -jar path/to/some/war/or/jar.jar

在命令行上这样启动jar.jar将:

  • 将此JVM实例作为服务器 ( server=y) 侦听端口 8000 ( address=8000)
  • 写信Listening for transport dt_socket at address: 8000stdout
  • 然后暂停应用程序 ( suspend=y) 直到某个调试器连接。在这种情况下,调试器充当客户端。

选择调试器的常用选项有:

  • Eclipse 调试器:在运行->调试配置... -> 选择远程 Java 应用程序-> 单击新建启动配置按钮。为此调试配置提供任意名称,连接类型:标准(套接字连接)和作为连接属性的条目主机:本地主机端口:8000应用更改并单击Debug。此时 Eclipse 调试器已成功连接到 JVM,jar.jar应该开始执行。
  • jdb 命令行工具:启动它jdb -connect com.sun.jdi.SocketAttach:port=8000
于 2016-07-13T17:04:02.743 回答
17

即使它是一个可运行的 jar,您仍然可以从控制台运行它——打开一个终端窗口,导航到包含该 jar 的目录,然后输入“java -jar yourJar.jar”。它将在该终端窗口中运行,并且 sysout 和 syserr 输出将出现在那里,包括来自未捕获异常的堆栈跟踪。确保在编译时将调试设置为 true。还有祝你好运。


只是想到了其他事情-如果您使用的是Win7,则用户应用程序将文件写入特定目录时通常会出现权限问题。确保您正在写入输出文件的目录是您有权访问的目录。

在未来的项目中,如果它足够大,您可以使用标准日志记录工具之一进行“调试”输出;那么将它重定向到文件而不是依赖于控制台将很容易(ier)。但是对于像这样的较小的工作,这应该没问题。

于 2013-11-07T17:28:39.373 回答
2

使用IntelliJ IDEA您可以创建Jar Application运行时配置,选择JAR、源、JRE运行Jar并开始调试。是文档。

于 2018-09-04T19:50:44.543 回答