监控C#线程 – 哪个/什么时候做什么

作为每个人,我习惯于在逐步模式下调试VS中的代码。 好吧,既然我到处都有许多背景工作者的申请,我不再在堪萨斯州。

调试线程应用程序的最有效方法是什么,并能够监视每个线程以跟踪代码中发生的事情?

截至目前,我坚持使用每个线程的单独记录器实例进行良好的调试,但这正在慢慢变成一场噩梦,我很快就会淹没在我自己的日志中。

不要试图一次调试所有内容。 将焦点缩小到一个线程或一对线程中的特定行为,这些线程围绕某些互斥锁进行交互。 如果访问共享资源是问题,请设置使用该资源的断点(应该使用公共代码,而不是整个地方)。

如果您只是想在线程1之前看到线程3完成,或者线程2用完所有工作项并且闲置,请使用日志。

您还可以使用VS Threads视图查看每个线程在任何线程上的任何断点处停止进程时正在执行的操作。 这可以让您深入了解所有线程在任何给定时刻所做的事情。

一个可能减轻您痛苦的小技巧是使用Visual Studio来冻结您不感兴趣的线程。然后,当您告诉调试器继续时,冻结的线程将永远不会执行,也不会遇到断点并使您感到困惑。

也许您可以使用此方法仅允许您正在调试的线程工作。 例如,保留一个入队的线程和一个出列的线程,但冻结其他所有线程。

您可以通过右键单击线程来冻结/解冻Visual Studio的Threads窗口中的线程。

第一次正确写。

开玩笑说,调试的诀窍是将其分解为可管理的部分。 一次解决一个工人任务,确保它完成它应该做的事情。

一旦你完成了这个,主线程中的调试问题就容易多了,因为你几乎可以忽略后台工作者,只是假定他们应该得到正确的结果。

剩下比单线程应用程序更难调试的地方是线程之间的互连,如果你按照应该的方式使用库,这应该不会困难得多。

我偶然发现了一篇关于调试multithreading应用程序的详细MSDN文章,这篇文章非常有帮助。 所有以前的答案都引导我走向正确的轨道。