【问题标题】:problems debugging multithreaded applications调试多线程应用程序的问题
【发布时间】:2013-04-17 06:04:40
【问题描述】:

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

阅读 写 控制器

Read 和 Write 都可以访问 Controller 中的方法。当 Write 执行该 Controller 方法时,我正在尝试调试问题。

我在写线程和控制器中设置了一个断点。我中断了 Write 并关闭了网络连接以模拟我的错误并点击恢复,因此我在 Controller 中的断点处结束。

当我在那里时,控制器会正常工作:它会杀死读写线程(我认为)并启动新的读写线程。杀死读写后,我打开网络连接来模拟正在解决的问题。

这一切都很棒。现在应该发生的事情是一切都在继续进行。除了真正发生的是 Read 线程执行并且我再次到达我在 Controller 中设置的断点 - 与我之前从 Write 中命中的断点相同。更糟糕的是,它仍然认为网络连接不可用 - 因为我重新启用了它,所以这毫无意义。

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

标记

【问题讨论】:

    标签: eclipse


    【解决方案1】:

    我需要通过 Eclipse 暂停它吗?
    不,没有必要为了你的代码工作而暂停一个线程。我很少暂停线程,当我怀疑它正在等待我不例外的东西时,我会这样做。我使用断点来控制停止,有时还使用属性。 Here is an interresting answer.

    甚至可以从调试器中运行的应用程序中终止线程吗?
    ,如果可能的话,就当前的 Java 规范而言,这不是一个好主意。停止线程的一个好方法是使用标志正确退出 run() 方法:see here

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2010-09-21
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多