当我处理多线程时,如何调试以了解哪个线程导致异常行为?
我可以使用permonitor进行调试,还是有其他可用的工具或调试工具?
答案 0 :(得分:2)
答案 1 :(得分:1)
答案 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中有一节。作者提到了三种工具(其中两种是他个人感兴趣的):