调试C#线程

时间:2009-10-10 16:39:08

标签: c# multithreading debugging

当我处理多线程时,如何调试以了解哪个线程导致异常行为?

我可以使用permonitor进行调试,还是有其他可用的工具或调试工具?

6 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

您可以使用visual studio在某些线程上设置断点。有关如何操作的信息,请参阅herehere

答案 2 :(得分:1)

这取决于你的“异常行为”是什么意思......

在大多数情况下,visual studio调试器应该足够了。 Threads和CallStack窗口将为您提供有关正在发生的事情的大量信息。

对于重型物品,您可以使用WinDbg + SOS。阅读!threads,!threadpool和!runaway命令。

答案 3 :(得分:1)

如果你有几个相同类型的线程*你可以修改你的代码只运行每种类型的线程之一(或者可能把它放在应用程序的配置文件中,这样你就可以在调试时快速更改它)。

如果应用程序仍然行为不当,那么您就知道这是导致问题的不同类型的线程之间的交互。如果没有,则可能是某些资源没有正确锁定线程(例如)。

我想说的是简化您的应用程序,使用最少数量的线程仍然是您的原始设计。

*不是最好用的词,但是例如,如果你产生10个线程来处理文件i / o只产生1。

答案 4 :(得分:1)

您如何定义异常行为?这是一个例外吗?不确定这是否会对你有所帮助,但我经常做的是在创建它时命名线程对象,然后如果我捕获异常或存在某些条件,我会写入事件日志。我包括时间,应用程序名称,线程名称和异常信息。我不只是将它用于调试,如果用户抱怨奇怪的行为或报告错误,我会使用它。然后我可以回去获取相关信息。

答案 5 :(得分:1)

作为调试的替代方法,您可以进行与线程相关的测试。书The Art of Unit Testing在附录B中有一节。作者提到了三种工具(其中两种是他个人感兴趣的):