对多线程应用程序设置断点

问题描述 投票:0回答:4

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

它是否停止所有线程,仅停止断点的线程,还是整个程序崩溃?

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

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

multithreading breakpoints
4个回答
7
投票

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

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

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

如果使用单线程停止选项,我不确定此时您是否能够选择要暂停的线程。在挂起 VM 中,您可以查看“调试”窗格并查看您的线程...向下滚动,您可以在线程之间跳转(守护进程线程 10 与守护进程线程 9,类似的东西)


1
投票

它会停止所有线程。

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


0
投票

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

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

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


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


0
投票
non-stop

模式,这真的很酷。你知道 VS 调试器有类似的技巧/模式/什么吗?

© www.soinside.com 2019 - 2024. All rights reserved.