调试多线程 C# 代码:是否可以中断一个线程并保持其他线程运行?

nha*_*rer 6 c# debugging multithreading visual-studio

我喜欢 Java 中的这一功能,您可以仅挂起一个线程并保持其他线程运行。特别是在 Netbeans 中,调试窗口中每个线程旁边都有一个暂停按钮。单击该按钮会挂起(中断)该特定线程。然后您可以调试并单步调试代码。但所有其他线程都保持运行不受干扰。

如果您有与外界(硬件、网络等)通信的线程,这尤其有用。而且你不想打扰他们,所以另一边没有超时。

这在 Visual Studio 中也可能吗(例如 2013)?到目前为止,在我看来,当我暂停程序(或命中断点)时,所有线程都会停止,并且在调试该单线程的代码时无法让某些线程运行。

我知道有一个冻结功能,它可以暂停一个线程,而其他线程继续运行。虽然很有用,但到目前为止它并不是同一件事。因为我无法单步执行该线程或检查某些变量。只有当我点击“Break All”时我才能做到这一点。但这将停止所有线程。我可能只是错过了一些东西?

Onl*_*ind 3

这就是我所做的:

  1. 设置一个条件断点,我知道该断点只会命中我正在寻找的线程。
  2. 一旦断点命中并且您处于所需的线程中,请在 Visual Studio 线程窗口(调试时,“调试”->“窗口”->“线程”)中,按 Ctrl + A(选择所有线程),然后按 Ctrl 键并单击您想要的线程。目前已开启。您应该选择除要调试的线程之外的所有线程。
  3. 单击鼠标右键,然后选择“冻结”。

现在,Visual Studio 将仅单步执行解冻的线程。这样做时似乎要慢得多,大概是因为它必须循环所有冻结的线程,但它给我的多线程调试带来了一些理智。

  • 谢谢卢卡斯,但这与我需要的几乎相反。我希望在我单步执行单个线程时其他线程**继续运行**。就我而言,线程甚至没有运行相同的代码。所以不需要中断条件。例如,一个线程通过网络发送消息。另一个线程做一些计算。我需要的是闯入并调试执行计算的线程,而**同时**通信线程保持运行。冷冻则相反。这会导致通讯中断。 (2认同)