【问题标题】:Breakpoint a multi thread application断点多线程应用程序
【发布时间】:2011-08-14 16:10:02
【问题描述】:

如果我断点多线程应用程序会发生什么。

它会停止所有线程,只是中断指向的线程还是整个程序崩溃?

如果可能的话,我是否只想停止一个线程,或者这会扰乱我的应用程序吗?

如果我无法对多胎面应用程序进行断点,我可以使用哪些调试技术?

【问题讨论】:

    标签: multithreading breakpoints


    【解决方案1】:

    JAVA:就个人经验而言,您可以通过停止所有线程或单个线程来调试多线程应用程序。这很可能取决于您使用的 IDE 以及您连接的应用程序,但对我来说:

    • Eclipse 以调试模式连接到在 jpda 中运行的 Tomcat 服务器
    • 在代码中放置断点,转到 Eclipse 的调试透视图(有时会暂停但不切换透视图)

    • 在断点窗口中,您将看到一个断点列表。您可以右键单击每个线程并设置属性...如果您想在一个断点上停止所有线程,请点击 Suspend VM 单选按钮。如果您只想停止单个线程,请单击挂起线程。

    如果使用单线程停止选项,我不确定您此时是否能够选择要暂停的线程。在 Suspend VM 中,您可以查看 Debug 窗格并查看您的线程...向下滚动,您可以在线程之间跳转(Daemon thread 10 vs Daemon thread 9,类似的)

    【讨论】:

      【解决方案2】:

      由于您没有使用特定语言/平台标记您的问题,我将给出与 Java 相关的答案。

      在大多数 IDE 中,您可以在断点上设置属性,特别是 条件 属性。因此,如果您知道线程的名称,则可以执行以下操作:

      "ThreadName".equals(Thread.currentThread().getName())

      ...所有其他使用同一类(您设置断点的地方)的线程将不受阻碍地继续运行。

      【讨论】:

      • 至少在 intellij 中,你也可以只勾选“只停止这个线程,而不是全部”的选项
      【解决方案3】:

      它会停止所有线程。

      通常不可能只停止一个线程。有关使用 GDB 调试线程的更多信息,请参阅手册的this part

      【讨论】:

      • 你可以重启所有线程,或者在某些情况下只重启一个线程。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多