如何在运行时调试 jar?

新手上路,请多包涵

我处于一个非常奇怪的位置(从我的 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 以外的东西(幸运的是它运行了), 所以没有通常的开发人员工具、实用程序和其他有用的东西。

原文由 eewing 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 832
2 个回答

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


只是想到别的事情——如果你在 Win7 上,用户应用程序将文件写入特定目录时通常会出现权限问题。确保您写入输出文件的目录是您有权访问的目录。

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

原文由 arcy 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 RamonBoza 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题