调试多线程应用程序的问题

时间:2013-04-23 21:12:12

标签: eclipse

我正在尝试在Eclipse中调试多线程应用程序。有3个主题

读 写 控制器

读取和写入都可以访问Controller中的方法。我正在尝试在Write执行该Controller方法时调试问题。

我在Write线程和Controller中设置了一个断点。我打破写入,然后关闭网络连接以模拟我的错误并点击恢复,这样我就可以在Controller的断点处结束。

当我在那里时,Controller可以正常工作:它会杀死Read和Write线程(我认为)并启动新的Read和Write线程。在杀死Read和Write之后,我打开网络连接来模拟正在解决的问题。

这一切都很棒。现在应该发生的是一切都在继续它的快乐方式。除了真正发生的事情之外,Read线程会执行,然后我再次点击我在Controller中设置的断点 - 我之前从Write中找到的断点。更糟糕的是,它仍然认为网络连接不可用 - 这是没有意义的,因为我重新启用它。

这一切让我想知道是否需要停止Read线程以某种方式执行。我是否需要通过Eclipse暂停它?甚至可以从调试器中运行的应用程序中杀死一个线程吗?

标记

1 个答案:

答案 0 :(得分:0)

我是否需要通过Eclipse挂起它?
不需要暂停线程以使代码工作。我很少暂停我的线程,当我怀疑等待我没有的东西时,我会这样做。我使用断点来控制停止,有时使用属性。 Here is an interresting answer.

甚至可以从调试器中运行的应用中杀死一个线程吗?
如果有可能,那么关于Java的当前规范将不是一个好主意。停止线程的一个好方法是使用标志正确退出run()方法:see here

你确定退出了你的读写线程吗?一种方法是在run方法中添加调试信息:

run()
{
  System.out.println("start : " + this.getName());
  // do your process
  System.out.println("stop : " + this.getName());
}

在多线程中,记录有时比调试更容易。没有代码,很难更具体。