如果我在多线程应用程序中设置断点会发生什么。
它是否停止所有线程,仅停止断点的线程,还是整个程序崩溃?
如果可能的话,我是否只想停止一个线程,或者这会弄乱我的应用程序吗?
如果我无法对多线程应用程序进行断点,我可以使用哪些调试技术?
JAVA:就个人经验而言,可以通过停止所有线程或单个线程来调试多线程应用程序。这很可能取决于您使用的 IDE 以及您要连接的应用程序,但对我来说:
在代码中放置断点,进入Eclipse的调试视角(有时会暂停但不切换视角)
在断点窗口中,您将看到断点列表。您可以右键单击每个线程并设置属性...如果您想在一个断点处停止所有线程,请点击“暂停 VM”单选按钮。如果您只想停止单个线程,请单击挂起线程。
如果使用单线程停止选项,我不确定此时您是否能够选择要暂停的线程。在挂起 VM 中,您可以查看“调试”窗格并查看您的线程...向下滚动,您可以在线程之间跳转(守护进程线程 10 与守护进程线程 9,类似的东西)
它会停止所有线程。
通常不可能只停止一个线程。有关使用 GDB 调试线程的更多信息,请参阅手册的这部分。
由于您没有使用特定语言/平台标记您的问题,我将给出与Java相关的答案。
在大多数 IDE 中,您可以设置断点属性,特别是“条件”属性。因此,如果您知道线程的名称,您可以执行以下操作:
"ThreadName".equals(Thread.currentThread().getName())
...并且使用同一类(在其中设置断点)的所有其他线程将不受阻碍地继续运行。
模式,这真的很酷。你知道 VS 调试器有类似的技巧/模式/什么吗?