我怎样才能在运行时调试jar?

时间:2013-11-07 17:14:41

标签: java eclipse debugging jar runtime

我处于一个非常奇怪的位置(从我的java-newbie观点来看):

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

  2. 我调试了所有代码,使用调试器,可行

  3. 我运行了代码(主类,它按顺序调用所有其他代码)和它可以工作在Eclipse中

    < / LI>
  4. 我将所有项目内容导出到“runnable jar”文件中。

  5. 请注意,文件选择器除外,这主要是一个读写的“批处理”:几乎没有用户界面。在Eclipse中,我使用类似“ if(debug)System.out.print(”要打印的东西“)的内容显示了一些内部结果; ”提供设置“ debug ”调试时为TRUE,在生产环境中为FALSE。

    以上所有都有效!

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

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

4 个答案:

答案 0 :(得分:82)

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

基本上用以下方式运行:

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

应用程序在启动时将一直等到您从其他来源连接。

答案 1 :(得分:38)

使用特殊选项启动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: 8000写入stdout
  • 然后暂停应用程序(suspend=y)直到某个调试器连接。在此方案中,调试器充当客户端

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

  • Eclipse Debugger:在运行下 - &gt; 调试配置...... - &gt;选择远程Java应用程序 - &gt;单击新启动配置按钮。为此调试配置提供任意名称连接类型:标准(套接字连接)连接属性条目主机:localhost 端口:8000 应用更改并单击调试。在Eclipse Debugger成功连接到JVM的那一刻,jar.jar应该开始执行。
  • jdb命令行工具:使用jdb -connect com.sun.jdi.SocketAttach:port=8000启动

答案 2 :(得分:14)

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


只是想到了别的东西 - 如果你使用的是Win7,它通常会遇到用户应用程序将文件写入特定目录的权限问题。确保您编写输出文件的目录是您具有权限的目录。

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

答案 3 :(得分:1)

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

相关问题