c#在100%CPU中进行线程化

时间:2011-04-12 11:47:19

标签: c# multithreading dump

我有一个包含多个线程的复杂系统。有时我在100%cpu中看到应用程序并强制重启系统。我不知道哪个线程导致它以及导致它的代码。 我需要的东西会给我系统中每个线程的状态(即线程现在在哪一行)所以我可以找到哪个代码导致100%CPU

(在java中你有线程转储kill -3,它给你每个线程的状态)

你能帮帮忙吗?

7 个答案:

答案 0 :(得分:3)

Tess的博客有一些很棒的调试教程,包括: .NET Hang Debugging Walkthrough

答案 1 :(得分:2)

人们之前曾向我建议Process Explorer

答案 2 :(得分:1)

您可以使用调试器中断然后找出所有线程正在执行的操作。 (将“调试位置”工具栏添加到Visual Studio)

另一个选择是逐个删除所有线程并找到有罪的线程。

答案 3 :(得分:1)

我发现在这样的情况下,这些日子里最好的工具之一就是微软的intellitrace。这允许历史调试和当你中断执行时,它会给你所有线程等的状态。

不幸的是,它只能在Visual Studio 2010 Ultimate版本中使用,但如果这是一个非常关键的问题并且您没有此版本,则可以随时下载30天的评估版。

答案 4 :(得分:1)

使用VS调试器附加到您的进程,然后按“break”(暂停符号)以中断执行。在这种状态下,您可以打开名为“Threads”的Debug窗口,该窗口应该为您提供每个线程的状态以及它们当前正在执行的行。在调试它们时,它还有助于为线程提供明确的名称。

答案 5 :(得分:0)

我发现99%的时间(至少对我而言)是因为我不小心做了一个无限循环而我不打算这样做或者在循环之前应该至少有几毫秒的睡眠时间继续进行。

答案 6 :(得分:0)

您可以使用visual vm之类的探查器来更好地调试应用程序中线程的行为。