使用JPDA进行Java程序的Debug

最近遇到一个很有趣的问题。程序在Eclipse开发状态下运行正常,但运行打包好的程序就有错误。然后我突然发现,竟不知道如何脱离Eclipse对一个Java程序做Debug,得找一个Java世界里的GDB。

其实是有的,那就是JPDA(Java Platform Debugger Architecture)–Java平台调试体系结构,IBM developerWorks上面有比较详细的介绍(请搜索“深入Java调试体系”),大概的结构也分几层,有Debuggee(被调试者),Debugger(调试者)等角色。

那如何进行调试呢?

还是举个小例子。有如下程序:

这是一死循环,不停的在打“Hello,World!”。

打包成一个test.jar, 然后用如下命令行启动。

好吧,你看到了一些JVM的参数。是的,加上-Xrunjdwp,JVM在启动test.jar时,会启动一个调试的Agent。后面具体参数的意思是:

启动之后,你会看到,

这是说Debuggee已经在准备Debugger的到来了。

Debugger连接

Debugger是谁?Eclipse是个不错的选择。如何建立连接?很容易,Let’s step by step.

  1. 选择Run->Debug Configurations…
  2. 选中“Remote Java Application”右击选择New。
  3. 然后填写Name,Host,Port,ConnectionType选择“Standard (Socket Attach)”。
  4. 点击“Debug”后,你会发现到不到源码,程序的执行也暂停了。
  5. 如果有源码的话,点击加载源码。
  6. 然后就可以加断点Debug了。

好了,这就完成了Java的程序的远程调试。当然没有源码也是可以调的,只是不那么直观。总之,很酷! 😛

发表评论

电子邮件地址不会被公开。 必填项已用*标注