2008-09-17 191 views

回答

4

我刚刚昨天第一次使用jdb,对结果非常满意。你看,我在我的笔记本电脑上用Eclipse进行编程,然后部署到虚拟机上,以确保整个shebang仍然可用。非常偶然的情况下,我必须研究一些独立执行的东西,作为命令行。这些东西有时需要调试。

这一直是一个问题,因为我不想在VM上安装Eclipse的麻烦(它已经够慢了!),但我不知道一个简单的方法来获得它在完成运行之前连接到我的命令行运行类。

jdb来救援!它的作用很小 - 功能很小,几乎到了裸露的地步......这会迫使你更多地运用你的头脑,而不是使用这个工具(就像我说的here)。

确保打印出参考文献(solaris,windows,java 1.5 - 我认为它们都差不多),并在第二个屏幕上打开并浏览您的源代码。我希望你有第二个屏幕,否则你会很多。

+0

正如在其他答案中通过codingME所述,您可以使用JPDA(http://docs.oracle.com/javase/1.5。 0/docs/guide/jpda/conninv.html)命令行切换,使您的Java VM侦听调试器连接。尝试suspend = y暂停执行,直到调试器连接,避免在调试器连接之前完成程序的问题。通过指定合适的端口号以及防火墙配置或SSH隧道设置,您可以通过网络连接到远程VM。例如:-agentlib:jdwp = transport = dt_socket,server = y,address = 5005,suspend = y – Neek 2012-07-24 07:14:24

-1

我更喜欢在eclipse中使用远程调试工具。

-3

JDB难以置信地难以使用。放置System.outs或使用IDE调试器将产生更好的结果。对于更有趣的功能(例如跟踪线程,堆大小等),您可以使用JConsole工具以图形方式获取信息。

+0

加多宝是那么容易,因为任何调试器来使用,这种反馈是非生产性。 此外,JConsole不允许您观察变量,设置断点,中断例外等。 – 2014-06-11 00:16:53

2

假设你的程序是由以下命令开始:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=<port> <class> 

您可以通过JDB附加到这个过程:

jdb -attach <port>