2009-10-10 51 views
5

当我在处理多线程时,如何调试以知道哪个线程会导致异常行为?调试C#主题

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

回答

1

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

1

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

的大部分时间,Visual Studio调试器就足够了。 Threads和CallStack窗口会给你很多关于发生的事情的信息。

对于重负载的东西,你可以使用WinDbg + SOS。阅读!线程,!threadpool和!runaway命令。

+0

一般通过VS中的中间面板使用这些命令会更舒服(不需要将WinDbg作为单独的进程启动。) – 2009-10-10 17:01:50

+0

@opc:只要您不需要其他WinDbg命令,就是正确的。情况并非总是如此。 – 2009-10-10 17:34:09

1

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

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

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

*不是最好的词来使用,但例如,如果您产卵10个线程来处理文件I/O只产卵1

+0

非常好的建议克里斯先生。 – user186973 2009-10-10 16:59:39

1

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